OSDN Git Service

gcc/
authorcarlos <carlos@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Dec 2006 17:25:36 +0000 (17:25 +0000)
committercarlos <carlos@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Dec 2006 17:25:36 +0000 (17:25 +0000)
2006-12-04  Carlos O'Donell  <carlos@codesourcery.com>

* config/arm/unwind-arm.c: Adjust __cxa_type_match declaration.
(__gnu_unwind_pr_common): Pass is_reference to __cxa_type_match.

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

gcc/ChangeLog
gcc/config/arm/unwind-arm.c

index 8e51deb..a36a042 100644 (file)
@@ -1,3 +1,8 @@
+2006-12-04  Carlos O'Donell  <carlos@codesourcery.com>
+
+       * config/arm/unwind-arm.c: Adjust __cxa_type_match declaration.
+       (__gnu_unwind_pr_common): Pass is_reference to __cxa_type_match.
+
 2006-12-04  Andrew MacLeod  <amacleod@redhat.com>
 
        * tree-outof-ssa.c (coalesce_ssa_name): Use calculate_live_ranges.
index 6b7e2dd..9b7229e 100644 (file)
@@ -41,6 +41,7 @@ void __attribute__((weak)) __cxa_call_unexpected(_Unwind_Control_Block *ucbp);
 bool __attribute__((weak)) __cxa_begin_cleanup(_Unwind_Control_Block *ucbp);
 bool __attribute__((weak)) __cxa_type_match(_Unwind_Control_Block *ucbp,
                                            const type_info *rttip,
+                                           bool is_reference,
                                            void **matched_object);
 
 _Unwind_Ptr __attribute__((weak))
@@ -847,6 +848,7 @@ __gnu_unwind_pr_common (_Unwind_State state,
                    {
                      /* Check for a barrier.  */
                      _uw rtti;
+                     bool is_reference = (data[0] & uint32_highbit) != 0;
                      void *matched;
 
                      /* Check for no-throw areas.  */
@@ -860,6 +862,7 @@ __gnu_unwind_pr_common (_Unwind_State state,
                          /* Match a catch specification.  */
                          rtti = _Unwind_decode_target2 ((_uw) &data[1]);
                          if (!__cxa_type_match (ucbp, (type_info *) rtti,
+                                                is_reference,
                                                 &matched))
                            matched = (void *)0;
                        }
@@ -907,7 +910,7 @@ __gnu_unwind_pr_common (_Unwind_State state,
                        {
                          matched = (void *)(ucbp + 1);
                          rtti = _Unwind_decode_target2 ((_uw) &data[i + 1]);
-                         if (__cxa_type_match (ucbp, (type_info *) rtti,
+                         if (__cxa_type_match (ucbp, (type_info *) rtti, 0,
                                                &matched))
                            break;
                        }