From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46543) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XHXhr-0000fF-Mc for qemu-devel@nongnu.org; Wed, 13 Aug 2014 08:31:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XHXhq-0008Ha-3c for qemu-devel@nongnu.org; Wed, 13 Aug 2014 08:31:07 -0400 Received: from [2001:4b98:dc0:45:216:3eff:fe3d:166f] (port=43001 helo=afflict.kos.to) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XHXhp-0008Gz-KP for qemu-devel@nongnu.org; Wed, 13 Aug 2014 08:31:06 -0400 Date: Wed, 13 Aug 2014 15:31:00 +0300 From: Riku Voipio Message-ID: <20140813123100.GA15797@afflict.kos.to> References: <1407869623-11185-1-git-send-email-tommusta@gmail.com> <1407869623-11185-10-git-send-email-tommusta@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <1407869623-11185-10-git-send-email-tommusta@gmail.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [V2 PATCH 09/12] linux-user: Minimum Sig Handler Stack Size for PPC64 ELF V2 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Tom Musta Cc: riku.voipio@deploy.org, agraf@suse.de, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, peter.maydell@deploy.org On Tue, Aug 12, 2014 at 01:53:40PM -0500, Tom Musta wrote: > The ELF V2 ABI for PPC64 defines MINSIGSTKSZ as 4096 bytes whereas it w= as > 2048 previously. fails to build - need to make get_ppc64_abi a properly exported function. =20 > Signed-off-by: Tom Musta > --- > V2: Define and use TARGET_MINSIGSTKSZ constants from the various > linux-user/$ARCH/syscall.h files (per Peter Maydell's review). >=20 > There is still a runtime check for PPC64 since the stack size changes > in ELF V2. >=20 > linux-user/aarch64/syscall.h | 1 + > linux-user/alpha/syscall.h | 1 + > linux-user/arm/syscall.h | 2 ++ > linux-user/cris/syscall.h | 1 + > linux-user/i386/syscall.h | 1 + > linux-user/m68k/syscall.h | 2 ++ > linux-user/microblaze/syscall.h | 1 + > linux-user/mips/syscall.h | 1 + > linux-user/mips64/syscall.h | 1 + > linux-user/openrisc/syscall.h | 2 ++ > linux-user/ppc/syscall.h | 2 ++ > linux-user/s390x/syscall.h | 1 + > linux-user/sh4/syscall.h | 2 ++ > linux-user/signal.c | 12 +++++++++++- > linux-user/sparc/syscall.h | 1 + > linux-user/sparc64/syscall.h | 1 + > linux-user/unicore32/syscall.h | 2 ++ > linux-user/x86_64/syscall.h | 1 + > 18 files changed, 34 insertions(+), 1 deletions(-) >=20 > diff --git a/linux-user/aarch64/syscall.h b/linux-user/aarch64/syscall.= h > index 18f44a8..d1f4823 100644 > --- a/linux-user/aarch64/syscall.h > +++ b/linux-user/aarch64/syscall.h > @@ -8,3 +8,4 @@ struct target_pt_regs { > #define UNAME_MACHINE "aarch64" > #define UNAME_MINIMUM_RELEASE "3.8.0" > #define TARGET_CLONE_BACKWARDS > +#define TARGET_MINSIGSTKSZ 2048 > diff --git a/linux-user/alpha/syscall.h b/linux-user/alpha/syscall.h > index ed13d9a..3adedeb 100644 > --- a/linux-user/alpha/syscall.h > +++ b/linux-user/alpha/syscall.h > @@ -252,3 +252,4 @@ struct target_pt_regs { > #define TARGET_UAC_NOPRINT 1 > #define TARGET_UAC_NOFIX 2 > #define TARGET_UAC_SIGBUS 4 > +#define TARGET_MINSIGSTKSZ 4096 > diff --git a/linux-user/arm/syscall.h b/linux-user/arm/syscall.h > index e0d2cc3..cdadb0c 100644 > --- a/linux-user/arm/syscall.h > +++ b/linux-user/arm/syscall.h > @@ -44,3 +44,5 @@ struct target_pt_regs { > #define UNAME_MINIMUM_RELEASE "2.6.32" > =20 > #define TARGET_CLONE_BACKWARDS > + > +#define TARGET_MINSIGSTKSZ 2048 > diff --git a/linux-user/cris/syscall.h b/linux-user/cris/syscall.h > index f5783c0..a75bcc4 100644 > --- a/linux-user/cris/syscall.h > +++ b/linux-user/cris/syscall.h > @@ -39,5 +39,6 @@ struct target_pt_regs { > }; > =20 > #define TARGET_CLONE_BACKWARDS2 > +#define TARGET_MINSIGSTKSZ 2048 > =20 > #endif > diff --git a/linux-user/i386/syscall.h b/linux-user/i386/syscall.h > index 9bfc1ad..acf6856 100644 > --- a/linux-user/i386/syscall.h > +++ b/linux-user/i386/syscall.h > @@ -147,3 +147,4 @@ struct target_vm86plus_struct { > #define UNAME_MINIMUM_RELEASE "2.6.32" > =20 > #define TARGET_CLONE_BACKWARDS > +#define TARGET_MINSIGSTKSZ 2048 > diff --git a/linux-user/m68k/syscall.h b/linux-user/m68k/syscall.h > index 889eaf7..f8553f8 100644 > --- a/linux-user/m68k/syscall.h > +++ b/linux-user/m68k/syscall.h > @@ -18,4 +18,6 @@ struct target_pt_regs { > #define UNAME_MACHINE "m68k" > #define UNAME_MINIMUM_RELEASE "2.6.32" > =20 > +#define TARGET_MINSIGSTKSZ 2048 > + > void do_m68k_simcall(CPUM68KState *, int); > diff --git a/linux-user/microblaze/syscall.h b/linux-user/microblaze/sy= scall.h > index 5b5f6b4..2a5e160 100644 > --- a/linux-user/microblaze/syscall.h > +++ b/linux-user/microblaze/syscall.h > @@ -49,5 +49,6 @@ struct target_pt_regs { > }; > =20 > #define TARGET_CLONE_BACKWARDS > +#define TARGET_MINSIGSTKSZ 2048 > =20 > #endif > diff --git a/linux-user/mips/syscall.h b/linux-user/mips/syscall.h > index 5bc5696..0b4662c 100644 > --- a/linux-user/mips/syscall.h > +++ b/linux-user/mips/syscall.h > @@ -228,3 +228,4 @@ struct target_pt_regs { > #define UNAME_MINIMUM_RELEASE "2.6.32" > =20 > #define TARGET_CLONE_BACKWARDS > +#define TARGET_MINSIGSTKSZ 2048 > diff --git a/linux-user/mips64/syscall.h b/linux-user/mips64/syscall.h > index a7f5a58..39b8bed 100644 > --- a/linux-user/mips64/syscall.h > +++ b/linux-user/mips64/syscall.h > @@ -225,3 +225,4 @@ struct target_pt_regs { > #define UNAME_MINIMUM_RELEASE "2.6.32" > =20 > #define TARGET_CLONE_BACKWARDS > +#define TARGET_MINSIGSTKSZ 2048 > diff --git a/linux-user/openrisc/syscall.h b/linux-user/openrisc/syscal= l.h > index c3b36da..e5e6180 100644 > --- a/linux-user/openrisc/syscall.h > +++ b/linux-user/openrisc/syscall.h > @@ -23,3 +23,5 @@ struct target_pt_regs { > =20 > #define UNAME_MACHINE "openrisc" > #define UNAME_MINIMUM_RELEASE "2.6.32" > + > +#define TARGET_MINSIGSTKSZ 2048 > diff --git a/linux-user/ppc/syscall.h b/linux-user/ppc/syscall.h > index db92bbe..5311cc6 100644 > --- a/linux-user/ppc/syscall.h > +++ b/linux-user/ppc/syscall.h > @@ -69,3 +69,5 @@ struct target_revectored_struct { > #define UNAME_MINIMUM_RELEASE "2.6.32" > =20 > #define TARGET_CLONE_BACKWARDS > + > +#define TARGET_MINSIGSTKSZ 2048 > diff --git a/linux-user/s390x/syscall.h b/linux-user/s390x/syscall.h > index aaad512..b11a3b2 100644 > --- a/linux-user/s390x/syscall.h > +++ b/linux-user/s390x/syscall.h > @@ -24,3 +24,4 @@ struct target_pt_regs { > #define UNAME_MINIMUM_RELEASE "2.6.32" > =20 > #define TARGET_CLONE_BACKWARDS2 > +#define TARGET_MINSIGSTKSZ 2048 > diff --git a/linux-user/sh4/syscall.h b/linux-user/sh4/syscall.h > index ccd2216..285ecf3 100644 > --- a/linux-user/sh4/syscall.h > +++ b/linux-user/sh4/syscall.h > @@ -11,3 +11,5 @@ struct target_pt_regs { > =20 > #define UNAME_MACHINE "sh4" > #define UNAME_MINIMUM_RELEASE "2.6.32" > + > +#define TARGET_MINSIGSTKSZ 2048 > diff --git a/linux-user/signal.c b/linux-user/signal.c > index cdfcc52..174c286 100644 > --- a/linux-user/signal.c > +++ b/linux-user/signal.c > @@ -617,6 +617,15 @@ abi_long do_sigaltstack(abi_ulong uss_addr, abi_ul= ong uoss_addr, abi_ulong sp) > { > struct target_sigaltstack *uss; > struct target_sigaltstack ss; > + size_t minstacksize =3D TARGET_MINSIGSTKSZ; > + > +#if defined(TARGET_PPC64) > + /* ELF V2 for PPC64 has a 4K minimum stack size for signal han= dlers */ > + struct image_info *image =3D ((TaskState *)thread_cpu->opaque)= ->info; > + if (get_ppc64_abi(image) > 1) { > + minstacksize =3D 4096; > + } > +#endif fails to build: CC ppc64-linux-user/linux-user/signal.o /home/voipio/deploy/qemu/linux-user/signal.c: In function =E2=80=98do_sig= altstack=E2=80=99: /home/voipio/deploy/qemu/linux-user/signal.c:625:9: error: implicit decla= ration of function =E2=80=98get_ppc64_abi=E2=80=99 [-Werror=3Dimplicit-fu= nction-declaration] if (get_ppc64_abi(image) > 1) { ^ /home/voipio/deploy/qemu/linux-user/signal.c:625:9: error: nested extern = declaration of =E2=80=98get_ppc64_abi=E2=80=99 [-Werror=3Dnested-externs] cc1: all warnings being treated as errors > ret =3D -TARGET_EFAULT; > if (!lock_user_struct(VERIFY_READ, uss, uss_addr, 1)) { > @@ -642,8 +651,9 @@ abi_long do_sigaltstack(abi_ulong uss_addr, abi_ulo= ng uoss_addr, abi_ulong sp) > ss.ss_sp =3D 0; > } else { > ret =3D -TARGET_ENOMEM; > - if (ss.ss_size < MINSIGSTKSZ) > + if (ss.ss_size < minstacksize) { > goto out; > + } > } > =20 > target_sigaltstack_used.ss_sp =3D ss.ss_sp; > diff --git a/linux-user/sparc/syscall.h b/linux-user/sparc/syscall.h > index 9549ea0..ae40744 100644 > --- a/linux-user/sparc/syscall.h > +++ b/linux-user/sparc/syscall.h > @@ -15,3 +15,4 @@ struct target_pt_regs { > * and copy_thread(). > */ > #define TARGET_CLONE_BACKWARDS > +#define TARGET_MINSIGSTKSZ 4096 > diff --git a/linux-user/sparc64/syscall.h b/linux-user/sparc64/syscall.= h > index 82b1680..816a00f 100644 > --- a/linux-user/sparc64/syscall.h > +++ b/linux-user/sparc64/syscall.h > @@ -16,3 +16,4 @@ struct target_pt_regs { > * and copy_thread(). > */ > #define TARGET_CLONE_BACKWARDS > +#define TARGET_MINSIGSTKSZ 4096 > diff --git a/linux-user/unicore32/syscall.h b/linux-user/unicore32/sysc= all.h > index f7e5525..3ed6237 100644 > --- a/linux-user/unicore32/syscall.h > +++ b/linux-user/unicore32/syscall.h > @@ -53,4 +53,6 @@ struct target_pt_regs { > #define UNAME_MACHINE "UniCore-II" > #define UNAME_MINIMUM_RELEASE "2.6.32" > =20 > +#define TARGET_MINSIGSTKSZ 2048 > + > #endif /* __UC32_SYSCALL_H__ */ > diff --git a/linux-user/x86_64/syscall.h b/linux-user/x86_64/syscall.h > index e03b5a0..5828b91 100644 > --- a/linux-user/x86_64/syscall.h > +++ b/linux-user/x86_64/syscall.h > @@ -97,3 +97,4 @@ struct target_msqid64_ds { > #define TARGET_ARCH_SET_FS 0x1002 > #define TARGET_ARCH_GET_FS 0x1003 > #define TARGET_ARCH_GET_GS 0x1004 > +#define TARGET_MINSIGSTKSZ 2048 > --=20 > 1.7.1 >=20