OSDN Git Service

* unwind-dw2.c (_Unwind_DebugHook): New function.
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 May 2009 23:12:21 +0000 (23:12 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 May 2009 23:12:21 +0000 (23:12 +0000)
(uw_install_context): Call _Unwind_DebugHook.

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

gcc/ChangeLog
gcc/unwind-dw2.c

index 306b3f8..6920b5a 100644 (file)
@@ -1,5 +1,10 @@
 2009-05-27  Tom Tromey  <tromey@redhat.com>
 
+       * unwind-dw2.c (_Unwind_DebugHook): New function.
+       (uw_install_context): Call _Unwind_DebugHook.
+
+2009-05-27  Tom Tromey  <tromey@redhat.com>
+
        * system.h (CONST_CAST2): Use C++ const_cast when compiled as C++
 
 2009-05-27  Ian Lance Taylor  <iant@google.com>
index dd3dd54..68a1a28 100644 (file)
@@ -1473,18 +1473,31 @@ uw_init_context_1 (struct _Unwind_Context *context,
   context->ra = __builtin_extract_return_addr (outer_ra);
 }
 
+static void _Unwind_DebugHook (void *, void *) __attribute__ ((__noinline__));
+
+/* This function is called during unwinding.  It is intended as a hook
+   for a debugger to intercept exceptions.  CFA is the CFA of the
+   target frame.  HANDLER is the PC to which control will be
+   transferred.  */
+static void
+_Unwind_DebugHook (void *cfa __attribute__ ((__unused__)),
+                  void *handler __attribute__ ((__unused__)))
+{
+  asm ("");
+}
 
 /* Install TARGET into CURRENT so that we can return to it.  This is a
    macro because __builtin_eh_return must be invoked in the context of
    our caller.  */
 
-#define uw_install_context(CURRENT, TARGET)                             \
-  do                                                                    \
-    {                                                                   \
-      long offset = uw_install_context_1 ((CURRENT), (TARGET));                 \
-      void *handler = __builtin_frob_return_addr ((TARGET)->ra);        \
-      __builtin_eh_return (offset, handler);                            \
-    }                                                                   \
+#define uw_install_context(CURRENT, TARGET)                            \
+  do                                                                   \
+    {                                                                  \
+      long offset = uw_install_context_1 ((CURRENT), (TARGET));                \
+      void *handler = __builtin_frob_return_addr ((TARGET)->ra);       \
+      _Unwind_DebugHook ((TARGET)->cfa, handler);                      \
+      __builtin_eh_return (offset, handler);                           \
+    }                                                                  \
   while (0)
 
 static long