Re: 32-bit executables on aarch64?

From: John F Carr <jfc_at_mit.edu>
Date: Thu, 18 May 2023 18:22:08 UTC
I had to set up a jail to test 32 bit ARM on a 64 bit host.  If you get past the link error, expect the program to fail at startup.

$ file /bin/ls /usr/jail/armv7/bin/ls
/bin/ls:                ELF 64-bit LSB pie executable, ARM aarch64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 13.2 (1302505), FreeBSD-style, stripped
/usr/jail/armv7/bin/ls: ELF 32-bit LSB executable, ARM, EABI5 version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, FreeBSD-style, for FreeBSD 13.2 (1302500), stripped
$ /usr/jail/armv7/bin/ls
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap

"Not found" means "is not a 32 bit executable."  Because both 32 and 64 bit progams use the same intepreter pathname they can't both work.


> On May 18, 2023, at 14:16, Thomas David Rivers <rivers@dignus.com> wrote:
> 
> 
> Tried the following with a small "hello world" program on 
>   FreeBSD freebsd 13.2-RELEASE FreeBSD 13.2-RELEASE releng/13.2-n254617-525ecfdad597 GENERIC arm64
> 
> # cc -m32 hello.c
> 
> To get these errors:
> 
>  ld: error: /tmp/hello-1eb3b8.o is incompatible with /usr/lib/crt1.o
>  cc: error: linker command failed with exit code 1 (use -v to see invocation)
> 
> Is building a 32-bit program not supported on 13.2 arm64?
> 
>  man cc
> 
> gave me the CLANG doc... which didn't even mention "m32"; so perhaps
> I just need a different set of options?   I tried -arch arm but I still
> got 64-bit code.  Also, I tried several other -arch options and didn't
> see a difference, even with -arch x86, I still got Aarch64 code.
> 
> - Many thanks! -
> - Dave Rivers -
> 
> --
> rivers@dignus.com                        Work: (919) 676-0847
> Get your mainframe programming tools at http://www.dignus.com
>