asl added inline comments.

================
Comment at: include/unwind.h:224
@@ +223,3 @@
+
+static __inline__ uintptr_t _Unwind_GetGR(struct _Unwind_Context *context,
+                                          int index) {
----------------
logan wrote:
> asl wrote:
> > Why can't we simply make them static functions of UnwindLevel1.c for EHABI 
> > case?
> They can't be //static// functions of UnwindLevel1.c because they will be 
> called from the other source code (e.g. libc++abi calls these functions.)  If 
> they are declared as static functions in UnwindLevel1.c, then the other 
> source code can't access these functions.
> 
> We can't declare these functions as extern and define these functions in 
> UnwindLevel1.c either.  If we do so, the source code including this header 
> and using these functions will be compiled to object files with external 
> symbols (undefined references) to these functions.  This means that these 
> symbols should be available to the linkers.  However, libgcc does not provide 
> these symbols.  If we are building libc++abi with libgcc without libunwinder, 
> then we will encounter the following link error:
> 
>     libcxxabi/src/cxa_personality.cpp:(.text+0x3c): undefined reference to 
> `_Unwind_SetGR'
>     (... and etc ...)
> 
> This is the reason why these functions must be inlined.  AFAICT, both the 
> unwind.h from gcc or clang (`lib/Header/unwind.h`) are following the same 
> practice.
I see. My biggest concern is the use of LIBCXXABI_ARM_EHABI define. We need to 
resolve this beforehand, because currently we're having a cyclic dependency 
between libunwind and libcxxabi via __cxxabi_config.h. I'd simply fold it 
inside libwunwind (or introduce __libunwind_config.h)


http://reviews.llvm.org/D11190




_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to