From: Georg-Johann Lay Date: Wed, 2 May 2012 17:23:06 +0000 (+0000) Subject: backport: re PR target/45263 (registers used in __do_global_ctors can get clobbered) X-Git-Tag: releases/gcc-4.5.4~118 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa2bdbc8451f978d816ce40b5901af114fe1398d;p=thirdparty%2Fgcc.git backport: re PR target/45263 (registers used in __do_global_ctors can get clobbered) Backport from 2011-05-30 4.6-branch r174427. PR target/45263 * config/avr/libgcc.S (__do_global_ctors, __do_global_dtors): Don't use r20 around calls of __tablejump_elpm__ From-SVN: r187058 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 994658fdaf5a..ae5c76c90a98 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-05-02 Georg-Johann Lay + + Backport from 2011-05-30 4.6-branch r174427. + + PR target/45263 + * config/avr/libgcc.S (__do_global_ctors, __do_global_dtors): + Don't use r20 around calls of __tablejump_elpm__ + 2012-05-02 Georg-Johann Lay Backport from 2011-07-11 4.6-branch r176143 diff --git a/gcc/config/avr/libgcc.S b/gcc/config/avr/libgcc.S index 07a50b20e310..571a0243de20 100644 --- a/gcc/config/avr/libgcc.S +++ b/gcc/config/avr/libgcc.S @@ -791,22 +791,22 @@ __do_clear_bss: #if defined(__AVR_HAVE_RAMPZ__) __do_global_ctors: ldi r17, hi8(__ctors_start) - ldi r16, hh8(__ctors_start) ldi r28, lo8(__ctors_end) ldi r29, hi8(__ctors_end) - ldi r20, hh8(__ctors_end) + ldi r16, hh8(__ctors_end) rjmp .L__do_global_ctors_start .L__do_global_ctors_loop: sbiw r28, 2 - sbc r20, __zero_reg__ + sbc r16, __zero_reg__ mov_h r31, r29 mov_l r30, r28 - out __RAMPZ__, r20 + out __RAMPZ__, r16 XCALL __tablejump_elpm__ .L__do_global_ctors_start: cpi r28, lo8(__ctors_start) cpc r29, r17 - cpc r20, r16 + ldi r24, hh8(__ctors_start) + cpc r16, r24 brne .L__do_global_ctors_loop #else __do_global_ctors: @@ -832,22 +832,22 @@ __do_global_ctors: #if defined(__AVR_HAVE_RAMPZ__) __do_global_dtors: ldi r17, hi8(__dtors_end) - ldi r16, hh8(__dtors_end) ldi r28, lo8(__dtors_start) ldi r29, hi8(__dtors_start) - ldi r20, hh8(__dtors_start) + ldi r16, hh8(__dtors_start) rjmp .L__do_global_dtors_start .L__do_global_dtors_loop: sbiw r28, 2 - sbc r20, __zero_reg__ + sbc r16, __zero_reg__ mov_h r31, r29 mov_l r30, r28 - out __RAMPZ__, r20 + out __RAMPZ__, r16 XCALL __tablejump_elpm__ .L__do_global_dtors_start: cpi r28, lo8(__dtors_end) cpc r29, r17 - cpc r20, r16 + ldi r24, hh8(__dtors_end) + cpc r16, r24 brne .L__do_global_dtors_loop #else __do_global_dtors: