Re: 32-bit executables on aarch64?
- In reply to: John F Carr : "Re: 32-bit executables on aarch64?"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 18 May 2023 18:52:56 UTC
On May 18, 2023, at 11:22, John F Carr <jfc@mit.edu> wrote: > I had to set up a jail to test 32 bit ARM on a 64 bit host. I just install a armv7 world in a directory tree and have a script that does a chroot into the directory tree after devfs and nullfs mounts (and also does the umount's). An example: # more ~/do-chroot-main-CA7.sh #! /bin/sh mkdir -p /usr/obj/DESTDIRs/main-CA7-chroot/dev/ \ && mount -tdevfs devfs /usr/obj/DESTDIRs/main-CA7-chroot/dev/ \ && mkdir -p /usr/obj/DESTDIRs/main-CA7-chroot/usr/local/poudriere/data/packages/main-CA7-default/ \ && mount_nullfs /usr/local/poudriere/data/packages/main-CA7-default \ /usr/obj/DESTDIRs/main-CA7-chroot/usr/local/poudriere/data/packages/main-CA7-default/ \ && mkdir -p /usr/obj/DESTDIRs/main-CA7-chroot/usr/ports/ \ && mount_nullfs /usr/ports /usr/obj/DESTDIRs/main-CA7-chroot/usr/ports/ \ && env IN_CHROOT="main-CA7-chroot" chroot /usr/obj/DESTDIRs/main-CA7-chroot/ umount /usr/obj/DESTDIRs/main-CA7-chroot/usr/ports/ umount /usr/obj/DESTDIRs/main-CA7-chroot/usr/local/poudriere/data/packages/main-CA7-default/ umount /usr/obj/DESTDIRs/main-CA7-chroot/dev/ ("IN_CHROOT" is something specific to what I set up.) Clearly I adjust some material in the armv7 world as well, such as causing it to use the path: /usr/local/poudriere/data/packages/main-CA7-default/ > If you get past the link error, expect the program to fail at startup. Yea, no system lib32 for enabling armv7 programs directly. (powerpc64 and powerpc is an example context where lib32 was put in place.) > $ 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 >> > === Mark Millard marklmi at yahoo.com