Skip site navigation (1)Skip section navigation (2)
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>