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

mk_elfconfig.c (1269B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <stdio.h>
      3#include <stdlib.h>
      4#include <string.h>
      5#include <elf.h>
      6
      7int
      8main(int argc, char **argv)
      9{
     10	unsigned char ei[EI_NIDENT];
     11	union { short s; char c[2]; } endian_test;
     12
     13	if (fread(ei, 1, EI_NIDENT, stdin) != EI_NIDENT) {
     14		fprintf(stderr, "Error: input truncated\n");
     15		return 1;
     16	}
     17	if (memcmp(ei, ELFMAG, SELFMAG) != 0) {
     18		fprintf(stderr, "Error: not ELF\n");
     19		return 1;
     20	}
     21	switch (ei[EI_CLASS]) {
     22	case ELFCLASS32:
     23		printf("#define KERNEL_ELFCLASS ELFCLASS32\n");
     24		break;
     25	case ELFCLASS64:
     26		printf("#define KERNEL_ELFCLASS ELFCLASS64\n");
     27		break;
     28	default:
     29		exit(1);
     30	}
     31	switch (ei[EI_DATA]) {
     32	case ELFDATA2LSB:
     33		printf("#define KERNEL_ELFDATA ELFDATA2LSB\n");
     34		break;
     35	case ELFDATA2MSB:
     36		printf("#define KERNEL_ELFDATA ELFDATA2MSB\n");
     37		break;
     38	default:
     39		exit(1);
     40	}
     41
     42	if (sizeof(unsigned long) == 4) {
     43		printf("#define HOST_ELFCLASS ELFCLASS32\n");
     44	} else if (sizeof(unsigned long) == 8) {
     45		printf("#define HOST_ELFCLASS ELFCLASS64\n");
     46	}
     47
     48	endian_test.s = 0x0102;
     49	if (memcmp(endian_test.c, "\x01\x02", 2) == 0)
     50		printf("#define HOST_ELFDATA ELFDATA2MSB\n");
     51	else if (memcmp(endian_test.c, "\x02\x01", 2) == 0)
     52		printf("#define HOST_ELFDATA ELFDATA2LSB\n");
     53	else
     54		exit(1);
     55
     56	return 0;
     57}