Wrong signal handling in qemu-aarch64.

Bug #1416988 reported by Maxim Ostapenko
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Unassigned

Bug Description

Running GCC 5.0 testsuite under qemu-aarch64, I noticed that tests connected with stack unwinding fail with:

qemu: uncaught target signal 11 (Segmentation fault) - core dumped

or run into infinite loop.

Here is one example:

$ /home/max/build/gcc-aarch64/gcc/xgcc -B/home/max/build/gcc-aarch64/gcc/ /home/max/src/toolchain/gcc/gcc/testsuite/gcc.dg/cleanup-11.c -fexceptions -fnon-call-exceptions -O2 -lm -o ./cleanup-11.exe

$ qemu-aarch64 -L /home/max/install/aarch64/aarch64-linux/sys-root/ -R 0 -/cleanup-11.exe
qemu: uncaught target signal 11 (Segmentation fault) - core dumped.

Actually, this caused by ABI incompatibility between Linux Kernel (trunk) and qemu-aarch64. In fact, size of siginfo structure in Linux and target_siginfo structure in qemu-aarch64 differ:

sizeof (struct target_siginfo) = 136 // QEMU
sizeof (struct siginfo) = 128 // Linux Kernel

This caused by wrong TARGET_SI_PAD_SIZE defined in linux-user/syscall_defs.h:

#define TARGET_SI_PAD_SIZE ((TARGET_SI_MAX_SIZE/sizeof(int)) - 3)

In Kernel respective value is:

#define SI_PAD_SIZE ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
.............................................
#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) // for Aarch64

Trivial fix, changing TARGET_SI_PAD_SIZE to right value, is attached.

Revision history for this message
Maxim Ostapenko (m-ostapenko) wrote :
pranith (bobby-prani)
Changed in qemu:
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.