]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/elftoolchain/common/native-elf-format
MFC r368649 / 3fd989da by kib: amd64 pmap: fix PCID mode invalidations
[FreeBSD/FreeBSD.git] / contrib / elftoolchain / common / native-elf-format
1 #!/bin/sh
2 #
3 # $Id: native-elf-format 3735 2019-04-25 19:44:47Z jkoshy $
4 #
5 # Find the native ELF format for a host platform by compiling a
6 # test object and examining the resulting object.
7 #
8 # This script is used if there is no easy way to determine this
9 # information statically at compile time.
10
11 program=`basename $0`
12 tmp_c=`mktemp -u nefXXXXXX`.c
13 tmp_o=`echo ${tmp_c} | sed -e 's/.c$/.o/'`
14
15 trap "rm -f ${tmp_c} ${tmp_o}"  0 1 2 3 15
16
17 touch ${tmp_c}
18
19 echo "/* Generated by ${program} on `date` */"
20
21 cc -c ${tmp_c} -o ${tmp_o}
22 LC_ALL=C readelf -h ${tmp_o} | awk '
23 $1 ~ "Class:" {
24         sub("ELF","",$2); elfclass = $2;
25     }
26 $1 ~ "Data:"  {
27         if (match($0, "little")) {
28             elfdata = "LSB";
29         } else {
30             elfdata = "MSB";
31         }
32     }
33 $1 ~ "Machine:" {
34         if (match($0, "Intel.*386")) {
35             elfarch = "EM_386";
36         } else if (match($0, "MIPS")) {
37             elfarch = "EM_MIPS";
38         } else if (match($0, ".*[xX]86[-_]64")) {
39             elfarch = "EM_X86_64";
40         } else if (match($0, "PowerPC64")) {
41             elfarch = "EM_PPC64";
42         } else {
43             elfarch = "unknown";
44         }
45     }
46 END {
47     printf("#define     ELFTC_CLASS     ELFCLASS%s\n", elfclass);
48     printf("#define     ELFTC_ARCH      %s\n", elfarch);
49     printf("#define     ELFTC_BYTEORDER ELFDATA2%s\n", elfdata);
50 }'
51