[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