Running armv7 on aarch64

Kristof Provost <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
Hi,

I’ve recently discovered that I can no longer run an armv7 binary on 
my aarch64 FreeBSD machine.

	$ /usr/local/poudriere/jails/pfSense_plus-devel-main_armv7/usr/bin/id
	ELF binary type "9" not known.
	/bin/sh: 
/usr/local/poudriere/jails/pfSense_plus-devel-main_armv7/usr/bin/id: 
Exec format error
	$ file 
/usr/local/poudriere/jails/pfSense_plus-devel-main_armv7/usr/bin/id
	/usr/local/poudriere/jails/pfSense_plus-devel-main_armv7/usr/bin/id: 
ELF 32-bit LSB executable, ARM, EABI5 version 1 (FreeBSD), dynamically 
linked, interpreter /libexec/ld-elf.so.1, FreeBSD-style, for FreeBSD 
14.0 (1400066), stripped
	$ readelf -e 
/usr/local/poudriere/jails/pfSense_plus-devel-main_armv7/usr/bin/id

	File: 
/usr/local/poudriere/jails/pfSense_plus-devel-main_armv7/usr/bin/id
	ELF Header:
	  Magic:   7f 45 4c 46 01 01 01 09 00 00 00 00 00 00 00 00
	  Class:                             ELF32
	  Data:                              2's complement, little endian
	  Version:                           1 (current)
	  OS/ABI:                            FreeBSD
	  ABI Version:                       0
	  Type:                              EXEC (Executable file)
	  Machine:                           ARM
	  Version:                           0x1
	  Entry point address:               0x20ef0
	  Start of program headers:          52 (bytes into file)
	  Start of section headers:          8912 (bytes into file)
	  Flags:                             0x5000400, Version5 EABI, VFP
	  Size of this header:               52 (bytes)
	  Size of program headers:           32 (bytes)
	  Number of program headers:         11
	  Size of section headers:           40 (bytes)
	  Number of section headers:         28
	  Section header string table index: 27

	Elf file type is EXEC (Executable file)
	Entry point 0x20ef0
	There are 11 program headers, starting at offset 52

	Program Headers:
	  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg 
Align
	  PHDR           0x000034 0x00010034 0x00010034 0x00160 0x00160 R   0x4
	  INTERP         0x000194 0x00010194 0x00010194 0x00015 0x00015 R   0x1
	      [Requesting program interpreter: /libexec/ld-elf.so.1]
	  LOAD           0x000000 0x00010000 0x00010000 0x00ccc 0x00ccc R   
0x10000
	  LOAD           0x000ccc 0x00020ccc 0x00020ccc 0x01294 0x01294 R E 
0x10000
	  LOAD           0x001f60 0x00031f60 0x00031f60 0x000c8 0x000c8 RW  
0x10000
	  LOAD           0x002028 0x00042028 0x00042028 0x000a0 0x00138 RW  
0x10000
	  DYNAMIC        0x001f68 0x00031f68 0x00031f68 0x000c0 0x000c0 RW  0x4
	  GNU_RELRO      0x001f60 0x00031f60 0x00031f60 0x000c8 0x000c8 R   0x1
	  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0
	  NOTE           0x0001ac 0x000101ac 0x000101ac 0x00064 0x00064 R   0x4
	  ARM_EXIDX      0x00090c 0x0001090c 0x0001090c 0x00068 0x00068 R   0x4

	 Section to Segment mapping:
	  Segment Sections...
	   00
	   01     .interp
	   02     .interp .note.tag .dynsym .gnu.version .gnu.version_r 
.gnu.hash .hash .dynstr .rel.dyn .ARM.exidx .rel.plt .rodata .ARM.extab
	   03     .text .init .fini .plt
	   04     .jcr .init_array .dynamic
	   05     .data .got.plt .bss
	   06     .dynamic
	   07     .jcr .init_array .dynamic
	   08
	   09     .note.tag
	   10     .ARM.exidx
	There are 28 section headers, starting at offset 0x22d0:

	Section Headers:
	  [Nr] Name              Type            Addr     Off    Size   ES Flg 
Lk Inf Al
	  [ 0]                   NULL            00000000 000000 000000 00      
0   0  0
	  [ 1] .interp           PROGBITS        00010194 000194 000015 00   A  
0   0  1
	  [ 2] .note.tag         NOTE            000101ac 0001ac 000064 00   A  
0   0  4
	  [ 3] .dynsym           DYNSYM          00010210 000210 0002c0 10   A  
8   1  4
	  [ 4] .gnu.version      SUNW_versym     000104d0 0004d0 000058 02   A  
3   0  2
	  [ 5] .gnu.version_r    SUNW_verneed    00010528 000528 000050 00   A  
8   2  4
	  [ 6] .gnu.hash         GNU_HASH        00010578 000578 000030 00   A  
3   0  4
	  [ 7] .hash             HASH            000105a8 0005a8 000168 04   A  
3   0  4
	  [ 8] .dynstr           STRTAB          00010710 000710 0001e3 00   A  
0   0  1
	  [ 9] .rel.dyn          REL             000108f4 0008f4 000018 08  AI  
3   0  4
	  [10] .ARM.exidx        ARM_EXIDX       0001090c 00090c 000068 00   A 
14   0  4
	  [11] .rel.plt          REL             00010974 000974 000120 08  AI  
3  22  4
	  [12] .rodata           PROGBITS        00010a94 000a94 00021f 01 AMS  
0   0  1
	  [13] .ARM.extab        PROGBITS        00010cb4 000cb4 000018 00   A  
0   0  4
	  [14] .text             PROGBITS        00020ccc 000ccc 000ff0 00  AX  
0   0  4
	  [15] .init             PROGBITS        00021cc0 001cc0 000014 00  AX  
0   0 16
	  [16] .fini             PROGBITS        00021ce0 001ce0 000014 00  AX  
0   0 16
	  [17] .plt              PROGBITS        00021d00 001d00 000260 00  AX  
0   0 16
	  [18] .jcr              PROGBITS        00031f60 001f60 000004 00  WA  
0   0  4
	  [19] .init_array       INIT_ARRAY      00031f64 001f64 000004 00  WA  
0   0  4
	  [20] .dynamic          DYNAMIC         00031f68 001f68 0000c0 08  WA  
8   0  4
	  [21] .data             PROGBITS        00042028 002028 000004 00  WA  
0   0  4
	  [22] .got.plt          PROGBITS        0004202c 00202c 00009c 00  WA  
0   0  4
	  [23] .bss              NOBITS          00042100 0020c8 000060 00  WA  
0   0 64
	  [24] .comment          PROGBITS        00000000 0020c8 0000b6 01  MS  
0   0  1
	  [25] .ARM.attributes   ARM_ATTRIBUTES  00000000 00217e 000049 00      
0   0  1
	  [26] .gnu_debuglink    PROGBITS        00000000 0021c7 000010 00      
0   0  1
	  [27] .shstrtab         STRTAB          00000000 0021d7 0000f7 00      
0   0  1
	Key to Flags:
	  W (write), A (alloc), X (execute), M (merge), S (strings)
	  I (info), L (link order), G (group), x (unknown)
	  O (extra OS processing required) o (OS specific), p (processor 
specific)

It’s not quite clear to me how this is supposed to work (now). On 
amd64 there’s a separate /libexec/ld-elf32.so.1, which we don’t have 
on aarch64. Is it supposed to be built?

It’s broken on ab9293239c7d and e03b7883e97c at the very least.

—
Kristof
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.