cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

relocs_common.c (1731B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include "relocs.h"
      3
      4void 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
     13static void usage(void)
     14{
     15	die("relocs [--abs-syms|--abs-relocs|--reloc-info|--text|--realmode]" \
     16	    " vmlinux\n");
     17}
     18
     19int 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}