summaryrefslogtreecommitdiffstats
path: root/libunwind/src/assembly.h
diff options
context:
space:
mode:
Diffstat (limited to 'libunwind/src/assembly.h')
-rw-r--r--libunwind/src/assembly.h46
1 files changed, 33 insertions, 13 deletions
diff --git a/libunwind/src/assembly.h b/libunwind/src/assembly.h
index a15b89ff66d..606cf2c92b3 100644
--- a/libunwind/src/assembly.h
+++ b/libunwind/src/assembly.h
@@ -45,6 +45,11 @@
#define SYMBOL_IS_FUNC(name)
#define EXPORT_SYMBOL(name)
#define HIDDEN_SYMBOL(name) .private_extern name
+#define WEAK_SYMBOL(name) .weak_reference name
+#define WEAK_ALIAS(name, aliasname) \
+ WEAK_SYMBOL(aliasname) SEPARATOR \
+ SYMBOL_NAME(aliasname) = SYMBOL_NAME(name)
+
#define NO_EXEC_STACK_DIRECTIVE
#elif defined(__ELF__)
@@ -56,6 +61,10 @@
#endif
#define EXPORT_SYMBOL(name)
#define HIDDEN_SYMBOL(name) .hidden name
+#define WEAK_SYMBOL(name) .weak name
+#define WEAK_ALIAS(name, aliasname) \
+ WEAK_SYMBOL(aliasname) SEPARATOR \
+ SYMBOL_NAME(aliasname) = SYMBOL_NAME(name)
#if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \
defined(__linux__)
@@ -71,9 +80,9 @@
.scl 2 SEPARATOR \
.type 32 SEPARATOR \
.endef
-#define EXPORT_SYMBOL2(name) \
- .section .drectve,"yn" SEPARATOR \
- .ascii "-export:", #name, "\0" SEPARATOR \
+#define EXPORT_SYMBOL2(name) \
+ .section .drectve,"yn" SEPARATOR \
+ .ascii "-export:", #name, "\0" SEPARATOR \
.text
#if defined(_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS)
#define EXPORT_SYMBOL(name)
@@ -82,6 +91,23 @@
#endif
#define HIDDEN_SYMBOL(name)
+#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_ALIAS3(name, aliasname) \
+ .section .drectve,"yn" SEPARATOR \
+ .ascii "-alternatename:", #aliasname, "=", #name, "\0" SEPARATOR \
+ .text
+#define WEAK_ALIAS2(name, aliasname) \
+ WEAK_ALIAS3(name, aliasname)
+#define WEAK_ALIAS(name, aliasname) \
+ EXPORT_SYMBOL(SYMBOL_NAME(aliasname)) SEPARATOR \
+ WEAK_ALIAS2(SYMBOL_NAME(name), SYMBOL_NAME(aliasname))
+#endif
+
#define NO_EXEC_STACK_DIRECTIVE
#elif defined(__sparc__)
@@ -92,16 +118,10 @@
#endif
-#define DEFINE_LIBUNWIND_FUNCTION(name) \
- .globl SYMBOL_NAME(name) SEPARATOR \
- EXPORT_SYMBOL(name) SEPARATOR \
- SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
- SYMBOL_NAME(name):
-
-#define DEFINE_LIBUNWIND_PRIVATE_FUNCTION(name) \
- .globl SYMBOL_NAME(name) SEPARATOR \
- HIDDEN_SYMBOL(SYMBOL_NAME(name)) SEPARATOR \
- SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
+#define DEFINE_LIBUNWIND_FUNCTION(name) \
+ .globl SYMBOL_NAME(name) SEPARATOR \
+ HIDDEN_SYMBOL(SYMBOL_NAME(name)) SEPARATOR \
+ SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
SYMBOL_NAME(name):
#if defined(__arm__)
OpenPOWER on IntegriCloud