Re: Deprecation of i386 and 32-bit powerpc for 15.0 [ an aarch64/armv7 context note for -m32 ]

From: Mark Millard <marklmi_at_yahoo.com>
Date: Sun, 22 Jun 2025 07:24:46 UTC
[Reporting: 14.3-RELEASE gets some different behavior.]

On Jun 21, 2025, at 23:35, Mark Millard <marklmi@yahoo.com> wrote:

> Konstantin Belousov <kostikbel_at_gmail.com> wrote on
> Date: Sun, 22 Jun 2025 02:55:15 UTC :
> 
>> On Sat, Jun 21, 2025 at 06:39:03PM -0700, Rodney W. Grimes wrote:
>>> . . .
>> 
>> The i386 world on amd64 kernel is the supported configuration, and I
>> will put the efforts to keep this going. Simultaneously, there is not
>> much value in the full world for i386, lib32 + cc -m32 is the most
>> interesting thing for me and perhaps, practically, for all other people
>> who really use 32bit (as opposed to use it for flaming on ml).
>> 
>> . . .
> 
> In this area, but for aarch64/armv7 instead of amd64/i386:
> 
> # cc -v -m32 basic_double_use.c
> 
> in an aarch64 context reports using:
> 
> "/usr/bin/cc" -cc1 -triple armv4t-unknown-freebsd15.0
> 
> So: not armv7 and no -gnueabihf
> 
> The context has:
> 
> # cc -v
> FreeBSD clang version 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2)
> Target: aarch64-unknown-freebsd15.0
> Thread model: posix
> InstalledDir: /usr/bin
> Build config: +assertions
> 
> By contrast, in an armv7 context:
> 
> # cc -v
> FreeBSD clang version 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2)
> Target: armv7-unknown-freebsd15.0-gnueabihf
> Thread model: posix
> InstalledDir: /usr/bin
> Build config: +assertions
> 
> But . . .
> 
> # cc -v -m32 basic_double_use.c
> 
> reports using:
> 
> "/usr/bin/cc" -cc1 -triple armv7-unknown-freebsd15.0-gnueabihf . . .
> 
> as expected: armv7 and -gnueabihf in use. 
> 
> Thus on aarch64, one needs to be explicit about -target ,
> unlike on armv7:
> 
> # cc -v -m32 -target armv7-unknown-freebsd15.0-gnueabihf basic_double_use.c
> 
> reports using:
> 
> "/usr/bin/cc" -cc1 -triple armv7-unknown-freebsd15.0-gnueabihf
> 
> In summary: -m32 ends up with the wrong default -target
> for the modern aarch64 FreeBSD type of context.
> 
> 
> For reference:
> 
> # cat basic_double_use.c
> int main(void)
> {
>    volatile double a=10;
>    volatile double b=13;
>    return (a*b<b/a) ? 0 : 1;
> }
> 
> 
> I've updated https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=272806
> with a version of these notes, as they should be clearer than my
> original submittal for the issue.
> 

Note: 14.3-RELEASE has the following properties for the
undefined symbol issue . . .

# cc -v -m32 -target armv7-unknown-freebsd15.0-gnueabihf basic_double_use.c
. . .

does not report such problems. But . . .

# cc -v -m32 basic_double_use.c
. . .
"/usr/bin/cc" -cc1 -triple armv4t-unknown-freebsd14.3 . . .
. . .
"/usr/bin/ld" --eh-frame-hdr -dynamic-linker /libexec/ld-elf.so.1 --hash-style=both --enable-new-dtags -o a.out /usr/lib32/crt1.o /usr/lib32/crti.o /usr/lib32/crtbegin.o -L/usr/lib32 /tmp/basic_double_use-76fb64.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib32/crtend.o /usr/lib32/crtn.o
ld: error: undefined symbol: __muldf3
 >>> referenced by basic_double_use.c
 >>> /tmp/basic_double_use-76fb64.o:(main)
 >>> did you mean: __muldc3
 >>> defined in: /usr/lib32/libgcc_s.so

ld: error: undefined symbol: __divdf3
 >>> referenced by basic_double_use.c
 >>> /tmp/basic_double_use-76fb64.o:(main)
 >>> did you mean: __divdc3
 >>> defined in: /usr/lib32/libgcc_s.so

ld: error: undefined symbol: __ltdf2
 >>> referenced by basic_double_use.c
 >>> /tmp/basic_double_use-76fb64.o:(main)
cc: error: linker command failed with exit code 1 (use -v to see invocation)

So the undefined symbols are tied to the armv4t and/or
lack of -gnueabihf from the bad default target in a
14.3-RELEASE context.


===
Mark Millard
marklmi at yahoo.com