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