r309226 - Headers: improve ARM EHABI coverage of unwind.h

Saleem Abdulrasool via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 22 22:19:18 PDT 2017


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.stepanov at 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 <hans at 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.stepanov at 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 <hans at chromium.org>
> wrote:
> >>> Is there something we need for 5.0.0 here?
> >>>
> >>> On Sat, Aug 12, 2017 at 9:58 PM, Saleem Abdulrasool
> >>> <compnerd at 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.stepanov at 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 at 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 at 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 at lists.llvm.org
> >>>>> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
> >>>>> > _______________________________________________
> >>>>> > cfe-commits mailing list
> >>>>> > cfe-commits at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170822/bbe390a1/attachment-0001.html>


More information about the cfe-commits mailing list