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