| #!/bin/sh |
| # |
| # $Id: native-elf-format 3293 2016-01-07 19:26:27Z emaste $ |
| # |
| # Find the native ELF format for a host platform by compiling a |
| # test object and examining the resulting object. |
| # |
| # This script is used if there is no easy way to determine this |
| # information statically at compile time. |
| |
| program=`basename $0` |
| tmp_c=`mktemp -u nefXXXXXX`.c |
| tmp_o=`echo ${tmp_c} | sed -e 's/.c$/.o/'` |
| |
| trap "rm -f ${tmp_c} ${tmp_o}" 0 1 2 3 15 |
| |
| touch ${tmp_c} |
| |
| echo "/* Generated by ${program} on `date` */" |
| |
| cc -c ${tmp_c} -o ${tmp_o} |
| LC_ALL=C readelf -h ${tmp_o} | awk ' |
| $1 ~ "Class:" { |
| sub("ELF","",$2); elfclass = $2; |
| } |
| $1 ~ "Data:" { |
| if (match($0, "little")) { |
| elfdata = "LSB"; |
| } else { |
| elfdata = "MSB"; |
| } |
| } |
| $1 ~ "Machine:" { |
| if (match($0, "Intel.*386")) { |
| elfarch = "EM_386"; |
| } else if (match($0, "MIPS")) { |
| elfarch = "EM_MIPS"; |
| } else if (match($0, ".*[xX]86-64")) { |
| elfarch = "EM_X86_64"; |
| } else if (match($0, "RISC-V")) { |
| elfarch = "EM_RISCV"; |
| } else if (match($0, "AArch64")) { |
| elfarch = "EM_AARCH64"; |
| } else if (match($0, "ARM")) { |
| elfarch = "EM_ARM"; |
| } else { |
| elfarch = "unknown"; |
| } |
| } |
| END { |
| printf("#define ELFTC_CLASS ELFCLASS%s\n", elfclass); |
| printf("#define ELFTC_ARCH %s\n", elfarch); |
| printf("#define ELFTC_BYTEORDER ELFDATA2%s\n", elfdata); |
| }' |
| |