From: Walter Doekes Date: Thu, 22 Aug 2013 08:22:39 +0000 (+0000) Subject: Add _IO_stdin_used in version-script to fix SIGBUSes on Sparc. X-Git-Tag: 11.6.0-rc1~3^2~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0bdd6ce7068b90e060823ac663892cc9bd25f0e3;p=thirdparty%2Fasterisk.git Add _IO_stdin_used in version-script to fix SIGBUSes on Sparc. The --version-script,asterisk.exports linker flag (and the module exports) didn't provide _IO_stdin_used in the list of exported symbols. That causes some kind of libc compatibility mode to kick in, where stdio file structures (stdout/stderr) land somewhere else. In the case of the Sparc, they landed on misaligned memory. This became apparent first after r376428 (Reorder startup sequence) when a lot of ast_log's were replaced with fprintf's. Writing to stderr triggered a SIGBUS. (Compared to x86 and amd64 architectures, the Sparc is very picky about memory alignment.) (issue ASTERISK-21763) (issue ASTERISK-21665) Reported by: Jeremy Kister Review: https://reviewboard.asterisk.org/r/2760/ ........ Merged revisions 397377 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@397378 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/default.exports b/default.exports index 5e767549c4..6d9344d3b5 100644 --- a/default.exports +++ b/default.exports @@ -1,4 +1,8 @@ { + global: + /* See main/asterisk.exports.in for an explanation why this is + * needed. */ + _IO_stdin_used; local: *; }; diff --git a/main/asterisk.exports.in b/main/asterisk.exports.in index 49d3a44a4e..e521d10770 100644 --- a/main/asterisk.exports.in +++ b/main/asterisk.exports.in @@ -46,6 +46,25 @@ LINKER_SYMBOL_PREFIXres_srtp; LINKER_SYMBOL_PREFIXres_srtp_policy; LINKER_SYMBOL_PREFIXsecure_call_info; + /* + + If _IO_stdin_used is not exported, stdout/stderr may not get + properly aligned. That causes breakage on some architectures. + + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=634261#51 + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=634261#94 + http://lists.gnu.org/archive/html/bug-glibc/2001-12/msg00203.html + + We export the symbol to get proper behaviour. Now printf + doesn't SIGBUS anymore on the SPARC. + + Michael Karcher wrote on Jan 13, 2013: + > A build process that mangles the export of _IO_stdin_used is + > (as defined by the libc ABI, even if not explicitly written + > down) broken. [...] + + */ + LINKER_SYMBOL_PREFIX_IO_stdin_used; local: *; };