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
|
syscall: 0.388
runtime: 0.308
instruction: 0.304
qemu-user-static crash when executing generated NEON code due to failure to detect invalidation
Description of problem:
`qemu-arm-static` crashes 100% of times when attempting to run NEON code. The same executable, when run in `system` emulation mode, works without issue.
I experience this particular issue when attempting to test GStreamer's Orc library with NEON codegen with QEMU user emulation.
Steps to reproduce:
1. Clone https://gitlab.freedesktop.org/gstreamer/orc.git
2. Build with `meson setup build -Ddefault_library=static; meson compile -C build`
3. Run `qemu-arm-static ./build/tools/orc-bugreport`
Additional information:
The crash always happens inside the same JIT code. It is not a memory access, so there is no reason for QEMU to report SIGSEGV:
```
Program received signal SIGSEGV, Segmentation fault.
0x409e503c in ?? ()
(gdb) bt
#0 0x409e503c in ?? ()
#1 0x00408bc6 in orc_executor_run (ex=0x51cfc0) at ../orc/orcexecutor.c:51
#2 0x00489692 in orc_test_compare_output_full_for_target (program=0x4bcd90, flags=0,
target_name=0x0) at ../orc-test/orctest.c:800
#3 0x00489004 in orc_test_compare_output_full (program=0x4bcd90, flags=0)
at ../orc-test/orctest.c:664
#4 0x00404826 in test_opcode_src (opcode=0x4b098c <opcodes+2400>)
at ../tools/orc-bugreport.c:252
#5 0x004045d8 in test_opcodes () at ../tools/orc-bugreport.c:188
#6 0x004043f2 in main (argc=1, argv=0x40800704) at ../tools/orc-bugreport.c:118
(gdb) disas 0x409e5030
No function contains specified address.
(gdb) disas 0x409e5030, +10
Dump of assembler code from 0x409e5030 to 0x409e503a:
0x409e5030: vld1.8 {d4-d5}, [r3]
0x409e5034: vst1.8 {d4-d5}, [r2]
0x409e5038: add r2, r2, #16
End of assembler dump.
(gdb) disas 0x409e5030, +20
Dump of assembler code from 0x409e5030 to 0x409e5044:
0x409e5030: vld1.8 {d4-d5}, [r3]
0x409e5034: vst1.8 {d4-d5}, [r2]
0x409e5038: add r2, r2, #16
=> 0x409e503c: add r3, r3, #16
0x409e5040: subs r12, r12, #1
End of assembler dump.
(gdb)
```
|