19 #include <sys/types.h>
35 static int mmap_failed;
36 static void *ehdr_curr;
52 munmap(ehdr_curr,
sb.st_size);
77 static void *mmap_file(
char const *
fname)
87 fprintf(stderr,
"not a regular file: %s\n", fname);
92 if (addr == MAP_FAILED) {
94 fprintf(stderr,
"Could not mmap file: %s\n", fname);
110 return get_unaligned_be16(x);
122 return get_unaligned_le16(x);
135 put_unaligned_be16(val, x);
147 put_unaligned_le16(val, x);
161 #define SORTEXTABLE_64
164 static int compare_relative_table(
const void *
a,
const void *
b)
176 static void sort_relative_table(
char *extab_image,
int image_size)
185 while (i < image_size) {
191 qsort(extab_image, image_size / 8, 8, compare_relative_table);
195 while (i < image_size) {
203 do_file(
char const *
const fname)
211 fprintf(stderr,
"unrecognized ELF data encoding %d: %s\n",
235 fprintf(stderr,
"unrecognized ET_EXEC file %s\n", fname);
242 fprintf(stderr,
"unrecognized e_machine %d %s\n",
249 custom_sort = sort_relative_table;
257 fprintf(stderr,
"unrecognized ELF class %d %s\n",
265 "unrecognized ET_EXEC file: %s\n", fname);
268 do32(ehdr, fname, custom_sort);
275 "unrecognized ET_EXEC file: %s\n", fname);
278 do64(ghdr, fname, custom_sort);
293 fprintf(stderr,
"usage: sortextable vmlinux...\n");
298 for (i = 1; i <
argc; i++) {
299 char *
file = argv[
i];
300 int const sjval =
setjmp(jmpenv);
304 fprintf(stderr,
"internal error: %s\n", file);