Module Name: src
Committed By: joerg
Date: Tue Feb 17 21:02:33 UTC 2015
Modified Files:
src/sys/lib/libunwind: libunwind.cxx unwind.h
Log Message:
Provide _Unwind_Find_FDE for libgcc_s compatibility.
To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/lib/libunwind/libunwind.cxx
cvs rdiff -u -r1.2 -r1.3 src/sys/lib/libunwind/unwind.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/lib/libunwind/libunwind.cxx
diff -u src/sys/lib/libunwind/libunwind.cxx:1.8 src/sys/lib/libunwind/libunwind.cxx:1.9
--- src/sys/lib/libunwind/libunwind.cxx:1.8 Sun Apr 13 19:04:01 2014
+++ src/sys/lib/libunwind/libunwind.cxx Tue Feb 17 21:02:33 2015
@@ -11,6 +11,8 @@
//
//===----------------------------------------------------------------------===//
+#define _UNWIND_GCC_EXTENSIONS
+
#include <unwind.h>
#include "UnwindCursor.hpp"
@@ -329,6 +331,23 @@ void *_Unwind_FindEnclosingFunction(void
return info.end_ip ? (void *)info.start_ip : NULL;
}
+void *_Unwind_Find_FDE(void *pc, struct dwarf_eh_bases *bases) {
+ NativeUnwindRegisters registers;
+ ThisUnwindCursor cursor(registers, sThisAddressSpace);
+
+ unw_proc_info_t info;
+ cursor.setIP((uintptr_t)pc);
+ cursor.setInfoBasedOnIPRegister();
+
+ cursor.getInfo(&info);
+ if (info.end_ip == 0)
+ return NULL;
+ bases->tbase = 0; /* Not supported */
+ bases->dbase = (void *)info.data_base;
+ bases->func = (void *)info.start_ip;
+ return (void *)info.unwind_info;
+}
+
uintptr_t _Unwind_GetDataRelBase(struct _Unwind_Context *context) {
ThisUnwindCursor *cursor = (ThisUnwindCursor *)context;
unw_proc_info_t frameInfo;
Index: src/sys/lib/libunwind/unwind.h
diff -u src/sys/lib/libunwind/unwind.h:1.2 src/sys/lib/libunwind/unwind.h:1.3
--- src/sys/lib/libunwind/unwind.h:1.2 Thu Mar 13 00:28:20 2014
+++ src/sys/lib/libunwind/unwind.h Tue Feb 17 21:02:33 2015
@@ -56,6 +56,14 @@ typedef _Unwind_Reason_Code (*__personal
struct _Unwind_Exception *,
struct _Unwind_Context *);
+#ifdef _UNWIND_GCC_EXTENSIONS
+struct dwarf_eh_bases {
+ void *tbase;
+ void *dbase;
+ void *func;
+};
+#endif
+
__BEGIN_DECLS
_Unwind_Reason_Code _Unwind_RaiseException(struct _Unwind_Exception *);
@@ -85,6 +93,10 @@ void __register_frame_info(const void *,
void __deregister_frame(const void *);
void *__deregister_frame_info(const void *);
+#ifdef _UNWIND_GCC_EXTENSIONS
+void *_Unwind_Find_FDE(void *, struct dwarf_eh_bases *);
+#endif
+
__END_DECLS
#endif // _UNWIND_H