diff options
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 28 | ||||
-rw-r--r-- | libgcc/config/mips/crtn.S | 2 | ||||
-rw-r--r-- | libgcc/config/mips/linux-unwind.h | 5 | ||||
-rw-r--r-- | libgcc/config/mips/mips16.S | 5 | ||||
-rw-r--r-- | libgcc/config/sh/lib1funcs.S | 16 | ||||
-rw-r--r-- | libgcc/config/vxlib-tls.c | 10 | ||||
-rw-r--r-- | libgcc/unwind-dw2.c | 11 |
7 files changed, 61 insertions, 16 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index fe08adb12aa..e0556b45012 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,31 @@ +2013-03-20 Robert Mason <rbmj@verizon.net> + + * config/vxlib-tls.c (__gthread_get_tsd_data,) + (__gthread_set_tsd_data, __gthread_enter_tsd_dtor_context,) + (__gthread_leave_tsd_dtor_context): Add prototypes. + (tls_delete_hook): Update. + +2013-03-20 Catherine Moore <clm@codesourcery.com> + Joseph Myers <joseph@codesourcery.com> + Chao-ying Fu <fu@mips.com> + + * config/mips/mips16.S: Don't build for microMIPS. + * config/mips/linux-unwind.h: Handle microMIPS frame. + * config/mips/crtn.S (fini, init): New labels. + +2013-03-14 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/53265 + * unwind-dw2.c (execute_cfa_program): Avoid + -Waggressive-array-optimizations warnings for DW_CFA_GNU_window_save + on targets with DWARF_FRAME_REGISTERS < 32. + +2013-03-13 Oleg Endo <olegendo@gcc.gnu.org> + + PR target/49880 + * config/sh/lib1funcs.S (sdivsi3_i4, udivsi3_i4): Enable for SH2A. + (sdivsi3, udivsi3): Remove SH4 check and always compile these functions. + 2013-03-07 Sriraman Tallam <tmsriram@google.com> * config/i386/cpuinfo.c (get_intel_cpu): Fix cpuid codes for diff --git a/libgcc/config/mips/crtn.S b/libgcc/config/mips/crtn.S index 59d1a905c11..99007176db2 100644 --- a/libgcc/config/mips/crtn.S +++ b/libgcc/config/mips/crtn.S @@ -31,6 +31,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #endif .section .init,"ax",@progbits +init: #ifdef __mips64 ld RA,40($sp) daddu $sp,$sp,48 @@ -41,6 +42,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see j RA .section .fini,"ax",@progbits +fini: #ifdef __mips64 ld RA,40($sp) daddu $sp,$sp,48 diff --git a/libgcc/config/mips/linux-unwind.h b/libgcc/config/mips/linux-unwind.h index a009797195c..92c2941ef42 100644 --- a/libgcc/config/mips/linux-unwind.h +++ b/libgcc/config/mips/linux-unwind.h @@ -51,6 +51,11 @@ mips_fallback_frame_state (struct _Unwind_Context *context, _Unwind_Ptr new_cfa, reg_offset; int i; + /* A MIPS16 or microMIPS frame. Signal frames always use the standard + ISA encoding. */ + if ((_Unwind_Ptr) pc & 3) + return _URC_END_OF_STACK; + /* 24021061 li v0, 0x1061 (rt_sigreturn)*/ /* 0000000c syscall */ /* or */ diff --git a/libgcc/config/mips/mips16.S b/libgcc/config/mips/mips16.S index ab3a7942d6c..82675018002 100644 --- a/libgcc/config/mips/mips16.S +++ b/libgcc/config/mips/mips16.S @@ -21,6 +21,10 @@ a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ +#ifdef __mips_micromips + /* DO NOTHING */ +#else + /* This file contains mips16 floating point support functions. These functions are called by mips16 code to handle floating point when -msoft-float is not used. They accept the arguments and return @@ -718,3 +722,4 @@ CALL_STUB_RET (__mips16_call_stub_dc_10, 10, DC) #endif /* !__mips_single_float */ #endif +#endif /* __mips_micromips */ diff --git a/libgcc/config/sh/lib1funcs.S b/libgcc/config/sh/lib1funcs.S index 56257190421..5f0bbff264f 100644 --- a/libgcc/config/sh/lib1funcs.S +++ b/libgcc/config/sh/lib1funcs.S @@ -1006,7 +1006,7 @@ hiset: sts macl,r0 ! r0 = bb*dd #ifdef L_sdivsi3_i4 .title "SH DIVIDE" !! 4 byte integer Divide code for the Renesas SH -#ifdef __SH4__ +#if defined (__SH4__) || defined (__SH2A__) !! args in r4 and r5, result in fpul, clobber dr0, dr2 .global GLOBAL(sdivsi3_i4) @@ -1021,7 +1021,7 @@ GLOBAL(sdivsi3_i4): ftrc dr0,fpul ENDFUNC(GLOBAL(sdivsi3_i4)) -#elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__) +#elif defined (__SH2A_SINGLE__) || defined (__SH2A_SINGLE_ONLY__) || defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__) !! args in r4 and r5, result in fpul, clobber r2, dr0, dr2 #if ! __SH5__ || __SH5__ == 32 @@ -1046,13 +1046,12 @@ GLOBAL(sdivsi3_i4): ENDFUNC(GLOBAL(sdivsi3_i4)) #endif /* ! __SH5__ || __SH5__ == 32 */ -#endif /* ! __SH4__ */ +#endif /* ! __SH4__ || __SH2A__ */ #endif #ifdef L_sdivsi3 /* __SH4_SINGLE_ONLY__ keeps this part for link compatibility with sh2e/sh3e code. */ -#if (! defined(__SH4__) && ! defined (__SH4_SINGLE__)) || defined (__linux__) !! !! Steve Chamberlain !! sac@cygnus.com @@ -1369,13 +1368,12 @@ div0: rts ENDFUNC(GLOBAL(sdivsi3)) #endif /* ! __SHMEDIA__ */ -#endif /* ! __SH4__ */ #endif #ifdef L_udivsi3_i4 .title "SH DIVIDE" !! 4 byte integer Divide code for the Renesas SH -#ifdef __SH4__ +#if defined (__SH4__) || defined (__SH2A__) !! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4, !! and t bit @@ -1417,7 +1415,7 @@ L1: .double 2147483648 ENDFUNC(GLOBAL(udivsi3_i4)) -#elif defined (__SH5__) && ! defined (__SH4_NOFPU__) +#elif defined (__SH5__) && ! defined (__SH4_NOFPU__) && ! defined (__SH2A_NOFPU__) #if ! __SH5__ || __SH5__ == 32 !! args in r4 and r5, result in fpul, clobber r20, r21, dr0, fr33 .mode SHmedia @@ -1438,7 +1436,7 @@ GLOBAL(udivsi3_i4): ENDFUNC(GLOBAL(udivsi3_i4)) #endif /* ! __SH5__ || __SH5__ == 32 */ -#elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) +#elif defined (__SH2A_SINGLE__) || defined (__SH2A_SINGLE_ONLY__) || defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) !! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4 .global GLOBAL(udivsi3_i4) @@ -1493,7 +1491,6 @@ L1: #ifdef L_udivsi3 /* __SH4_SINGLE_ONLY__ keeps this part for link compatibility with sh2e/sh3e code. */ -#if (! defined(__SH4__) && ! defined (__SH4_SINGLE__)) || defined (__linux__) !! args in r4 and r5, result in r0, clobbers r4, pr, and t bit .global GLOBAL(udivsi3) @@ -1688,7 +1685,6 @@ LOCAL(large_divisor): ENDFUNC(GLOBAL(udivsi3)) #endif /* ! __SHMEDIA__ */ -#endif /* __SH4__ */ #endif /* L_udivsi3 */ #ifdef L_udivdi3 diff --git a/libgcc/config/vxlib-tls.c b/libgcc/config/vxlib-tls.c index 8f88c6f2ab4..5c696034b37 100644 --- a/libgcc/config/vxlib-tls.c +++ b/libgcc/config/vxlib-tls.c @@ -102,6 +102,14 @@ extern void __gthread_set_tls_data (void *data); extern void __gthread_enter_tls_dtor_context (void); extern void __gthread_leave_tls_dtor_context (void); +#ifndef __RTP__ + +extern void *__gthread_get_tsd_data (WIND_TCB *tcb); +extern void __gthread_set_tsd_data (WIND_TCB *tcb, void *data); +extern void __gthread_enter_tsd_dtor_context (WIND_TCB *tcb); +extern void __gthread_leave_tsd_dtor_context (WIND_TCB *tcb); + +#endif /* __RTP__ */ /* This is a global structure which records all of the active keys. @@ -185,7 +193,7 @@ tls_delete_hook (void *tcb ATTRIBUTE_UNUSED) #ifdef __RTP__ __gthread_leave_tls_dtor_context (); #else - __gthread_leave_tsd_dtor_context (); + __gthread_leave_tsd_dtor_context (tcb); #endif #ifdef __RTP__ diff --git a/libgcc/unwind-dw2.c b/libgcc/unwind-dw2.c index 101a828b556..80de5ab1894 100644 --- a/libgcc/unwind-dw2.c +++ b/libgcc/unwind-dw2.c @@ -1128,11 +1128,12 @@ execute_cfa_program (const unsigned char *insn_ptr, case DW_CFA_GNU_window_save: /* ??? Hardcoded for SPARC register window configuration. */ - for (reg = 16; reg < 32; ++reg) - { - fs->regs.reg[reg].how = REG_SAVED_OFFSET; - fs->regs.reg[reg].loc.offset = (reg - 16) * sizeof (void *); - } + if (DWARF_FRAME_REGISTERS >= 32) + for (reg = 16; reg < 32; ++reg) + { + fs->regs.reg[reg].how = REG_SAVED_OFFSET; + fs->regs.reg[reg].loc.offset = (reg - 16) * sizeof (void *); + } break; case DW_CFA_GNU_args_size: |