mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.7 KiB
85 lines
1.7 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
#include "relocs.h" |
|
|
|
void die(char *fmt, ...) |
|
{ |
|
va_list ap; |
|
va_start(ap, fmt); |
|
vfprintf(stderr, fmt, ap); |
|
va_end(ap); |
|
exit(1); |
|
} |
|
|
|
static void usage(void) |
|
{ |
|
die("relocs [--abs-syms|--abs-relocs|--reloc-info|--text|--realmode]" \ |
|
" vmlinux\n"); |
|
} |
|
|
|
int main(int argc, char **argv) |
|
{ |
|
int show_absolute_syms, show_absolute_relocs, show_reloc_info; |
|
int as_text, use_real_mode; |
|
const char *fname; |
|
FILE *fp; |
|
int i; |
|
unsigned char e_ident[EI_NIDENT]; |
|
|
|
show_absolute_syms = 0; |
|
show_absolute_relocs = 0; |
|
show_reloc_info = 0; |
|
as_text = 0; |
|
use_real_mode = 0; |
|
fname = NULL; |
|
for (i = 1; i < argc; i++) { |
|
char *arg = argv[i]; |
|
if (*arg == '-') { |
|
if (strcmp(arg, "--abs-syms") == 0) { |
|
show_absolute_syms = 1; |
|
continue; |
|
} |
|
if (strcmp(arg, "--abs-relocs") == 0) { |
|
show_absolute_relocs = 1; |
|
continue; |
|
} |
|
if (strcmp(arg, "--reloc-info") == 0) { |
|
show_reloc_info = 1; |
|
continue; |
|
} |
|
if (strcmp(arg, "--text") == 0) { |
|
as_text = 1; |
|
continue; |
|
} |
|
if (strcmp(arg, "--realmode") == 0) { |
|
use_real_mode = 1; |
|
continue; |
|
} |
|
} |
|
else if (!fname) { |
|
fname = arg; |
|
continue; |
|
} |
|
usage(); |
|
} |
|
if (!fname) { |
|
usage(); |
|
} |
|
fp = fopen(fname, "r"); |
|
if (!fp) { |
|
die("Cannot open %s: %s\n", fname, strerror(errno)); |
|
} |
|
if (fread(&e_ident, 1, EI_NIDENT, fp) != EI_NIDENT) { |
|
die("Cannot read %s: %s", fname, strerror(errno)); |
|
} |
|
rewind(fp); |
|
if (e_ident[EI_CLASS] == ELFCLASS64) |
|
process_64(fp, use_real_mode, as_text, |
|
show_absolute_syms, show_absolute_relocs, |
|
show_reloc_info); |
|
else |
|
process_32(fp, use_real_mode, as_text, |
|
show_absolute_syms, show_absolute_relocs, |
|
show_reloc_info); |
|
fclose(fp); |
|
return 0; |
|
}
|
|
|