logan added inline comments.

================
Comment at: include/unwind.h:224
@@ +223,3 @@
+
+static __inline__ uintptr_t _Unwind_GetGR(struct _Unwind_Context *context,
+                                          int index) {
----------------
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.


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