summaryrefslogtreecommitdiff
path: root/debian/patches/libjava-sjlj.diff
blob: f16f695962de372947c35e56ccd1ea7a05ad5308 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# DP: Don't try to use _Unwind_Backtrace on SJLJ targets.
# DP: See bug #387875, #388505, GCC PR 29206.

---
 libjava/sysdep/generic/backtrace.h |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

Index: b/src/libjava/sysdep/generic/backtrace.h
===================================================================
--- a/src/libjava/sysdep/generic/backtrace.h
+++ b/src/libjava/sysdep/generic/backtrace.h
@@ -13,6 +13,20 @@ details.  */
 
 #include <java-stack.h>
 
+#ifdef SJLJ_EXCEPTIONS
+
+#undef _Unwind_GetIPInfo
+#define _Unwind_GetIPInfo(ctx,ip_before_insn) \
+  (abort (), (void) (ctx), *ip_before_insn = 1, 0)
+
+#undef _Unwind_GetRegionStart
+#define _Unwind_GetRegionStart(ctx) \
+  (abort (), (void) (ctx), 0)
+
+#undef _Unwind_Backtrace
+#define _Unwind_Backtrace(trace_fn,state_ptr) \
+  (fallback_backtrace (trace_fn, state_ptr))
+
 /* Unwind through the call stack calling TRACE_FN with STATE for every stack
    frame.  Returns the reason why the unwinding was stopped.  */
 _Unwind_Reason_Code
@@ -20,4 +34,7 @@ fallback_backtrace (_Unwind_Trace_Fn, _J
 {
   return _URC_NO_REASON;
 }
+
+#endif /* SJLJ_EXCEPTIONS */
+
 #endif