Message ID | 1402481995-12749-7-git-send-email-charles.baylis@linaro.org |
---|---|
State | New |
Headers | show |
On 11/06/14 11:19, Charles Baylis wrote: > 2014-05-22 Charles Baylis <charles.baylis@linaro.org> > > * config/arm/bpabi.S (__aeabi_ldivmod, __aeabi_uldivmod, > push_for_divide, pop_for_divide): Use .cfi_* directives for DWARF > annotations. Fix DWARF information. OK. > --- > libgcc/config/arm/bpabi.S | 21 ++++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git a/libgcc/config/arm/bpabi.S b/libgcc/config/arm/bpabi.S > index c044167..959ecb1 100644 > --- a/libgcc/config/arm/bpabi.S > +++ b/libgcc/config/arm/bpabi.S > @@ -22,6 +22,8 @@ > see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > <http://www.gnu.org/licenses/>. */ > > + .cfi_sections .debug_frame > + > #ifdef __ARM_EABI__ > /* Some attributes that are common to all routines in this file. */ > /* Tag_ABI_align_needed: This code does not require 8-byte > @@ -145,7 +147,8 @@ ARM_FUNC_START aeabi_ulcmp > sub sp, sp, #8 > do_push {sp, lr} > #endif > -98: cfi_push 98b - \fname, 0xe, -0xc, 0x10 > + .cfi_adjust_cfa_offset 16 > + .cfi_offset 14, -12 > .endm > > /* restore stack */ > @@ -158,6 +161,8 @@ ARM_FUNC_START aeabi_ulcmp > add sp, sp, #8 > do_pop {r2, r3} > #endif > + .cfi_restore 14 > + .cfi_adjust_cfa_offset 0 > .endm > > #ifdef L_aeabi_ldivmod > @@ -171,7 +176,7 @@ ARM_FUNC_START aeabi_ulcmp > r2:r3 remainder > */ > ARM_FUNC_START aeabi_ldivmod > - cfi_start __aeabi_ldivmod, LSYM(Lend_aeabi_ldivmod) > + .cfi_startproc > test_div_by_zero signed > > push_for_divide __aeabi_ldivmod > @@ -181,16 +186,19 @@ ARM_FUNC_START aeabi_ldivmod > blt 2f > /* arguments in (r0:r1), (r2:r3) and *sp */ > bl SYM(__udivmoddi4) __PLT__ > + .cfi_remember_state > pop_for_divide > RET > > 1: /* xxh:xxl is negative */ > + .cfi_restore_state > negs xxl, xxl > sbc xxh, xxh, xxh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ > cmp yyh, #0 > blt 3f > /* arguments in (r0:r1), (r2:r3) and *sp */ > bl SYM(__udivmoddi4) __PLT__ > + .cfi_remember_state > pop_for_divide > negs xxl, xxl > sbc xxh, xxh, xxh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ > @@ -199,16 +207,19 @@ ARM_FUNC_START aeabi_ldivmod > RET > > 2: /* only yyh:yyl is negative */ > + .cfi_restore_state > negs yyl, yyl > sbc yyh, yyh, yyh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ > /* arguments in (r0:r1), (r2:r3) and *sp */ > bl SYM(__udivmoddi4) __PLT__ > + .cfi_remember_state > pop_for_divide > negs xxl, xxl > sbc xxh, xxh, xxh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ > RET > > 3: /* both xxh:xxl and yyh:yyl are negative */ > + .cfi_restore_state > negs yyl, yyl > sbc yyh, yyh, yyh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ > /* arguments in (r0:r1), (r2:r3) and *sp */ > @@ -218,7 +229,7 @@ ARM_FUNC_START aeabi_ldivmod > sbc yyh, yyh, yyh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ > RET > > - cfi_end LSYM(Lend_aeabi_ldivmod) > + .cfi_endproc > > #endif /* L_aeabi_ldivmod */ > > @@ -233,7 +244,7 @@ ARM_FUNC_START aeabi_ldivmod > r2:r3 remainder > */ > ARM_FUNC_START aeabi_uldivmod > - cfi_start __aeabi_uldivmod, LSYM(Lend_aeabi_uldivmod) > + .cfi_startproc > test_div_by_zero unsigned > > push_for_divide __aeabi_uldivmod > @@ -241,7 +252,7 @@ ARM_FUNC_START aeabi_uldivmod > bl SYM(__udivmoddi4) __PLT__ > pop_for_divide > RET > - cfi_end LSYM(Lend_aeabi_uldivmod) > + .cfi_endproc > > #endif /* L_aeabi_divmod */ > >
diff --git a/libgcc/config/arm/bpabi.S b/libgcc/config/arm/bpabi.S index c044167..959ecb1 100644 --- a/libgcc/config/arm/bpabi.S +++ b/libgcc/config/arm/bpabi.S @@ -22,6 +22,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ + .cfi_sections .debug_frame + #ifdef __ARM_EABI__ /* Some attributes that are common to all routines in this file. */ /* Tag_ABI_align_needed: This code does not require 8-byte @@ -145,7 +147,8 @@ ARM_FUNC_START aeabi_ulcmp sub sp, sp, #8 do_push {sp, lr} #endif -98: cfi_push 98b - \fname, 0xe, -0xc, 0x10 + .cfi_adjust_cfa_offset 16 + .cfi_offset 14, -12 .endm /* restore stack */ @@ -158,6 +161,8 @@ ARM_FUNC_START aeabi_ulcmp add sp, sp, #8 do_pop {r2, r3} #endif + .cfi_restore 14 + .cfi_adjust_cfa_offset 0 .endm #ifdef L_aeabi_ldivmod @@ -171,7 +176,7 @@ ARM_FUNC_START aeabi_ulcmp r2:r3 remainder */ ARM_FUNC_START aeabi_ldivmod - cfi_start __aeabi_ldivmod, LSYM(Lend_aeabi_ldivmod) + .cfi_startproc test_div_by_zero signed push_for_divide __aeabi_ldivmod @@ -181,16 +186,19 @@ ARM_FUNC_START aeabi_ldivmod blt 2f /* arguments in (r0:r1), (r2:r3) and *sp */ bl SYM(__udivmoddi4) __PLT__ + .cfi_remember_state pop_for_divide RET 1: /* xxh:xxl is negative */ + .cfi_restore_state negs xxl, xxl sbc xxh, xxh, xxh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ cmp yyh, #0 blt 3f /* arguments in (r0:r1), (r2:r3) and *sp */ bl SYM(__udivmoddi4) __PLT__ + .cfi_remember_state pop_for_divide negs xxl, xxl sbc xxh, xxh, xxh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ @@ -199,16 +207,19 @@ ARM_FUNC_START aeabi_ldivmod RET 2: /* only yyh:yyl is negative */ + .cfi_restore_state negs yyl, yyl sbc yyh, yyh, yyh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ /* arguments in (r0:r1), (r2:r3) and *sp */ bl SYM(__udivmoddi4) __PLT__ + .cfi_remember_state pop_for_divide negs xxl, xxl sbc xxh, xxh, xxh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ RET 3: /* both xxh:xxl and yyh:yyl are negative */ + .cfi_restore_state negs yyl, yyl sbc yyh, yyh, yyh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ /* arguments in (r0:r1), (r2:r3) and *sp */ @@ -218,7 +229,7 @@ ARM_FUNC_START aeabi_ldivmod sbc yyh, yyh, yyh, lsl #1 /* Thumb-2 has no RSC, so use X - 2X */ RET - cfi_end LSYM(Lend_aeabi_ldivmod) + .cfi_endproc #endif /* L_aeabi_ldivmod */ @@ -233,7 +244,7 @@ ARM_FUNC_START aeabi_ldivmod r2:r3 remainder */ ARM_FUNC_START aeabi_uldivmod - cfi_start __aeabi_uldivmod, LSYM(Lend_aeabi_uldivmod) + .cfi_startproc test_div_by_zero unsigned push_for_divide __aeabi_uldivmod @@ -241,7 +252,7 @@ ARM_FUNC_START aeabi_uldivmod bl SYM(__udivmoddi4) __PLT__ pop_for_divide RET - cfi_end LSYM(Lend_aeabi_uldivmod) + .cfi_endproc #endif /* L_aeabi_divmod */