[PATCH] D42242: Make libc++abi work with gcc's ARM unwind library

Benjamin Buch via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 24 04:16:33 PST 2018


bebuch requested changes to this revision.
bebuch added a comment.
This revision now requires changes to proceed.

I get some new errors:

  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp: In function ‘void __cxxabiv1::scan_eh_tab(__cxxabiv1::{anonymous}::scan_results&, _Unwind_Action, bool, _Unwind_Control_Block*, _Unwind_Context*)’:
  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp:564:22: error: ‘_URC_FATAL_PHASE1_ERROR’ was not declared in this scope
       results.reason = _URC_FATAL_PHASE1_ERROR;
                        ^
  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp:584:30: error: ‘_URC_FATAL_PHASE2_ERROR’ was not declared in this scope
               results.reason = _URC_FATAL_PHASE2_ERROR;
                                ^
  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp: In function ‘_Unwind_Reason_Code __cxxabiv1::__gxx_personality_v0(_Unwind_State, _Unwind_Control_Block*, _Unwind_Context*)’:
  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp:1074:16: error: ‘_URC_FATAL_PHASE1_ERROR’ was not declared in this scope
           return _URC_FATAL_PHASE1_ERROR;
                  ^
  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp:1087:11: error: invalid conversion from ‘int’ to ‘_Unwind_State’ [-fpermissive]
       state &= ~_US_FORCE_UNWIND;
             ^
  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp:1090:12: warning: enumeration value ‘_US_ACTION_MASK’ not handled in switch [-Wswitch]
       switch (state) {
              ^
  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp:1090:12: warning: enumeration value ‘_US_FORCE_UNWIND’ not handled in switch [-Wswitch]
  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp:1090:12: warning: enumeration value ‘_US_END_OF_STACK’ not handled in switch [-Wswitch]
  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp:1167:12: error: ‘_URC_FATAL_PHASE1_ERROR’ was not declared in this scope
       return _URC_FATAL_PHASE1_ERROR;
              ^
  /home/pi/projects/llvm/llvm/projects/libcxxabi/src/cxa_personality.cpp:1168:1: error: control reaches end of non-void function [-Werror=return-type]
   }
   ^

`_URC_FATAL_PHASE1_ERROR` and `_URC_FATAL_PHASE2_ERROR` should be `enum` values of `_Unwind_Reason_Code`, but this is defined in `unwind-arm-common.h` as:

  typedef enum
    {
      _URC_OK = 0,       /* operation completed successfully */
      _URC_FOREIGN_EXCEPTION_CAUGHT = 1,
      _URC_END_OF_STACK = 5,
      _URC_HANDLER_FOUND = 6,
      _URC_INSTALL_CONTEXT = 7,
      _URC_CONTINUE_UNWIND = 8,
      _URC_FAILURE = 9   /* unspecified failure of some kind */
    }
  _Unwind_Reason_Code;

In other unwind libraries these values are defined: https://github.com/llvm-mirror/libunwind/blob/master/include/unwind.h
In the arm version it isn't: https://github.com/gcc-mirror/gcc/blob/gcc-4_9-branch/gcc/ginclude/unwind-arm-common.h


https://reviews.llvm.org/D42242





More information about the cfe-commits mailing list