OSDN Git Service

* libgcc2.c (find_exception_handler): Subtract one from our PC when
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Sep 1997 01:23:34 +0000 (01:23 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Sep 1997 01:23:34 +0000 (01:23 +0000)
  looking for a handler, to avoid hitting the beginning of the next
  region.

* except.c (expand_builtin_set_return_addr_reg): Use force_operand.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@15534 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/except.c
gcc/libgcc2.c

index 5331d7d..1d12a8f 100644 (file)
@@ -1,3 +1,11 @@
+Wed Sep 17 18:19:53 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * libgcc2.c (find_exception_handler): Subtract one from our PC when
+       looking for a handler, to avoid hitting the beginning of the next
+       region.
+
+       * except.c (expand_builtin_set_return_addr_reg): Use force_operand.
+
 Wed Sep 17 18:33:59 1997  Jeffrey A Law  (law@cygnus.com)
 
        * mips/abi64.h (LONG_MAX_SPEC): Define.
index 47cae20..7929e9c 100644 (file)
@@ -2207,13 +2207,16 @@ void
 expand_builtin_set_return_addr_reg (addr_tree)
      tree addr_tree;
 {
+  rtx tmp;
   rtx ra = expand_builtin_return_addr (BUILT_IN_RETURN_ADDRESS,
                                       0, hard_frame_pointer_rtx);
 
   if (GET_CODE (ra) != REG || REGNO (ra) >= FIRST_PSEUDO_REGISTER)
     return;
 
-  emit_move_insn (ra, expand_builtin_frob_return_addr (addr_tree));
+  tmp = force_operand (expand_builtin_frob_return_addr (addr_tree), ra);
+  if (tmp != ra)
+    emit_move_insn (ra, tmp);
 }
 
 /* Choose two registers for communication between the main body of
index 34a6c71..6b3b7b4 100644 (file)
@@ -3337,6 +3337,10 @@ find_exception_handler (void *pc, exception_table *table)
       int pos;
       int best = -1;
 
+      /* We subtract 1 from PC to avoid hitting the beginning of the next
+        region.  */
+      --pc;
+
       /* We can't do a binary search because the table isn't guaranteed
         to be sorted from function to function.  */
       for (pos = 0; table[pos].exception_handler != (void *) -1; ++pos)