Hi Maciej, Alex, On 3/12/21 9:04 PM, Maciej W. Rozycki wrote: > On Fri, 12 Mar 2021, Philippe Mathieu-Daudé wrote: > >>> but your two options to >>> choose from are: >>> >>> 1. Build for the soft-float ABI (`-msoft-float') where any FP calculations >>> are compiled such as to be made by the CPU using integer arithmetic. >> >> With the Debian toolchain I get: >> >> /usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No >> such file or directory >> #include <bits/libc-header-start.h> >> ^~~~~~~~~~~~~~~~~~~~~~~~~~ > > You need to have a soft-float multilib available. You can use: > > $ gcc -print-multi-lib > > to see what multilibs are available. You'd have to have one that includes > `-msoft-float' and `-mabi=n32' both at a time. If there's no such one, > then you'll have to build your own cross-compiler (including soft-float > libc).
For Alex: I tried Maciej suggestion using: -- >8 -- diff --git a/tests/docker/dockerfiles/debian10.docker b/tests/docker/dockerfiles/debian10.docker index d034acbd256..42933538a49 100644 --- a/tests/docker/dockerfiles/debian10.docker +++ b/tests/docker/dockerfiles/debian10.docker @@ -23,6 +23,7 @@ RUN apt update && \ ccache \ clang \ dbus \ + gcc-multilib \ gdb-multiarch \ gettext \ git \ --- Then used qemu/debian-mipsel-cross. Maciej, I tried your suggestion as follow: $ mipsel-linux-gnu-gcc --version mipsel-linux-gnu-gcc (Debian 8.3.0-2) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ mipsel-linux-gnu-gcc -print-multi-lib .; n32;@mabi=n32 64;@mabi=64 soft-float is not listed, but: $ touch a.c $ mipsel-linux-gnu-gcc -mabi=n32 -march=r5900 -msoft-float -c a.c $ file a.o a.o: ELF 32-bit LSB relocatable, MIPS, N32 MIPS-III version 1 (SYSV), not stripped $ readelf -h a.o ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: REL (Relocatable file) Machine: MIPS R3000 Version: 0x1 Entry point address: 0x0 Start of program headers: 0 (bytes into file) Start of section headers: 456 (bytes into file) Flags: 0x20920026, pic, cpic, abi2, 5900, mips3 Size of this header: 52 (bytes) Size of program headers: 0 (bytes) Number of program headers: 0 Size of section headers: 40 (bytes) Number of section headers: 13 Section header string table index: 12 So we can compile, but: $ mipsel-linux-gnu-gcc -mabi=n32 -march=r5900 -msoft-float -L /usr/lib/mipsel-linux-gnu tests/tcg/mips/test-r5900-dmult.c /usr/lib/gcc-cross/mipsel-linux-gnu/8/../../../../mipsel-linux-gnu/bin/ld: /usr/lib/../lib32/Scrt1.o: relocations in generic ELF (EM: 3) /usr/lib/gcc-cross/mipsel-linux-gnu/8/../../../../mipsel-linux-gnu/bin/ld: /usr/lib/../lib32/Scrt1.o: error adding symbols: file in wrong format collect2: error: ld returned 1 exit status $ mipsel-linux-gnu-readelf -h /usr/lib/mipsel-linux-gnu/Scrt1.o ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: REL (Relocatable file) Machine: MIPS R3000 Version: 0x1 Entry point address: 0x0 Start of program headers: 0 (bytes into file) Start of section headers: 908 (bytes into file) Flags: 0x70001007, noreorder, pic, cpic, o32, mips32r2 Size of this header: 52 (bytes) Size of program headers: 0 (bytes) Number of program headers: 0 Size of section headers: 40 (bytes) Number of section headers: 15 Section header string table index: 14 The multilib documentation is scarce :) Also I wondered if I could abuse the linker a bit, knowing the resulting binary would be crap due to ABI mismatch, and got: $ mipsel-linux-gnu-gcc -march=r5900 -msoft-float -o test-r5900-dmult test-r5900-dmult.o collect2: fatal error: ld terminated with signal 11 [Segmentation fault], core dumped compilation terminated. /usr/lib/gcc-cross/mipsel-linux-gnu/8/../../../../mipsel-linux-gnu/bin/ld: test-r5900-dmult.o: ABI is incompatible with that of the selected emulation /usr/lib/gcc-cross/mipsel-linux-gnu/8/../../../../mipsel-linux-gnu/bin/ld: failed to merge target specific data of file test-r5900-dmult.o /usr/lib/gcc-cross/mipsel-linux-gnu/8/../../../../mipsel-linux-gnu/bin/ld: BFD (GNU Binutils for Debian) 2.31.1 assertion fail ../../bfd/elfxx-mips.c:3566 It seems Debian default packages aren't ready for QEMU needs. Alex, the other options I'm thinking of are: - Have you build/upload the gentoo-mipsr5900el-cross container - Commit the test-r5900-dmult binary to the repository - Craft a test-r5900-dmult in assembler without libc: $ mipsel-linux-gnu-gcc -mabi=n32 -march=r5900 -msoft-float -o a a.o -nostdlib -emain $ readelf -h a ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: DYN (Shared object file) Machine: MIPS R3000 Version: 0x1 Entry point address: 0x102f0 Start of program headers: 52 (bytes into file) Start of section headers: 1508 (bytes into file) Flags: 0x20920026, pic, cpic, abi2, 5900, mips3 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 9 Size of section headers: 40 (bytes) Number of section headers: 17 Section header string table index: 16 - Do not include r5900 test in mainstream QEMU What do you think? Phil.