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
|
debug: 0.930
graphic: 0.882
vnc: 0.881
ppc: 0.862
device: 0.842
mistranslation: 0.797
performance: 0.775
architecture: 0.766
user-level: 0.753
semantic: 0.731
register: 0.700
risc-v: 0.670
VMM: 0.655
peripherals: 0.647
kernel: 0.622
network: 0.616
files: 0.597
TCG: 0.589
PID: 0.568
permissions: 0.564
boot: 0.560
socket: 0.558
hypervisor: 0.448
i386: 0.439
arm: 0.414
assembly: 0.372
virtual: 0.364
x86: 0.224
KVM: 0.089
ppc64le linux user emulation w/ 64KiB pages seems broken since v5.0.0
Description of problem:
[Our (snmalloc's)](https://github.com/microsoft/snmalloc) CI includes running a PowerPC64 little-endian Linux build inside qemu, running with 64KiB pages as, at least, Debian runs them by default. As reported [over there](https://github.com/microsoft/snmalloc/issues/576), this broke when GitHub's CI runners moved from Ubuntu Focal (20.04) to Jammy (22.04), bringing qemu from v4.2 to v6.2.
The failing test case appears to die of an erroneous `SIGSEGV` `SEGV_MAPERR`:
```
--- SIGSEGV {si_signo=SIGSEGV, si_code=1, si_addr=0x0000004001be5000} ---
```
despite that address nominally being mapped by the last memory syscall to touch that area
```
openat(AT_FDCWD,"/usr/powerpc64le-linux-gnu/lib/libstdc++.so.6",O_RDONLY|O_CLOEXEC) = 4
[...]
mmap(0x0000004001bd0000,131072,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,4,0x2f0000) = 0x4001bd0000
```
Bisection reveals that the breakage first occurred with 4dcf078f094d436866ef793aa25c96fba85ac8d0, though I suspect this is merely the commit that exposes some underlying bug rather than being the actual root cause.
Steps to reproduce:
Run a ppc64el Linux executable under `qemu-user` with `-p 65536`.
Additional information:
Please advise what more would be useful.
|