162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci#include <stdio.h> 362306a36Sopenharmony_ci#include <stdlib.h> 462306a36Sopenharmony_ci#include <string.h> 562306a36Sopenharmony_ci#include <elf.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciint 862306a36Sopenharmony_cimain(int argc, char **argv) 962306a36Sopenharmony_ci{ 1062306a36Sopenharmony_ci unsigned char ei[EI_NIDENT]; 1162306a36Sopenharmony_ci union { short s; char c[2]; } endian_test; 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci if (fread(ei, 1, EI_NIDENT, stdin) != EI_NIDENT) { 1462306a36Sopenharmony_ci fprintf(stderr, "Error: input truncated\n"); 1562306a36Sopenharmony_ci return 1; 1662306a36Sopenharmony_ci } 1762306a36Sopenharmony_ci if (memcmp(ei, ELFMAG, SELFMAG) != 0) { 1862306a36Sopenharmony_ci fprintf(stderr, "Error: not ELF\n"); 1962306a36Sopenharmony_ci return 1; 2062306a36Sopenharmony_ci } 2162306a36Sopenharmony_ci switch (ei[EI_CLASS]) { 2262306a36Sopenharmony_ci case ELFCLASS32: 2362306a36Sopenharmony_ci printf("#define KERNEL_ELFCLASS ELFCLASS32\n"); 2462306a36Sopenharmony_ci break; 2562306a36Sopenharmony_ci case ELFCLASS64: 2662306a36Sopenharmony_ci printf("#define KERNEL_ELFCLASS ELFCLASS64\n"); 2762306a36Sopenharmony_ci break; 2862306a36Sopenharmony_ci default: 2962306a36Sopenharmony_ci exit(1); 3062306a36Sopenharmony_ci } 3162306a36Sopenharmony_ci switch (ei[EI_DATA]) { 3262306a36Sopenharmony_ci case ELFDATA2LSB: 3362306a36Sopenharmony_ci printf("#define KERNEL_ELFDATA ELFDATA2LSB\n"); 3462306a36Sopenharmony_ci break; 3562306a36Sopenharmony_ci case ELFDATA2MSB: 3662306a36Sopenharmony_ci printf("#define KERNEL_ELFDATA ELFDATA2MSB\n"); 3762306a36Sopenharmony_ci break; 3862306a36Sopenharmony_ci default: 3962306a36Sopenharmony_ci exit(1); 4062306a36Sopenharmony_ci } 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci if (sizeof(unsigned long) == 4) { 4362306a36Sopenharmony_ci printf("#define HOST_ELFCLASS ELFCLASS32\n"); 4462306a36Sopenharmony_ci } else if (sizeof(unsigned long) == 8) { 4562306a36Sopenharmony_ci printf("#define HOST_ELFCLASS ELFCLASS64\n"); 4662306a36Sopenharmony_ci } 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci endian_test.s = 0x0102; 4962306a36Sopenharmony_ci if (memcmp(endian_test.c, "\x01\x02", 2) == 0) 5062306a36Sopenharmony_ci printf("#define HOST_ELFDATA ELFDATA2MSB\n"); 5162306a36Sopenharmony_ci else if (memcmp(endian_test.c, "\x02\x01", 2) == 0) 5262306a36Sopenharmony_ci printf("#define HOST_ELFDATA ELFDATA2LSB\n"); 5362306a36Sopenharmony_ci else 5462306a36Sopenharmony_ci exit(1); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci return 0; 5762306a36Sopenharmony_ci} 58