kernel/eka/compsupp/aehabi/unwinder.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/compsupp/aehabi/unwinder.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,141 @@
+/* unwinder.h
+ *
+ * Copyright 2002-2003 ARM Limited.
+ */
+/*
+  Licence
+  
+  1. Subject to the provisions of clause 2, ARM hereby grants to LICENSEE a 
+  perpetual, non-exclusive, nontransferable, royalty free, worldwide licence 
+  to use this Example Implementation of Exception Handling solely for the 
+  purpose of developing, having developed, manufacturing, having 
+  manufactured, offering to sell, selling, supplying or otherwise 
+  distributing products which comply with the Exception Handling ABI for the 
+  ARM Architecture specification. All other rights are reserved to ARM or its 
+  licensors.
+  
+  2. THIS EXAMPLE IMPLEMENTATION OF EXCEPTION HANDLING  IS PROVIDED "AS IS" 
+  WITH NO WARRANTIES EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED 
+  TO ANY WARRANTY OF SATISFACTORY QUALITY, MERCHANTABILITY, NONINFRINGEMENT 
+  OR FITNESS FOR A PARTICULAR PURPOSE.
+*/
+/*
+ * RCS $Revision: 1.7 $
+ * Checkin $Date: 2003/09/01 12:45:25 $
+ * Revising $Author: achapman $
+ */
+
+/* Language-independent unwinder header public defines */
+
+#ifndef UNWINDER_H
+#define UNWINDER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  typedef enum {
+    _URC_OK = 0,       /* operation completed successfully */
+    _URC_FOREIGN_EXCEPTION_CAUGHT = 1,
+    _URC_HANDLER_FOUND = 6,
+    _URC_INSTALL_CONTEXT = 7,
+    _URC_CONTINUE_UNWIND = 8,
+    _URC_FAILURE = 9   /* unspecified failure of some kind */
+  } _Unwind_Reason_Code;
+  
+  typedef enum {
+    _US_VIRTUAL_UNWIND_FRAME = 0,
+    _US_UNWIND_FRAME_STARTING = 1,
+    _US_UNWIND_FRAME_RESUME = 2
+  } _Unwind_State;
+  
+  typedef struct _Unwind_Control_Block _Unwind_Control_Block;
+  typedef struct _Unwind_Context _Unwind_Context;
+  typedef uint32_t _Unwind_EHT_Header;
+  
+  
+  /* UCB: */
+  
+  struct _Unwind_Control_Block {
+    char exception_class[8];
+    void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block *);
+    /* Unwinder cache, private fields for the unwinder's use */
+    struct {
+      uint32_t reserved1;     /* init reserved1 to 0, then don't touch */
+      uint32_t reserved2;
+      uint32_t reserved3;
+      uint32_t reserved4;
+      uint32_t reserved5;
+    } unwinder_cache;
+    /* Propagation barrier cache (valid after phase 1): */
+    struct {
+      uint32_t sp;
+      uint32_t bitpattern[5];
+    } barrier_cache;
+    /* Cleanup cache (preserved over cleanup): */
+    struct {
+      uint32_t bitpattern[4];
+    } cleanup_cache;
+    /* Pr cache (for pr's benefit): */
+    struct {
+      uint32_t fnstart;             /* function start address */
+      _Unwind_EHT_Header *ehtp;     /* pointer to EHT entry header word */
+      uint32_t additional;          /* additional data */
+      uint32_t reserved1;
+    } pr_cache;
+    long long int :0;               /* Force alignment of next item to 8-byte boundary */
+  };
+  
+  /* Interface functions: */
+  
+  _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Control_Block *ucbp);
+  NORETURNDECL void _Unwind_Resume(_Unwind_Control_Block *ucbp);
+  void _Unwind_Complete(_Unwind_Control_Block *ucbp);
+
+  /* Virtual Register Set*/
+        
+  typedef enum {
+    _UVRSC_CORE = 0,      /* integer register */
+    _UVRSC_VFP = 1,       /* vfp */
+    _UVRSC_FPA = 2,       /* fpa */
+    _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_FPAX = 2,
+    _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_Set(_Unwind_Context *context,
+                                     _Unwind_VRS_RegClass regclass,
+                                     uint32_t regno,
+                                     _Unwind_VRS_DataRepresentation representation,
+                                     void *valuep);
+  
+  _Unwind_VRS_Result _Unwind_VRS_Get(_Unwind_Context *context,
+                                     _Unwind_VRS_RegClass regclass,
+                                     uint32_t regno,
+                                     _Unwind_VRS_DataRepresentation representation,
+                                     void *valuep);
+  
+  _Unwind_VRS_Result _Unwind_VRS_Pop(_Unwind_Context *context,
+                                     _Unwind_VRS_RegClass regclass,
+                                     uint32_t descriminator,
+                                     _Unwind_VRS_DataRepresentation representation);
+
+#ifdef __cplusplus
+}   /* extern "C" */
+#endif
+
+#endif /* defined UNWINDER_H */