[llvm] r287478 - ExceptionDemo: prefer headers over redeclarations

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Sat Nov 19 18:36:36 PST 2016


Author: compnerd
Date: Sat Nov 19 20:36:36 2016
New Revision: 287478

URL: http://llvm.org/viewvc/llvm-project?rev=287478&view=rev
Log:
ExceptionDemo: prefer headers over redeclarations

Rather than redeclaring the interfaces for exceptions, prefer using the
`unwind.h` header.  This is vended by at least gcc and clang, and can also be
found by an external unwinding library (e.g. libunwind).  Doing this simplifies
the example to the exception handling itself.  Minor tweaks are the result of
_Unwind_Context_t not being defined, which is just a typedef for struct
_Unwind_Context *.  NFC.

Modified:
    llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp

Modified: llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp?rev=287478&r1=287477&r2=287478&view=diff
==============================================================================
--- llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp (original)
+++ llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp Sat Nov 19 20:36:36 2016
@@ -79,64 +79,12 @@
 
 #include <inttypes.h>
 
+#include <unwind.h>
+
 #ifndef USE_GLOBAL_STR_CONSTS
 #define USE_GLOBAL_STR_CONSTS true
 #endif
 
-// System C++ ABI unwind types from:
-//     http://mentorembedded.github.com/cxx-abi/abi-eh.html (v1.22)
-
-extern "C" {
-
-  typedef enum {
-    _URC_NO_REASON = 0,
-    _URC_FOREIGN_EXCEPTION_CAUGHT = 1,
-    _URC_FATAL_PHASE2_ERROR = 2,
-    _URC_FATAL_PHASE1_ERROR = 3,
-    _URC_NORMAL_STOP = 4,
-    _URC_END_OF_STACK = 5,
-    _URC_HANDLER_FOUND = 6,
-    _URC_INSTALL_CONTEXT = 7,
-    _URC_CONTINUE_UNWIND = 8
-  } _Unwind_Reason_Code;
-
-  typedef enum {
-    _UA_SEARCH_PHASE = 1,
-    _UA_CLEANUP_PHASE = 2,
-    _UA_HANDLER_FRAME = 4,
-    _UA_FORCE_UNWIND = 8,
-    _UA_END_OF_STACK = 16
-  } _Unwind_Action;
-
-  struct _Unwind_Exception;
-
-  typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code,
-                                                struct _Unwind_Exception *);
-
-  struct _Unwind_Exception {
-    uint64_t exception_class;
-    _Unwind_Exception_Cleanup_Fn exception_cleanup;
-
-    uintptr_t private_1;
-    uintptr_t private_2;
-
-    // @@@ The IA-64 ABI says that this structure must be double-word aligned.
-    //  Taking that literally does not make much sense generically.  Instead
-    //  we provide the maximum alignment required by any type for the machine.
-  } __attribute__((__aligned__));
-
-  struct _Unwind_Context;
-  typedef struct _Unwind_Context *_Unwind_Context_t;
-
-  extern const uint8_t *_Unwind_GetLanguageSpecificData (_Unwind_Context_t c);
-  extern uintptr_t _Unwind_GetGR (_Unwind_Context_t c, int i);
-  extern void _Unwind_SetGR (_Unwind_Context_t c, int i, uintptr_t n);
-  extern void _Unwind_SetIP (_Unwind_Context_t, uintptr_t new_value);
-  extern uintptr_t _Unwind_GetIP (_Unwind_Context_t context);
-  extern uintptr_t _Unwind_GetRegionStart (_Unwind_Context_t context);
-
-} // extern "C"
-
 //
 // Example types
 //
@@ -642,12 +590,11 @@ static bool handleActionValue(int64_t *r
 /// @param exceptionObject thrown _Unwind_Exception instance.
 /// @param context unwind system context
 /// @returns minimally supported unwinding control indicator
-static _Unwind_Reason_Code handleLsda(int version,
-                                      const uint8_t *lsda,
+static _Unwind_Reason_Code handleLsda(int version, const uint8_t *lsda,
                                       _Unwind_Action actions,
-                                      uint64_t exceptionClass,
-                                    struct _Unwind_Exception *exceptionObject,
-                                      _Unwind_Context_t context) {
+                                      _Unwind_Exception_Class exceptionClass,
+                                      struct _Unwind_Exception *exceptionObject,
+                                      struct _Unwind_Context *context) {
   _Unwind_Reason_Code ret = _URC_CONTINUE_UNWIND;
 
   if (!lsda)
@@ -826,11 +773,10 @@ static _Unwind_Reason_Code handleLsda(in
 /// @param exceptionObject thrown _Unwind_Exception instance.
 /// @param context unwind system context
 /// @returns minimally supported unwinding control indicator
-_Unwind_Reason_Code ourPersonality(int version,
-                                   _Unwind_Action actions,
-                                   uint64_t exceptionClass,
+_Unwind_Reason_Code ourPersonality(int version, _Unwind_Action actions,
+                                   _Unwind_Exception_Class exceptionClass,
                                    struct _Unwind_Exception *exceptionObject,
-                                   _Unwind_Context_t context) {
+                                   struct _Unwind_Context *context) {
 #ifdef DEBUG
   fprintf(stderr,
           "We are in ourPersonality(...):actions is <%d>.\n",




More information about the llvm-commits mailing list