xref: /utopia/UTPA2-700.0.x/projects/build/scripts/mod/mk_elfconfig.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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