[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [Bug 1416988] [NEW] Wrong signal handling in qemu-aarch64.
From: |
Maxim Ostapenko |
Subject: |
[Qemu-devel] [Bug 1416988] [NEW] Wrong signal handling in qemu-aarch64. |
Date: |
Mon, 02 Feb 2015 07:58:25 -0000 |
Public bug reported:
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.
** Affects: qemu
Importance: Undecided
Status: New
** Patch added: "Trivial fix."
https://bugs.launchpad.net/bugs/1416988/+attachment/4310279/+files/qemu_siginfo.diff
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1416988
Title:
Wrong signal handling in qemu-aarch64.
Status in QEMU:
New
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.
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1416988/+subscriptions
[Prev in Thread] |
Current Thread |
[Next in Thread] |