Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 Mar 2021 15:02:27 -0700
From:      Mark Millard <marklmi@yahoo.com>
To:        Robert Clausecker <fuz@fuz.su>
Cc:        freebsd-arm@freebsd.org
Subject:   Re: 32-bit executables on aarch64?
Message-ID:  <BDE56DE3-976D-4564-8ABD-D4D218C670F7@yahoo.com>
In-Reply-To: <YGTlpD7ph2fPlaM6@fuz.su>
References:  <202103311655.12VGtx3T036893@office.dignus.com> <YGS1exSvCS7sFGn%2B@fuz.su> <E1269F39-41F2-40F7-B8F5-2E39349B9C3F@yahoo.com> <YGTlpD7ph2fPlaM6@fuz.su>

next in thread | previous in thread | raw e-mail | index | archive | help


On 2021-Mar-31, at 14:12, Robert Clausecker <fuz at fuz.su> wrote:

> Hi Mark,
> 
> This is news to me.  Excellent news!  I can't say how grateful I am
> for having this pointed out by you.  Can now go ahead and throw out
> my dedicated armv7 test machine which has caused me a lot of
> head aches with world builds and all that.
> 
> 

Somewhat depends on the type/intent of the testing activity.
If testing the armv7 kernel is part of the point, then
building might be done on the likely faster (and more RAM
across processes) aarch64 environment in the chroot and
some testing there as well. But for armv7 kernel testing,
it would take use in an environment that was running actual
armv7 FreeBSD kernel and world.

If such is needed, you can still buildworld, buildkernel,
and build ports in a faster/more-RAM environment.

One way to have an armv7 chroot available in aarch64 is to
have the media that is used for the actual armv7 system
temporarily connected to the aarch64 system and mount the
file system and chroot into it to do the builds and
installs and such. (Might not be as easy if the armv7
system context is split into multiple mount points.)
Later exit the chroot, dismount, connect back up to the
armv7 system, and boot. (I'm not addressing special
handling of u-boot or an msdos file system's contents
or the like here.)

As for installkernel installworld, etcupdate, etc. if
instead a cross build was made outside a chroot, the
installs and such can target a mounted file system
(DESTDIR= and the like is involved). This also avoids
some of the technical issues that can be involved for
live updating the same system that is running.

Building armv7 ports on aarch64 would always involve a
chroot (possibly implicitly via poudriere's cross build
way of working for such).

It is rare that I build for armv7 on an armv7. It is also
rare that I build for aarch64 on slower aarch64 machines.
A similar point was always been true for my historical
powerpc64 and 32-bit powerpc activities.

> 
> Am Wed, Mar 31, 2021 at 11:05:45AM -0700 schrieb Mark Millard:
>> 
>> On 2021-Mar-31, at 10:46, Robert Clausecker <fuz at fuz.su> wrote:
>> 
>>> Hi Thomas,
>>> 
>>> Unfortunately, there is no support for running armv7 executables
>>> on arm64, though it would technically be possible to implement.
>>> I myself would really like to have this sort of thing but I lack
>>> the knowledge to have it.  Perhaps someone feels adventurous
>>> enough to look into implementing support for this sort of thing.
>> 
>> aarch64 FreeBSD supports having an armv7 world installed
>> in a directory tree for use with chroot.
>> 
>> I've a separate reply to the original submittal showing
>> a use of such.
>> 
>> aarch64 FreeBSD lacks lib32 for more direct execution
>> of armv7 FreeBSD code without involving a chroot use (or
>> qemu use or other such).
>> 
>>> For historical reasons, the i386 and amd64 ports of gcc and clang
>>> have a largely shared code base and are essentially the same port.
>>> So options -m32, -m64 can be used to switch between them.  The same
>>> is not possible for armv7 and arm64 which are distinct ports with
>>> little to no shared backend code.  Consider using -target armv7
>>> instead.
>>> 
>>> Yours,
>>> Robert Clausecker
>>> 
>>> Am Wed, Mar 31, 2021 at 12:55:59PM -0400 schrieb Thomas David Rivers:
>>>> 
>>>> I'm playing around with a (rather-old now) 13.0-pre-pre-pre release
>>>> on Raspberry PI 4B.
>>>> 
>>>> I was naively thinking I could just use -m32 to create a 32-bit
>>>> executable... but the LLVM there promptly told me it didn't recognize
>>>> -m32.
>>>> 
>>>> I installed the gcc V9 port and it said the same thing.
>>>> 
>>>> This begged the question, is there no support of 32-bit ARM (armv7)
>>>> executables in the aarch64 environment?
>>> 
> 

===
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?BDE56DE3-976D-4564-8ABD-D4D218C670F7>