Re: sys/modules/Makefile and MACHINE_ARCH vs arm64 (in use) vs aarch64 (not in use) VS. man arch; also COMPAT_FREEBSD32_ENABLED use

From: Mark Millard <marklmi_at_yahoo.com>
Date: Tue, 08 Aug 2023 15:12:49 UTC
On Aug 2, 2023, at 17:25, Mark Millard <marklmi@yahoo.com> wrote:

> On Aug 2, 2023, at 12:56, Mark Millard <marklmi@yahoo.com> wrote:
> 
>> On Aug 2, 2023, at 11:16, Warner Losh <imp@bsdimp.com> wrote:
>> 
>>> Those all look wrong to me.
>>> 
>>> Warner 
>>> 
>>> On Wed, Aug 2, 2023, 11:27 AM Mark Millard <marklmi@yahoo.com> wrote:
>>> man arch reports:
>>> 
>>>          MACHINE       MACHINE_CPUARCH       MACHINE_ARCH
>>>          arm64         aarch64               aarch64
>>> . . .
>>>          arm           arm                   armv6, armv7
>>> 
>>> So I'd not expect arm64 in MACHINE_ARCH . But
>>> sys/modules/Makefile has (from a grep for MACHINE_ARCH):
>>> 
>>> .if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "arm64"
>>> .if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "arm64" || ${MACHINE_ARCH:Mpowerpc64*}
>>> 
>>> 
>>> Another issue may be that COMPAT_FREEBSD32_ENABLED is only
>>> put to use in the Makefile for MACHINE_CPUARCH being i386
>>> or amd64 :
>>> 
>>> .if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
>>> _agp=           agp
>>> .if ${MACHINE_CPUARCH} == "i386" || !empty(COMPAT_FREEBSD32_ENABLED)
>>> . . .
>> 
>> 
>> I'll note that, for example, i386 vs. armv7 do not match
>> for some struct md_ioctl field offsets and the overall
>> size.
> 
> Turns out no member offsets were different but the size
> was: just differing tail padding in the structure. Still
> it means some conditional differences across i386 and
> armv7. (I've no clue if the 32-bit powerpc lib32/chroot
> handling is working on powerpc64 vs. not. So I make no
> claims relative to such.)

See:

https://lists.freebsd.org/archives/dev-commits-src-main/2023-August/017561.html
(git: 58a46cfd751a - main - md driver compat32: fix structure padding for arm, powerpc)

for Mike Karels' fix for main for that "turns out". It avoids one kind
of kyua run problem for armv7 on aarch64, since mdconfig is used for
some of the tests.

(The ${MACHINE_ARCH} == "arm64" and COMPAT_FREEBSD32_ENABLED use
are still as they were in sys/modules/Makefile . This note is not
about that issue.)

>> Mike Karels is looking at getting struct md_ioctl32
>> correctly matching each of of the contexts: i386, (32-bit)
>> powerpc, and armv7.
>> 
>> I do not know if there are other COMPAT_FREEBSD32 adjustments
>> needed for differences in memory layout across the 3 (i386,
>> powerpc, armv7). md_ioctl I learned about via kyua test runs
>> and looking at the background for some things it reported for
>> armv7.
>> 
>> I've not found a clear indication of what is expected to work
>> for chroot/lib32 vs. what is not expected to work. It seems
>> one must look in the code and see if one finds conditional
>> material based, in part, on COMPAT_FREEBSD32. It might also
>> be that COMPAT_FREEBSD32 for i386 vs. armv7 vs. powerpc
>> might not be intending identical coverage for all I know.
>> So seeing COMPAT_FREEBSD32 might not be enough to know the
>> intent.




===
Mark Millard
marklmi at yahoo.com