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