@@ -253,46 +253,43 @@ impl<'a> Linker for GnuLinker<'a> {
253253 let mut arg = OsString :: new ( ) ;
254254 let path = tmpdir. join ( "list" ) ;
255255
256- if self . sess . target . target . options . is_like_solaris {
256+ if self . sess . target . target . options . is_like_osx {
257+ // Write a plain, newline-separated list of symbols
257258 let res = ( || -> io:: Result < ( ) > {
258259 let mut f = BufWriter :: new ( File :: create ( & path) ?) ;
259- writeln ! ( f, "{{\n global:" ) ?;
260260 for sym in self . info . exports [ & crate_type] . iter ( ) {
261- writeln ! ( f, " {}; " , sym) ?;
261+ writeln ! ( f, "_{} " , sym) ?;
262262 }
263- writeln ! ( f, "\n local:\n *;\n }};" ) ?;
264263 Ok ( ( ) )
265264 } ) ( ) ;
266265 if let Err ( e) = res {
267- self . sess . fatal ( & format ! ( "failed to write version script : {}" , e) ) ;
266+ self . sess . fatal ( & format ! ( "failed to write lib.def file : {}" , e) ) ;
268267 }
269-
270- arg. push ( "-Wl,-M," ) ;
271- arg. push ( & path) ;
272268 } else {
273- let prefix = if self . sess . target . target . options . is_like_osx {
274- "_"
275- } else {
276- ""
277- } ;
269+ // Write an LD version script
278270 let res = ( || -> io:: Result < ( ) > {
279271 let mut f = BufWriter :: new ( File :: create ( & path) ?) ;
272+ writeln ! ( f, "{{\n global:" ) ?;
280273 for sym in self . info . exports [ & crate_type] . iter ( ) {
281- writeln ! ( f, "{}{}" , prefix , sym) ?;
274+ writeln ! ( f, " {};" , sym) ?;
282275 }
276+ writeln ! ( f, "\n local:\n *;\n }};" ) ?;
283277 Ok ( ( ) )
284278 } ) ( ) ;
285279 if let Err ( e) = res {
286- self . sess . fatal ( & format ! ( "failed to write lib.def file: {}" , e) ) ;
287- }
288- if self . sess . target . target . options . is_like_osx {
289- arg. push ( "-Wl,-exported_symbols_list," ) ;
290- } else {
291- arg. push ( "-Wl,--retain-symbols-file=" ) ;
280+ self . sess . fatal ( & format ! ( "failed to write version script: {}" , e) ) ;
292281 }
293- arg. push ( & path) ;
294282 }
295283
284+ if self . sess . target . target . options . is_like_osx {
285+ arg. push ( "-Wl,-exported_symbols_list," ) ;
286+ } else if self . sess . target . target . options . is_like_solaris {
287+ arg. push ( "-Wl,-M," ) ;
288+ } else {
289+ arg. push ( "-Wl,--version-script=" ) ;
290+ }
291+
292+ arg. push ( & path) ;
296293 self . cmd . arg ( arg) ;
297294 }
298295
0 commit comments