[libcxx-commits] [PATCH] D59921: [libunwind] Export the unw_* symbols as weak symbols

Martin Storsjö via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Sat Mar 30 01:53:25 PDT 2019


mstorsjo added inline comments.


================
Comment at: libunwind/src/assembly.h:97
+#define WEAK_ALIAS(name, aliasname)                       \
+  WEAK_SYMBOL(aliasname) SEPARATOR                        \
+  SYMBOL_NAME(aliasname) = SYMBOL_NAME(name)
----------------
mstorsjo wrote:
> Thanks, this looks great overall now! Just one minor mistake.
> 
> The mingw version of the `WEAK_ALIAS` macro lacks a definition of `WEAK_SYMBOL()` - to match the C version we probably should just leave it out? With that changed, this compiles and links just fine.
> 
> Didn't test the non-mingw codepaths though.
Sorry, I keep coming up with more things...

The alias needs to be exported to be visible outside of the dll. (In that case there's no issue with conflicting non-reserved symbols at all.) And it needs a `.globl`.

The non-mingw version is missing some `#` to make string literals. And that requires a few layers of macro indirection.

```
diff --git a/src/assembly.h b/src/assembly.h
index 3ff959d..1d47e4d 100644
--- a/src/assembly.h
+++ b/src/assembly.h
@@ -93,13 +93,21 @@
 
 #if defined(__MINGW32__)
 #define WEAK_ALIAS(name, aliasname)                                            \
+  .globl SYMBOL_NAME(aliasname) SEPARATOR                                      \
+  EXPORT_SYMBOL(aliasname) SEPARATOR                                           \
   SYMBOL_NAME(aliasname) = SYMBOL_NAME(name)
 #else
-#define WEAK_ALIAS(name, aliasname)                                            \
+
+#define WEAK_ALIAS3(name, aliasname)                                           \
   .section .drectve,"yn" SEPARATOR                                             \
-  .ascii "-alternatename:", SYMBOL_NAME(aliasname), "=",                       \
-                            SYMBOL_NAME(name), "\0" SEPARATOR                  \
+  .ascii "-alternatename:", #aliasname, "=", #name, "\0" SEPARATOR             \
   .text
+#define WEAK_ALIAS2(name, aliasname)                                           \
+  WEAK_ALIAS3(name, aliasname)
+#define WEAK_ALIAS(name, aliasname)                                            \
+  EXPORT_SYMBOL(aliasname) SEPARATOR                                           \
+  WEAK_ALIAS2(SYMBOL_NAME(name), SYMBOL_NAME(aliasname))
+
 #endif
 
 #define NO_EXEC_STACK_DIRECTIVE
```


Repository:
  rUNW libunwind

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59921/new/

https://reviews.llvm.org/D59921





More information about the libcxx-commits mailing list