mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-24 12:31:25 +08:00
arm: Fix up arm installed unwind.h for use in pedantic modes [PR93615]
As the following testcase shows, unwind.h on ARM can't be (starting with GCC 10) compiled with -std=c* modes, only -std=gnu* modes. The problem is it uses asm keyword, which isn't a keyword in those modes (system headers vs. non-system ones don't make a difference here). glibc and other installed headers use __asm or __asm__ keywords instead that work fine in both standard and gnu modes. While there, as it is an installed header, I think it is also wrong to completely ignore any identifier namespace rules. The generic unwind.h defines just _Unwind* namespace identifiers plus _sleb128_t/_uleb128_t (but e.g. unlike libstdc++/glibc headers doesn't uglify operand names), the ARM unwind.h is much worse here. I've just changed the gnu_Unwind_Find_got function at least not be in user identifier namespace, but perhaps it would be good to go further and rename e.g. or e.g. typedef _Unwind_Reason_Code (*personality_routine) (_Unwind_State, _Unwind_Control_Block *, _Unwind_Context *); in unwind-arm-common.h. 2020-02-07 Jakub Jelinek <jakub@redhat.com> PR target/93615 * config/arm/unwind-arm.h (gnu_Unwind_Find_got): Rename to ... (_Unwind_gnu_Find_got): ... this. Use __asm instead of asm. Remove trailing :s in asm. Formatting fixes. (_Unwind_decode_typeinfo_ptr): Adjust caller. * gcc.dg/pr93615.c: New test.
This commit is contained in:
parent
f82617f229
commit
811a475ea3
@ -1,5 +1,8 @@
|
||||
2020-02-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/93615
|
||||
* gcc.dg/pr93615.c: New test.
|
||||
|
||||
PR target/93611
|
||||
* gcc.target/i386/pr93611.c: New test.
|
||||
|
||||
|
11
gcc/testsuite/gcc.dg/pr93615.c
Normal file
11
gcc/testsuite/gcc.dg/pr93615.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=c11" } */
|
||||
/* { dg-require-effective-target exceptions } */
|
||||
|
||||
#include <unwind.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return 0;
|
||||
}
|
@ -1,3 +1,11 @@
|
||||
2020-02-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/93615
|
||||
* config/arm/unwind-arm.h (gnu_Unwind_Find_got): Rename to ...
|
||||
(_Unwind_gnu_Find_got): ... this. Use __asm instead of asm. Remove
|
||||
trailing :s in asm. Formatting fixes.
|
||||
(_Unwind_decode_typeinfo_ptr): Adjust caller.
|
||||
|
||||
2020-01-31 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
nios2: Support for GOT-relative DW_EH_PE_datarel encoding.
|
||||
|
@ -43,19 +43,15 @@ extern "C" {
|
||||
#endif
|
||||
_Unwind_Ptr __attribute__((weak)) __gnu_Unwind_Find_got (_Unwind_Ptr);
|
||||
|
||||
static inline _Unwind_Ptr gnu_Unwind_Find_got (_Unwind_Ptr ptr)
|
||||
static inline _Unwind_Ptr _Unwind_gnu_Find_got (_Unwind_Ptr ptr)
|
||||
{
|
||||
_Unwind_Ptr res;
|
||||
|
||||
if (__gnu_Unwind_Find_got)
|
||||
res = __gnu_Unwind_Find_got (ptr);
|
||||
res = __gnu_Unwind_Find_got (ptr);
|
||||
else
|
||||
{
|
||||
asm volatile ("mov %[result], r" XSTR(FDPIC_REGNUM)
|
||||
: [result]"=r" (res)
|
||||
:
|
||||
:);
|
||||
}
|
||||
__asm volatile ("mov %[result], r" XSTR(FDPIC_REGNUM)
|
||||
: [result] "=r" (res));
|
||||
|
||||
return res;
|
||||
}
|
||||
@ -75,7 +71,7 @@ static inline _Unwind_Ptr gnu_Unwind_Find_got (_Unwind_Ptr ptr)
|
||||
#if __FDPIC__
|
||||
/* For FDPIC, we store the offset of the GOT entry. */
|
||||
/* So, first get GOT from dynamic linker and then use indirect access. */
|
||||
tmp += gnu_Unwind_Find_got (ptr);
|
||||
tmp += _Unwind_gnu_Find_got (ptr);
|
||||
tmp = *(_Unwind_Word *) tmp;
|
||||
#elif (defined(linux) && !defined(__uClinux__)) || defined(__NetBSD__) \
|
||||
|| defined(__FreeBSD__) || defined(__fuchsia__)
|
||||
|
Loading…
x
Reference in New Issue
Block a user