From 9e1f9b3eacb51a67e675cd1195c472215fb16373 Mon Sep 17 00:00:00 2001 From: Pavel Chupin Date: Tue, 27 Nov 2012 14:09:50 +0400 Subject: [4.7] x32: Backport x32 support into 4.7 This patch contains all gcc changes required to build x32 compiler. They are backported from 4.8/trunk. Change-Id: I923f639c1f0cee5812b0f555a39bab0bd0723865 Signed-off-by: Pavel Chupin --- gcc-4.7/libgcc/ChangeLog.x32 | 9 +++++++++ gcc-4.7/libgcc/config/i386/linux-unwind.h | 19 ++++++++----------- gcc-4.7/libgcc/unwind-dw2.c | 3 ++- 3 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 gcc-4.7/libgcc/ChangeLog.x32 (limited to 'gcc-4.7/libgcc') diff --git a/gcc-4.7/libgcc/ChangeLog.x32 b/gcc-4.7/libgcc/ChangeLog.x32 new file mode 100644 index 000000000..8b6d4a2b7 --- /dev/null +++ b/gcc-4.7/libgcc/ChangeLog.x32 @@ -0,0 +1,9 @@ +2012-03-29 H.J. Lu + + * config/i386/linux-unwind.h (x86_64_fallback_frame_state): Define + only for glibc. + +2012-03-13 H.J. Lu + + * unwind-dw2.c (_Unwind_SetGRValue): Assert DWARF register size + <= saved reg size. diff --git a/gcc-4.7/libgcc/config/i386/linux-unwind.h b/gcc-4.7/libgcc/config/i386/linux-unwind.h index cd9a9a1e2..02b1897f0 100644 --- a/gcc-4.7/libgcc/config/i386/linux-unwind.h +++ b/gcc-4.7/libgcc/config/i386/linux-unwind.h @@ -29,11 +29,17 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #ifndef inhibit_libc -#ifdef __x86_64__ +/* There's no sys/ucontext.h for glibc 2.0, so no + signal-turned-exceptions for them. There's also no configure-run for + the target, so we can't check on (e.g.) HAVE_SYS_UCONTEXT_H. Using the + target libc version macro should be enough. */ +#if defined __GLIBC__ && !(__GLIBC__ == 2 && __GLIBC_MINOR__ == 0) #include #include +#ifdef __x86_64__ + #define MD_FALLBACK_FRAME_STATE_FOR x86_64_fallback_frame_state static _Unwind_Reason_Code @@ -108,15 +114,6 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context, #else /* ifdef __x86_64__ */ -/* There's no sys/ucontext.h for glibc 2.0, so no - signal-turned-exceptions for them. There's also no configure-run for - the target, so we can't check on (e.g.) HAVE_SYS_UCONTEXT_H. Using the - target libc version macro should be enough. */ -#if defined __GLIBC__ && !(__GLIBC__ == 2 && __GLIBC_MINOR__ == 0) - -#include -#include - #define MD_FALLBACK_FRAME_STATE_FOR x86_fallback_frame_state static _Unwind_Reason_Code @@ -197,6 +194,6 @@ x86_frob_update_context (struct _Unwind_Context *context, _Unwind_SetSignalFrame (context, 1); } -#endif /* not glibc 2.0 */ #endif /* ifdef __x86_64__ */ +#endif /* not glibc 2.0 */ #endif /* ifdef inhibit_libc */ diff --git a/gcc-4.7/libgcc/unwind-dw2.c b/gcc-4.7/libgcc/unwind-dw2.c index 475ad00bf..d1c62eef1 100644 --- a/gcc-4.7/libgcc/unwind-dw2.c +++ b/gcc-4.7/libgcc/unwind-dw2.c @@ -294,7 +294,8 @@ _Unwind_SetGRValue (struct _Unwind_Context *context, int index, { index = DWARF_REG_TO_UNWIND_COLUMN (index); gcc_assert (index < (int) sizeof(dwarf_reg_size_table)); - gcc_assert (dwarf_reg_size_table[index] == sizeof (_Unwind_Context_Reg_Val)); + /* Return column size may be smaller than _Unwind_Context_Reg_Val. */ + gcc_assert (dwarf_reg_size_table[index] <= sizeof (_Unwind_Context_Reg_Val)); context->by_value[index] = 1; context->reg[index] = _Unwind_Get_Unwind_Context_Reg_Val (val); -- cgit v1.2.3