32-bit executables on aarch64?
Mark Millard
marklmi at yahoo.com
Wed Mar 31 20:11:06 UTC 2021
On 2021-Mar-31, at 12:39, Mark Millard <marklmi at yahoo.com> wrote:
> On 2021-Mar-31, at 11:26, Thomas David Rivers <rivers at dignus.com> wrote:
>
>> marklmi at yahoo.com wrote:
>>> armv7# file `which uname`
>>> /usr/bin/uname: ELF 32-bit LSB executable, ARM, EABI5 version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, FreeBSD-style, for FreeBSD 14.0 (1400005), not stripped
>>>
>>> armv7# uname -apKU
>>> FreeBSD RPi4B 14.0-CURRENT FreeBSD 14.0-CURRENT mm-src-n245445-def0058cc690 GENERIC-NODBG arm armv7 1400005 1400005
>>>
>>> (I did both buildworld builds from the same source.)
>>>
>>> There is no lib32 implementation for aarch64.
>>> So, direct execution of code for armv7 FreeBSD
>>> without being in such a chroot is not available.
>>> (I ignore qemu and the like here.)
>>>
>>> ===
>>> Mark Millard
>>
>> Ah!
>>
>> So, the kernel _can_ run a 32-bit executable...
>
> Only in a chroot to an armv7 world, not directly.
> You can use the chroot's system compiler/toolchain
> to build armv7 materials for use in the chroot.
>
> powerpc64 FreeBSD on on PowerMacs has a lib32 in
> the powerpc64 world and so allows 32-bit powerpc
> FreeBSD coded to be used either with or without
> a choot being in use to do so. amd64 and i386 are
> similar. More than the kernel is involved in
> avoiding the need for a chroot to be in use.
>
> powerpc64 allows building without lib32 and
> without it the handling is like for aarch64
> and armv7.
>
>> but we just can't
>> build one on an aarch64 machine...
>
> Without a lib32 in the aarch64 world, the armv7
> FreeBSD code use has to be from inside an
> appropriate chroot as far as I know.
>
>> I wonder if I can "cross-build" an LLVM/dcc for armv7 and just
>> cross-compile to get a 32-bit executable that executes on
>> a 64-bit kernel.. perhaps with -static to avoid any runtime problems?
>
> armv7 FreeBSD code use: only in an appropriate
> chroot unless the lib32 has been implmented
> (as is installed).
Some powerpc64 vs. aarch64 comparisons/contrasts:
powerpc64 (built with lib32):
# ls -ldt /libexec/*ld*
-r-xr-xr-x 1 root wheel 143412 Mar 3 19:12 /libexec/ld-elf32.so.1
-r-xr-xr-x 1 root wheel 151528 Mar 3 19:12 /libexec/ld-elf.so.1
The ld-elf32.so.1 is generated by the lib32 build during buildworld
(and later is installed).
# file /libexec/ld-elf*.so.1
/libexec/ld-elf.so.1: ELF 64-bit MSB shared object, 64-bit PowerPC or cisco 7500, OpenPOWER ELF V2 ABI, version 1 (FreeBSD), dynamically linked, for FreeBSD 14.0 (1400005), not stripped
/libexec/ld-elf32.so.1: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (FreeBSD), dynamically linked, for FreeBSD 14.0 (1400005), not stripped
aarch64 (no option to build lib32):
# ls -ldt /libexec/*ld*
-r-xr-xr-x 1 root wheel 136600 Mar 3 20:37 /libexec/ld-elf.so.1
# file /libexec/ld-elf*.so.1
/libexec/ld-elf.so.1: ELF 64-bit LSB shared object, ARM aarch64, version 1 (FreeBSD), dynamically linked, for FreeBSD 14.0 (1400005), not stripped
So aarch64 FreeBSD just does not have the supporting infrastructure
in place to run armv7 FreeBSD code directly.
But powerpc64 built with lib32 also has:
# ls -Tld /usr/lib32/* | more
-r--r--r-- 1 root wheel 7816 Mar 12 14:07:13 2021 /usr/lib32/Scrt1.o
-r--r--r-- 1 root wheel 7772 Mar 12 14:07:13 2021 /usr/lib32/crt1.o
-r--r--r-- 1 root wheel 3488 Mar 12 14:07:13 2021 /usr/lib32/crtbegin.o
-r--r--r-- 1 root wheel 3852 Mar 12 14:07:13 2021 /usr/lib32/crtbeginS.o
-r--r--r-- 1 root wheel 3488 Mar 12 14:07:13 2021 /usr/lib32/crtbeginT.o
-r--r--r-- 1 root wheel 2828 Mar 12 14:07:13 2021 /usr/lib32/crtend.o
-r--r--r-- 1 root wheel 2896 Mar 12 14:07:13 2021 /usr/lib32/crtendS.o
-r--r--r-- 1 root wheel 2184 Mar 12 14:07:13 2021 /usr/lib32/crti.o
-r--r--r-- 1 root wheel 1664 Mar 12 14:07:13 2021 /usr/lib32/crtn.o
-r--r--r-- 1 root wheel 8900 Mar 12 14:07:13 2021 /usr/lib32/crtsavres.o
drwxr-xr-x 2 root wheel 512 Mar 12 21:29:28 2021 /usr/lib32/dtrace
drwxr-xr-x 2 root wheel 512 Mar 12 21:29:28 2021 /usr/lib32/engines
-r--r--r-- 1 root wheel 8100 Mar 12 14:07:13 2021 /usr/lib32/gcrt1.o
drwxr-xr-x 2 root wheel 512 Mar 12 21:29:28 2021 /usr/lib32/geom
drwxr-xr-x 2 root wheel 1536 Mar 12 21:29:28 2021 /usr/lib32/i18n
-r--r--r-- 1 root wheel 56050 Mar 3 19:13:13 2021 /usr/lib32/lib80211.a
lrwxr-xr-x 1 root wheel 13 Mar 12 14:07:13 2021 /usr/lib32/lib80211.so -> lib80211.so.1
-r--r--r-- 1 root wheel 22604 Mar 12 14:07:13 2021 /usr/lib32/lib80211.so.1
-r--r--r-- 1 root wheel 57348 Mar 3 19:13:13 2021 /usr/lib32/lib80211_p.a
-r--r--r-- 1 root wheel 494894 Mar 3 19:13:12 2021 /usr/lib32/lib9p.a
lrwxr-xr-x 1 root wheel 10 Mar 12 14:07:13 2021 /usr/lib32/lib9p.so -> lib9p.so.1
-r--r--r-- 1 root wheel 119288 Mar 12 14:07:13 2021 /usr/lib32/lib9p.so.1
-r--r--r-- 1 root wheel 502702 Mar 3 19:13:12 2021 /usr/lib32/lib9p_p.a
-r--r--r-- 1 root wheel 28658 Mar 3 19:13:12 2021 /usr/lib32/libBlocksRuntime.a
lrwxr-xr-x 1 root wheel 21 Mar 12 14:07:13 2021 /usr/lib32/libBlocksRuntime.so -> libBlocksRuntime.so.0
-r--r--r-- 1 root wheel 12796 Mar 12 14:07:13 2021 /usr/lib32/libBlocksRuntime.so.0
-r--r--r-- 1 root wheel 30794 Mar 3 19:13:12 2021 /usr/lib32/libBlocksRuntime_p.a
-r--r--r-- 1 root wheel 217736 Mar 3 19:13:12 2021 /usr/lib32/libalias.a
lrwxr-xr-x 1 root wheel 13 Mar 12 14:07:13 2021 /usr/lib32/libalias.so -> libalias.so.7
. . .
lrwxr-xr-x 1 root wheel 15 Mar 12 14:07:13 2021 /usr/lib32/pam_rhosts.so -> pam_rhosts.so.6
-r--r--r-- 1 root wheel 5748 Mar 12 14:07:13 2021 /usr/lib32/pam_rhosts.so.6
lrwxr-xr-x 1 root wheel 15 Mar 12 14:07:13 2021 /usr/lib32/pam_rootok.so -> pam_rootok.so.6
-r--r--r-- 1 root wheel 5132 Mar 12 14:07:13 2021 /usr/lib32/pam_rootok.so.6
lrwxr-xr-x 1 root wheel 18 Mar 12 14:07:13 2021 /usr/lib32/pam_securetty.so -> pam_securetty.so.6
-r--r--r-- 1 root wheel 6228 Mar 12 14:07:13 2021 /usr/lib32/pam_securetty.so.6
lrwxr-xr-x 1 root wheel 13 Mar 12 14:07:13 2021 /usr/lib32/pam_self.so -> pam_self.so.6
-r--r--r-- 1 root wheel 5612 Mar 12 14:07:13 2021 /usr/lib32/pam_self.so.6
lrwxr-xr-x 1 root wheel 12 Mar 12 14:07:13 2021 /usr/lib32/pam_ssh.so -> pam_ssh.so.6
-r--r--r-- 1 root wheel 15504 Mar 12 14:07:13 2021 /usr/lib32/pam_ssh.so.6
lrwxr-xr-x 1 root wheel 16 Mar 12 14:07:13 2021 /usr/lib32/pam_tacplus.so -> pam_tacplus.so.6
-r--r--r-- 1 root wheel 11036 Mar 12 14:07:13 2021 /usr/lib32/pam_tacplus.so.6
lrwxr-xr-x 1 root wheel 13 Mar 12 14:07:13 2021 /usr/lib32/pam_unix.so -> pam_unix.so.6
-r--r--r-- 1 root wheel 16324 Mar 12 14:07:13 2021 /usr/lib32/pam_unix.so.6
lrwxr-xr-x 1 root wheel 16 Mar 12 14:07:13 2021 /usr/lib32/pam_zfs_key.so -> pam_zfs_key.so.6
-r--r--r-- 1 root wheel 20492 Mar 12 14:07:13 2021 /usr/lib32/pam_zfs_key.so.6
where aarch64 has:
# ls -Tld /usr/lib32/*
ls: /usr/lib32/*: No such file or directory
===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)
More information about the freebsd-arm
mailing list