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}