I believe that it is merely a compile-time issue (warning), it doesn't prevent the use of compiler-rt on ARM as a libgcc replacement. I need to understand why my attempt to remove the `struct` modifier failed on one of the buildbots.
On Tue, Aug 22, 2017 at 2:45 PM, Evgenii Stepanov <eugeni.stepa...@gmail.com > wrote: > No. I don't have a easy way of reproducing this. > > On Tue, Aug 22, 2017 at 11:10 AM, Hans Wennborg <h...@chromium.org> wrote: > > Is there a bug filed? Since this was merged to 5.0.0, I'd like to know > > if we broke something and if that is something that needs to be fixed. > > > > On Tue, Aug 22, 2017 at 10:46 AM, Evgenii Stepanov > > <eugeni.stepa...@gmail.com> wrote: > >> As I understand, using compiler-rt as libgcc replacement on ARM is > >> currently broken because of this change, but I have not looked since > >> my last message. > >> > >> On Mon, Aug 21, 2017 at 4:56 PM, Hans Wennborg <h...@chromium.org> > wrote: > >>> Is there something we need for 5.0.0 here? > >>> > >>> On Sat, Aug 12, 2017 at 9:58 PM, Saleem Abdulrasool > >>> <compn...@compnerd.org> wrote: > >>>> Yeah, we should adjust that. Technically, it is > `_Unwind_Control_Block on > >>>> ARM EHABI. However, _Unwind_Exception is aliased to that, which is > why we > >>>> can use that in the personality routine. We should adjust the > sources for > >>>> the personality routine. > >>>> > >>>> On Fri, Aug 11, 2017 at 1:12 PM, Evgenii Stepanov > >>>> <eugeni.stepa...@gmail.com> wrote: > >>>>> > >>>>> Hi, > >>>>> > >>>>> I've noticed that the code in > >>>>> compiler-rt/lib/builtins/gcc_personality_v0.c refers to > >>>>> _Unwind_Exception as "struct _Unwind_Exception". With this change, it > >>>>> is not a struct anymore on ARM. Should that code be fixed, or is it a > >>>>> problem in this change? > >>>>> > >>>>> compiler-rt/lib/builtins/gcc_personality_v0.c:153:23: error: > >>>>> declaration of 'struct _Unwind_Exception' will not be visible outside > >>>>> of this function [-Werror,-Wvisibility] > >>>>> continueUnwind(struct _Unwind_Exception *exceptionObject, > >>>>> > >>>>> On Thu, Jul 27, 2017 at 9:46 AM, Hans Wennborg via cfe-commits > >>>>> <cfe-commits@lists.llvm.org> wrote: > >>>>> > Merged to 5.0 in r309290. > >>>>> > > >>>>> > On Wed, Jul 26, 2017 at 3:55 PM, Saleem Abdulrasool via cfe-commits > >>>>> > <cfe-commits@lists.llvm.org> wrote: > >>>>> >> Author: compnerd > >>>>> >> Date: Wed Jul 26 15:55:23 2017 > >>>>> >> New Revision: 309226 > >>>>> >> > >>>>> >> URL: http://llvm.org/viewvc/llvm-project?rev=309226&view=rev > >>>>> >> Log: > >>>>> >> Headers: improve ARM EHABI coverage of unwind.h > >>>>> >> > >>>>> >> Ensure that we define the `_Unwind_Control_Block` structure used > on ARM > >>>>> >> EHABI targets. This is needed for building libc++abi with the > unwind.h > >>>>> >> from the resource dir. A minor fallout of this is that we needed > to > >>>>> >> create a typedef for _Unwind_Exception to work across ARM EHABI > and > >>>>> >> non-EHABI targets. The structure definitions here are based > originally > >>>>> >> on the documentation from ARM under the "Exception Handling ABI > for the > >>>>> >> ARMĀ® Architecture" Section 7.2. They are then adjusted to more > closely > >>>>> >> reflect the definition in libunwind from LLVM. Those changes are > >>>>> >> compatible in layout but permit easier use in libc++abi and help > >>>>> >> maintain compatibility between libunwind and the compiler provided > >>>>> >> definition. > >>>>> >> > >>>>> >> Modified: > >>>>> >> cfe/trunk/lib/Headers/unwind.h > >>>>> >> > >>>>> >> Modified: cfe/trunk/lib/Headers/unwind.h > >>>>> >> URL: > >>>>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/ > unwind.h?rev=309226&r1=309225&r2=309226&view=diff > >>>>> >> > >>>>> >> ============================================================ > ================== > >>>>> >> --- cfe/trunk/lib/Headers/unwind.h (original) > >>>>> >> +++ cfe/trunk/lib/Headers/unwind.h Wed Jul 26 15:55:23 2017 > >>>>> >> @@ -76,7 +76,13 @@ typedef intptr_t _sleb128_t; > >>>>> >> typedef uintptr_t _uleb128_t; > >>>>> >> > >>>>> >> struct _Unwind_Context; > >>>>> >> +#if defined(__arm__) && !(defined(__USING_SJLJ_EXCEPTIONS__) || > >>>>> >> defined(__ARM_DWARF_EH___)) > >>>>> >> +struct _Unwind_Control_Block; > >>>>> >> +typedef struct _Unwind_Control_Block _Unwind_Exception; /* Alias > */ > >>>>> >> +#else > >>>>> >> struct _Unwind_Exception; > >>>>> >> +typedef struct _Unwind_Exception _Unwind_Exception; > >>>>> >> +#endif > >>>>> >> typedef enum { > >>>>> >> _URC_NO_REASON = 0, > >>>>> >> #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \ > >>>>> >> @@ -109,8 +115,42 @@ typedef enum { > >>>>> >> } _Unwind_Action; > >>>>> >> > >>>>> >> typedef void (*_Unwind_Exception_Cleanup_ > Fn)(_Unwind_Reason_Code, > >>>>> >> - struct > _Unwind_Exception > >>>>> >> *); > >>>>> >> + _Unwind_Exception > *); > >>>>> >> > >>>>> >> +#if defined(__arm__) && !(defined(__USING_SJLJ_EXCEPTIONS__) || > >>>>> >> defined(__ARM_DWARF_EH___)) > >>>>> >> +typedef struct _Unwind_Control_Block _Unwind_Control_Block; > >>>>> >> +typedef uint32_t _Unwind_EHT_Header; > >>>>> >> + > >>>>> >> +struct _Unwind_Control_Block { > >>>>> >> + uint64_t exception_class; > >>>>> >> + void (*exception_cleanup)(_Unwind_Reason_Code, > _Unwind_Control_Block > >>>>> >> *); > >>>>> >> + /* unwinder cache (private fields for the unwinder's use) */ > >>>>> >> + struct { > >>>>> >> + uint32_t reserved1; /* forced unwind stop function, 0 if not > >>>>> >> forced */ > >>>>> >> + uint32_t reserved2; /* personality routine */ > >>>>> >> + uint32_t reserved3; /* callsite */ > >>>>> >> + uint32_t reserved4; /* forced unwind stop argument */ > >>>>> >> + 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; > >>>>> >> + /* personality cache (for personality'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 */ > >>>>> >> +}; > >>>>> >> +#else > >>>>> >> struct _Unwind_Exception { > >>>>> >> _Unwind_Exception_Class exception_class; > >>>>> >> _Unwind_Exception_Cleanup_Fn exception_cleanup; > >>>>> >> @@ -120,16 +160,18 @@ struct _Unwind_Exception { > >>>>> >> * aligned". GCC has interpreted this to mean "use the maximum > >>>>> >> useful > >>>>> >> * alignment for the target"; so do we. */ > >>>>> >> } __attribute__((__aligned__)); > >>>>> >> +#endif > >>>>> >> > >>>>> >> typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)(int, > _Unwind_Action, > >>>>> >> > >>>>> >> _Unwind_Exception_Class, > >>>>> >> - struct > >>>>> >> _Unwind_Exception *, > >>>>> >> + _Unwind_Exception > *, > >>>>> >> struct > _Unwind_Context > >>>>> >> *, > >>>>> >> void *); > >>>>> >> > >>>>> >> -typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)( > >>>>> >> - int, _Unwind_Action, _Unwind_Exception_Class, struct > >>>>> >> _Unwind_Exception *, > >>>>> >> - struct _Unwind_Context *); > >>>>> >> +typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)(int, > >>>>> >> _Unwind_Action, > >>>>> >> + > >>>>> >> _Unwind_Exception_Class, > >>>>> >> + > >>>>> >> _Unwind_Exception *, > >>>>> >> + struct > >>>>> >> _Unwind_Context *); > >>>>> >> typedef _Unwind_Personality_Fn __personality_routine; > >>>>> >> > >>>>> >> typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)(struct > _Unwind_Context > >>>>> >> *, > >>>>> >> @@ -224,13 +266,12 @@ _Unwind_Ptr _Unwind_GetRegionStart(struc > >>>>> >> > >>>>> >> /* DWARF EH functions; currently not available on Darwin/ARM */ > >>>>> >> #if !defined(__APPLE__) || !defined(__arm__) > >>>>> >> - > >>>>> >> -_Unwind_Reason_Code _Unwind_RaiseException(struct > _Unwind_Exception > >>>>> >> *); > >>>>> >> -_Unwind_Reason_Code _Unwind_ForcedUnwind(struct > _Unwind_Exception *, > >>>>> >> - _Unwind_Stop_Fn, void > *); > >>>>> >> -void _Unwind_DeleteException(struct _Unwind_Exception *); > >>>>> >> -void _Unwind_Resume(struct _Unwind_Exception *); > >>>>> >> -_Unwind_Reason_Code _Unwind_Resume_or_Rethrow(struct > _Unwind_Exception > >>>>> >> *); > >>>>> >> +_Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception *); > >>>>> >> +_Unwind_Reason_Code _Unwind_ForcedUnwind(_Unwind_Exception *, > >>>>> >> _Unwind_Stop_Fn, > >>>>> >> + void *); > >>>>> >> +void _Unwind_DeleteException(_Unwind_Exception *); > >>>>> >> +void _Unwind_Resume(_Unwind_Exception *); > >>>>> >> +_Unwind_Reason_Code _Unwind_Resume_or_Rethrow(_Unwind_Exception > *); > >>>>> >> > >>>>> >> #endif > >>>>> >> > >>>>> >> @@ -241,11 +282,11 @@ typedef struct SjLj_Function_Context *_U > >>>>> >> > >>>>> >> void _Unwind_SjLj_Register(_Unwind_FunctionContext_t); > >>>>> >> void _Unwind_SjLj_Unregister(_Unwind_FunctionContext_t); > >>>>> >> -_Unwind_Reason_Code _Unwind_SjLj_RaiseException(struct > >>>>> >> _Unwind_Exception *); > >>>>> >> -_Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind(struct > _Unwind_Exception > >>>>> >> *, > >>>>> >> +_Unwind_Reason_Code _Unwind_SjLj_RaiseException(_Unwind_Exception > *); > >>>>> >> +_Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind(_Unwind_Exception > *, > >>>>> >> _Unwind_Stop_Fn, > void > >>>>> >> *); > >>>>> >> -void _Unwind_SjLj_Resume(struct _Unwind_Exception *); > >>>>> >> -_Unwind_Reason_Code _Unwind_SjLj_Resume_or_Rethrow(struct > >>>>> >> _Unwind_Exception *); > >>>>> >> +void _Unwind_SjLj_Resume(_Unwind_Exception *); > >>>>> >> +_Unwind_Reason_Code _Unwind_SjLj_Resume_or_ > Rethrow(_Unwind_Exception > >>>>> >> *); > >>>>> >> > >>>>> >> void *_Unwind_FindEnclosingFunction(void *); > >>>>> >> > >>>>> >> > >>>>> >> > >>>>> >> _______________________________________________ > >>>>> >> cfe-commits mailing list > >>>>> >> cfe-commits@lists.llvm.org > >>>>> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > >>>>> > _______________________________________________ > >>>>> > cfe-commits mailing list > >>>>> > cfe-commits@lists.llvm.org > >>>>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > >>>> > >>>> > >>>> > >>>> > >>>> -- > >>>> Saleem Abdulrasool > >>>> compnerd (at) compnerd (dot) org > -- Saleem Abdulrasool compnerd (at) compnerd (dot) org
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits