diff options
author | David Bremner <bremner@debian.org> | 2011-07-16 15:59:44 -0300 |
---|---|---|
committer | David Bremner <bremner@debian.org> | 2011-07-16 22:16:46 -0300 |
commit | feb22fef2e3f6f1cf1722f00945c580e506df0df (patch) | |
tree | efe0edb202123401e4083070d66a794e0128c5d5 | |
parent | 8b310a157c06c826c0ee7f677fbbf9f19e78537b (diff) |
libnotmuch: export Xapian typeinfo symbols
The lack of such exporting seems to cause problems catching
exceptions, as suggested by
http://gcc.gnu.org/wiki/Visibility
This manifested in the symbol-hiding test failing when notmuch was
compile with gcc 4.4.5. On i386, this further manifested as notmuch
new failing to run (crashing with an uncaught exception on first run).
-rw-r--r-- | lib/Makefile.local | 4 | ||||
-rw-r--r-- | lib/gen-version-script.sh | 27 |
2 files changed, 28 insertions, 3 deletions
diff --git a/lib/Makefile.local b/lib/Makefile.local index 7e2bc87..a6076ab 100644 --- a/lib/Makefile.local +++ b/lib/Makefile.local @@ -76,9 +76,7 @@ $(dir)/$(LIBNAME): $(libnotmuch_modules) notmuch.sym $(call quiet,CXX $(CXXFLAGS)) $(libnotmuch_modules) $(FINAL_LIBNOTMUCH_LDFLAGS) $(LIBRARY_LINK_FLAG) -o $@ notmuch.sym: lib/notmuch.h - printf "{\nglobal:\n" > notmuch.sym - sed -n 's/^\s*\(notmuch_[a-z_]*\)\s*(.*/\t\1;/p' $< >> notmuch.sym - printf "local: *;\n};\n" >> notmuch.sym + sh lib/gen-version-script.sh $< $(libnotmuch_modules) > $@ $(dir)/$(SONAME): $(dir)/$(LIBNAME) ln -sf $(LIBNAME) $@ diff --git a/lib/gen-version-script.sh b/lib/gen-version-script.sh new file mode 100644 index 0000000..e753eaf --- /dev/null +++ b/lib/gen-version-script.sh @@ -0,0 +1,27 @@ + +# we go through a bit of work to get the unmangled names of the +# typeinfo symbols because of +# http://sourceware.org/bugzilla/show_bug.cgi?id=10326 + +if [ $# -lt 2 ]; then + echo Usage: $0 header obj1 obj2 obj3 + exit 1; +fi + +HEADER=$1 +shift + +printf '{\nglobal:\n' +nm --defined $* | awk '$3 ~ "Xapian.*Error" {print $3}' | sort | uniq | \ +while read sym; do + demangled=$(c++filt $sym) + case $demangled in + typeinfo*) + printf "\t$sym;\n" + ;; + *) + ;; + esac +done +sed -n 's/^\s*\(notmuch_[a-z_]*\)\s*(.*/\t\1;/p' $HEADER +printf "local: *;\n};\n" |