blob: 63d34d5d5b53270a3ddf612474f51218e869725e [file] [log] [blame] [view]
# Test status
## Test cases
test-many-klibcs implements:
1. Build for each architecture (with a cross-compiler where needed)
2. Run various programs (using qemu-user where needed) in static and
shared configurations:
a. Many self-test programs (through system shell)
b. "sh -c exit"
c. "sh -c '.../bin/true; exit'"
## Test failures
### 2.0.10
* arm, i386, m68k, parisc, ppc, sh:
* Fail to build (with Linux 5.19 headers)
* arm64:
* 2a:malloctest2, 2a:setjmptest, 2a:sigint: Fail in shared build
with GNU toolchain (gcc 12.1.0, binutils 2.38.90.20220713)
* 2c: Fails with SIGSEGV in static build with LLVM, but only on QEMU
* riscv64:
* 2a:sigint: Fails when built with Clang, but only on QEMU
* s390x:
* 2a:environ, 2a:opentest, 2a:setjmptest: Produce wrong output when built
with Clang, but only on QEMU
* 2a:malloctest, 2a:malloctest2, 2c: Appear to loop forever when built
with Clang, but only on QEMU
* 2a:sscanf: Exits with error when built with Clang, but only on QEMU
### 2.0.10+git20221002
* mipsisa64r6, mipsisa64r6el:
* Linker error "relocation truncated to fit: R_MIPS_PC26_S2" when
building a shared executable with gcc
* riscv64:
* 2a:sigint: Fails when built with Clang, maybe only on QEMU
* s390x:
* 2a:environ, 2a:opentest, 2a:setjmptest: Produce wrong output when built
with Clang, maybe only on QEMU
* 2a:malloctest, 2a:malloctest2, 2c: Appear to loop forever when built
with Clang, maybe only on QEMU
* 2a:sscanf: Exits with error when built with Clang, maybe only on QEMU
* sh4:
* All executables hang when built with gcc 12
### Known bugs elsewhere
QEMU 3.1 had a bug in handling of struct timveval on sparc64, and a
bug in the ELF loader. Additionally, it has a lot of bugs in signal
handling on alpha and sparc. All of those are fixed in my local
build, qemu-user-static_3.1+dfsg-2.1_amd64.deb.
QEMU 6.1 fixes those plus the s390x failures, but also has regressions
for armhf, hppa, and riscv64.
Clang 13 has a bug that affects i386, -mregparm, and optimisation of
printf() to puts(). The call to puts() passes arguments using the
usual stack-based calling convention. This is now worked-around
by disabling CONFIG_REGPARM.
LLD 13 has a bug affecting mips and mips64 that puts trap instructions
(sigrie) instead of nops in branch delay slots. Patching these back
to nops made the tests pass. I have only seen this in klibc.so, not
in any executables.
LLD 13 seems to have a bug in PowerPC global register initialisation
affecting most tests on ppc64.
LLD 13 is missing required features for riscv64 and sparc64.