]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/45807 (Lying eh_frame r2 save info causes crashes with static libgcc_eh...
authorAlan Modra <amodra@gmail.com>
Fri, 1 Oct 2010 03:23:46 +0000 (12:53 +0930)
committerAlan Modra <amodra@gcc.gnu.org>
Fri, 1 Oct 2010 03:23:46 +0000 (12:53 +0930)
PR target/45807
* config/rs6000/rs6000.c (rs6000_emit_prologue): Properly sign
extend toc_restore_insn.

From-SVN: r164825

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 056d07abcde6a721d75774df32fa3b9bbaee5b6b..ea4f385f5d78c5abd626b4dfdd83c0ca4254bec8 100644 (file)
@@ -1,3 +1,9 @@
+2010-10-01  Alan Modra  <amodra@gmail.com>
+
+       PR target/45807
+       * config/rs6000/rs6000.c (rs6000_emit_prologue): Properly sign
+       extend toc_restore_insn.
+
 2010-09-30  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/43959
index 6399cab0d3159fd31c7fc6250c46836ef9f3dc3b..0b058d396efb9e02e587a539c7a1b8ad5c6f424f 100644 (file)
@@ -20234,8 +20234,8 @@ rs6000_emit_prologue (void)
         be updated if we arrived at this function via a plt call or
         toc adjusting stub.  */
       emit_move_insn (tmp_reg_si, gen_rtx_MEM (SImode, tmp_reg));
-      toc_restore_insn = ((TARGET_32BIT ? 0x80410014 : 0xE8410028)
-                         ^ 0x80000000) - 0x80000000;
+      toc_restore_insn = TARGET_32BIT ? 0x80410014 : 0xE8410028;
+      toc_restore_insn = (toc_restore_insn ^ 0x80000000) - 0x80000000;
       emit_insn (gen_xorsi3 (tmp_reg_si, tmp_reg_si,
                             GEN_INT (toc_restore_insn & ~0xffff)));
       compare_result = gen_rtx_REG (CCUNSmode, CR0_REGNO);