On 2 February 2015 at 08:23, Maxim Ostapenko <m.ostape...@partner.samsung.com> wrote: > Sorry, missed ML.
You missed qemu-devel as well :-) > On 02/02/2015 12:20 PM, Maxim Ostapenko wrote: >> >> Hi, >> >> this patch fixes https://bugs.launchpad.net/qemu/+bug/1416988. >> >> There is a small ABI incompatibility between Qemu-aarch64 and Linux Kernel >> 3.19 caused by wrong size of struct target_siginfo in Qemu. This tiny patch >> fixes the issue. >> >> -Maxim >> >> From 1d662e325d004bce2d640cfea5b337c92c7feca2 Mon Sep 17 00:00:00 2001 >> From: Max Ostapenko <m.ostape...@partner.samsung.com> >> Date: Mon, 2 Feb 2015 12:03:20 +0400 >> Subject: [PATCH] linux-user: wrong TARGET_SI_PAD_SIZE value for some >> targets. >> >> Fix TARGET_SI_PAD_SIZE for S390X, SPARC, ALPHA and AARCH64 to correspond >> Linux Kernel 3.19 c59c961ca511dc7ee2f4f7e9c224d16f5c76ca6e revision. Thanks for this patch. I'm afraid that to apply it we need a Signed-off-by: line from you that certifies that you're OK to contribute it. (This is the same as Linux kernel patches; see the "Patch emails must include a Signed-off-by: line" section in http://wiki.qemu.org/Contribute/SubmitAPatch ). >> --- >> linux-user/syscall_defs.h | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h >> index ebb3be1..b95a0b2 100644 >> --- a/linux-user/syscall_defs.h >> +++ b/linux-user/syscall_defs.h >> @@ -655,7 +655,12 @@ typedef struct { >> #endif >> >> #define TARGET_SI_MAX_SIZE 128 >> +#if defined(TARGET_S390X) || defined(TARGET_SPARC) \ >> + || defined(TARGET_ALPHA) || defined(TARGET_AARCH64) I don't think this ifdef is correct. For instance for sparc the kernel defines things differently for 32 and 64 bit. In fact as far as I can tell for all architectures the kernel defines __ARCH_SI_PREAMBLE_SIZE to (4 * sizeof(int)) for 64 bit and (3 * sizeof(int)) for 32 bit. >> +#define TARGET_SI_PAD_SIZE ((TARGET_SI_MAX_SIZE/sizeof(int)) - 4) >> +#else >> #define TARGET_SI_PAD_SIZE ((TARGET_SI_MAX_SIZE/sizeof(int)) - 3) >> +#endif So I would suggest #if TARGET_ABI_BITS == 32 #define TARGET_SI_PREAMBLE_SIZE (3 * sizeof(int)) #else #define TARGET_SI_PREAMBLE_SIZE (4 * sizeof(int)) #endif #define TARGET_SI_PAD_SIZE ((TARGET_SI_MAX_SIZE - TARGET_SI_PREAMBLE_SIZE) / sizeof(int)) which should give us the correct answer for all archs and configurations (including I think the 32-bit-on-64-bit setups like sparc32plus). It also rephrases the calculation to match what the kernel uses. thanks -- PMM