Date: Wed, 31 Mar 2021 13:10:58 -0700 From: Mark Millard <marklmi@yahoo.com> To: Thomas David Rivers <rivers@dignus.com> Cc: freebsd-arm@freebsd.org Subject: Re: 32-bit executables on aarch64? Message-ID: <AD417A66-8276-4E11-8B79-782357E73FEA@yahoo.com> In-Reply-To: <DCB25333-0B09-4610-9BCB-DB6C83B6F203@yahoo.com> References: <202103311826.12VIQwxD038077@office.dignus.com> <DCB25333-0B09-4610-9BCB-DB6C83B6F203@yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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: >=20 >> marklmi@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 >>>=20 >>> armv7# uname -apKU >>> FreeBSD RPi4B 14.0-CURRENT FreeBSD 14.0-CURRENT = mm-src-n245445-def0058cc690 GENERIC-NODBG arm armv7 1400005 1400005 >>>=20 >>> (I did both buildworld builds from the same source.) >>>=20 >>> 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.) >>>=20 >>> =3D=3D=3D >>> Mark Millard >>=20 >> Ah! >>=20 >> So, the kernel _can_ run a 32-bit executable... >=20 > 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. >=20 > 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. >=20 > powerpc64 allows building without lib32 and > without it the handling is like for aarch64 > and armv7. >=20 >> but we just can't >> build one on an aarch64 machine... >=20 > 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. >=20 >> 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=20 >> a 64-bit kernel.. perhaps with -static to avoid any runtime problems? >=20 > 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 =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AD417A66-8276-4E11-8B79-782357E73FEA>