Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/x86/tools/relocs_common.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0
2
#include "relocs.h"
3
4
void die(char *fmt, ...)
5
{
6
va_list ap;
7
va_start(ap, fmt);
8
vfprintf(stderr, fmt, ap);
9
va_end(ap);
10
exit(1);
11
}
12
13
static void usage(void)
14
{
15
die("relocs [--abs-syms|--abs-relocs|--reloc-info|--text|--realmode]" \
16
" vmlinux\n");
17
}
18
19
int main(int argc, char **argv)
20
{
21
int show_absolute_syms, show_absolute_relocs, show_reloc_info;
22
int as_text, use_real_mode;
23
const char *fname;
24
FILE *fp;
25
int i;
26
unsigned char e_ident[EI_NIDENT];
27
28
show_absolute_syms = 0;
29
show_absolute_relocs = 0;
30
show_reloc_info = 0;
31
as_text = 0;
32
use_real_mode = 0;
33
fname = NULL;
34
for (i = 1; i < argc; i++) {
35
char *arg = argv[i];
36
if (*arg == '-') {
37
if (strcmp(arg, "--abs-syms") == 0) {
38
show_absolute_syms = 1;
39
continue;
40
}
41
if (strcmp(arg, "--abs-relocs") == 0) {
42
show_absolute_relocs = 1;
43
continue;
44
}
45
if (strcmp(arg, "--reloc-info") == 0) {
46
show_reloc_info = 1;
47
continue;
48
}
49
if (strcmp(arg, "--text") == 0) {
50
as_text = 1;
51
continue;
52
}
53
if (strcmp(arg, "--realmode") == 0) {
54
use_real_mode = 1;
55
continue;
56
}
57
}
58
else if (!fname) {
59
fname = arg;
60
continue;
61
}
62
usage();
63
}
64
if (!fname) {
65
usage();
66
}
67
fp = fopen(fname, "r");
68
if (!fp) {
69
die("Cannot open %s: %s\n", fname, strerror(errno));
70
}
71
if (fread(&e_ident, 1, EI_NIDENT, fp) != EI_NIDENT) {
72
die("Cannot read %s: %s", fname, strerror(errno));
73
}
74
rewind(fp);
75
if (e_ident[EI_CLASS] == ELFCLASS64)
76
process_64(fp, use_real_mode, as_text,
77
show_absolute_syms, show_absolute_relocs,
78
show_reloc_info);
79
else
80
process_32(fp, use_real_mode, as_text,
81
show_absolute_syms, show_absolute_relocs,
82
show_reloc_info);
83
fclose(fp);
84
return 0;
85
}
86
87