summaryrefslogtreecommitdiffstats
path: root/status.md
blob: dde1676188dafc743788ecbfefc52c019f898532 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# 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

With patched QEMU 3.1:

* 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.11, 2.0.12

With patched QEMU 3.1:

* 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

With QEMU 7.2:

* armhf:
  * All tests fail (SIGSEGV) in shared build. Seems to be a QEMU bug.
* mipsisa64r6, mipsisa64r6el:
  * Linker error "relocation truncated to fit: R_MIPS_PC26_S2" when
    building a shared executable with gcc
* riscv64:
  * All tests fail in shared build. Seems to be a QEMU bug.
  * 2a:sigint: Fails when built with Clang
* 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.

QEMU 7.2 fixes hppa, but still has regressions for armhf and riscv64.
But we need it for time64 support.

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.