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
main(int argc,char ** argv)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