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