11da177e4SLinus Torvalds #include <stdio.h> 21da177e4SLinus Torvalds #include <stdlib.h> 31da177e4SLinus Torvalds #include <string.h> 41da177e4SLinus Torvalds #include <elf.h> 51da177e4SLinus Torvalds 61da177e4SLinus Torvalds int 71da177e4SLinus Torvalds main(int argc, char **argv) 81da177e4SLinus Torvalds { 91da177e4SLinus Torvalds unsigned char ei[EI_NIDENT]; 101da177e4SLinus Torvalds union { short s; char c[2]; } endian_test; 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds if (fread(ei, 1, EI_NIDENT, stdin) != EI_NIDENT) { 131da177e4SLinus Torvalds fprintf(stderr, "Error: input truncated\n"); 141da177e4SLinus Torvalds return 1; 151da177e4SLinus Torvalds } 161da177e4SLinus Torvalds if (memcmp(ei, ELFMAG, SELFMAG) != 0) { 171da177e4SLinus Torvalds fprintf(stderr, "Error: not ELF\n"); 181da177e4SLinus Torvalds return 1; 191da177e4SLinus Torvalds } 201da177e4SLinus Torvalds switch (ei[EI_CLASS]) { 211da177e4SLinus Torvalds case ELFCLASS32: 221da177e4SLinus Torvalds printf("#define KERNEL_ELFCLASS ELFCLASS32\n"); 231da177e4SLinus Torvalds break; 241da177e4SLinus Torvalds case ELFCLASS64: 251da177e4SLinus Torvalds printf("#define KERNEL_ELFCLASS ELFCLASS64\n"); 261da177e4SLinus Torvalds break; 271da177e4SLinus Torvalds default: 28*6803dc0eSSam Ravnborg exit(1); 291da177e4SLinus Torvalds } 301da177e4SLinus Torvalds switch (ei[EI_DATA]) { 311da177e4SLinus Torvalds case ELFDATA2LSB: 321da177e4SLinus Torvalds printf("#define KERNEL_ELFDATA ELFDATA2LSB\n"); 331da177e4SLinus Torvalds break; 341da177e4SLinus Torvalds case ELFDATA2MSB: 351da177e4SLinus Torvalds printf("#define KERNEL_ELFDATA ELFDATA2MSB\n"); 361da177e4SLinus Torvalds break; 371da177e4SLinus Torvalds default: 38*6803dc0eSSam Ravnborg exit(1); 391da177e4SLinus Torvalds } 401da177e4SLinus Torvalds 411da177e4SLinus Torvalds if (sizeof(unsigned long) == 4) { 421da177e4SLinus Torvalds printf("#define HOST_ELFCLASS ELFCLASS32\n"); 431da177e4SLinus Torvalds } else if (sizeof(unsigned long) == 8) { 441da177e4SLinus Torvalds printf("#define HOST_ELFCLASS ELFCLASS64\n"); 451da177e4SLinus Torvalds } 461da177e4SLinus Torvalds 471da177e4SLinus Torvalds endian_test.s = 0x0102; 481da177e4SLinus Torvalds if (memcmp(endian_test.c, "\x01\x02", 2) == 0) 491da177e4SLinus Torvalds printf("#define HOST_ELFDATA ELFDATA2MSB\n"); 501da177e4SLinus Torvalds else if (memcmp(endian_test.c, "\x02\x01", 2) == 0) 511da177e4SLinus Torvalds printf("#define HOST_ELFDATA ELFDATA2LSB\n"); 521da177e4SLinus Torvalds else 53*6803dc0eSSam Ravnborg exit(1); 541da177e4SLinus Torvalds 551da177e4SLinus Torvalds return 0; 561da177e4SLinus Torvalds } 57