summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-03-29 03:37:17 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-03-29 03:37:17 +0000
commitc31d004ece80e82c4d6f27d611e2de48bbc307ae (patch)
tree64d3fe1d991116ee3357d44f368564195ac3d015 /clang/lib
parent763acfcb8aac418b789543ff3911b13fe8b6d93b (diff)
downloadbcm5719-llvm-c31d004ece80e82c4d6f27d611e2de48bbc307ae.tar.gz
bcm5719-llvm-c31d004ece80e82c4d6f27d611e2de48bbc307ae.zip
unwind.h fix for -fvisibility=hidden users. This fixes firefox build in a system
with libunwind installed. Patch by Jeffrey Yasskin! llvm-svn: 153633
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Headers/unwind.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/Headers/unwind.h b/clang/lib/Headers/unwind.h
index a99c8a11761..a0659203b15 100644
--- a/clang/lib/Headers/unwind.h
+++ b/clang/lib/Headers/unwind.h
@@ -31,7 +31,19 @@
# define _SHOULD_UNDEFINE_GNU_SOURCE
# define _GNU_SOURCE
# endif
-# include_next <unwind.h>
+// libunwind's unwind.h reflects the current visibility. However, Mozilla
+// builds with -fvisibility=hidden and relies on gcc's unwind.h to reset the
+// visibility to default and export its contents. gcc also allows users to
+// override its override by #defining HIDE_EXPORTS (but note, this only obeys
+// the user's -fvisibility setting; it doesn't hide any exports on its own). We
+// imitate gcc's header here:
+# ifdef HIDE_EXPORTS
+# include_next <unwind.h>
+# else
+# pragma GCC visibility push(default)
+# include_next <unwind.h>
+# pragma GCC visibility pop
+# endif
# ifdef _SHOULD_UNDEFINE_GNU_SOURCE
# undef _GNU_SOURCE
# undef _SHOULD_UNDEFINE_GNU_SOURCE
OpenPOWER on IntegriCloud