aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2012-01-19 11:39:05 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2012-01-19 11:39:05 +0000
commitf5f18bfde0e46c154cf0207c895f917d0b50d53f (patch)
tree05e2dad751c7e723e13bd7a913218d1fd359e498
parentb0f9dd22bf469028b2c40eab60ad1019c3e6089d (diff)
Extend unwind.h with the ARM unwinder interface.
These declarations come from the sample code in the "Exception Handling ABI for the ARM Architecture" document. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148469 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Headers/unwind.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
index 773f3e8093..cef20cc214 100644
--- a/lib/Headers/unwind.h
+++ b/lib/Headers/unwind.h
@@ -55,7 +55,42 @@ typedef enum {
_URC_CONTINUE_UNWIND = 8
} _Unwind_Reason_Code;
+
+#ifdef __arm__
+
+typedef enum {
+ _UVRSC_CORE = 0, /* integer register */
+ _UVRSC_VFP = 1, /* vfp */
+ _UVRSC_WMMXD = 3, /* Intel WMMX data register */
+ _UVRSC_WMMXC = 4 /* Intel WMMX control register */
+} _Unwind_VRS_RegClass;
+
+typedef enum {
+ _UVRSD_UINT32 = 0,
+ _UVRSD_VFPX = 1,
+ _UVRSD_UINT64 = 3,
+ _UVRSD_FLOAT = 4,
+ _UVRSD_DOUBLE = 5
+} _Unwind_VRS_DataRepresentation;
+
+typedef enum {
+ _UVRSR_OK = 0,
+ _UVRSR_NOT_IMPLEMENTED = 1,
+ _UVRSR_FAILED = 2
+} _Unwind_VRS_Result;
+
+_Unwind_VRS_Result _Unwind_VRS_Get(_Unwind_Context *context,
+ _Unwind_VRS_RegClass regclass,
+ uint32_t regno,
+ _Unwind_VRS_DataRepresentation representation,
+ void *valuep);
+
+#else
+
uintptr_t _Unwind_GetIP(struct _Unwind_Context* context);
+
+#endif
+
typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)(struct _Unwind_Context*, void*);
_Unwind_Reason_Code _Unwind_Backtrace(_Unwind_Trace_Fn, void*);