@@ -247,29 +247,49 @@ impl<'a> Linker for GnuLinker<'a> {
247
247
return
248
248
}
249
249
250
+ let mut arg = OsString :: new ( ) ;
250
251
let path = tmpdir. join ( "list" ) ;
251
- let prefix = if self . sess . target . target . options . is_like_osx {
252
- "_"
253
- } else {
254
- ""
255
- } ;
256
- let res = ( || -> io:: Result < ( ) > {
257
- let mut f = BufWriter :: new ( File :: create ( & path) ?) ;
258
- for sym in & self . info . cdylib_exports {
259
- writeln ! ( f, "{}{}" , prefix, sym) ?;
252
+
253
+ if self . sess . target . target . options . is_like_solaris {
254
+ let res = ( || -> io:: Result < ( ) > {
255
+ let mut f = BufWriter :: new ( File :: create ( & path) ?) ;
256
+ writeln ! ( f, "{{\n global:" ) ?;
257
+ for sym in & self . info . cdylib_exports {
258
+ writeln ! ( f, " {};" , sym) ?;
259
+ }
260
+ writeln ! ( f, "\n local:\n *;\n }};" ) ?;
261
+ Ok ( ( ) )
262
+ } ) ( ) ;
263
+ if let Err ( e) = res {
264
+ self . sess . fatal ( & format ! ( "failed to write version script: {}" , e) ) ;
260
265
}
261
- Ok ( ( ) )
262
- } ) ( ) ;
263
- if let Err ( e) = res {
264
- self . sess . fatal ( & format ! ( "failed to write lib.def file: {}" , e) ) ;
265
- }
266
- let mut arg = OsString :: new ( ) ;
267
- if self . sess . target . target . options . is_like_osx {
268
- arg. push ( "-Wl,-exported_symbols_list," ) ;
266
+
267
+ arg. push ( "-Wl,-M," ) ;
268
+ arg. push ( & path) ;
269
269
} else {
270
- arg. push ( "-Wl,--retain-symbols-file=" ) ;
270
+ let prefix = if self . sess . target . target . options . is_like_osx {
271
+ "_"
272
+ } else {
273
+ ""
274
+ } ;
275
+ let res = ( || -> io:: Result < ( ) > {
276
+ let mut f = BufWriter :: new ( File :: create ( & path) ?) ;
277
+ for sym in & self . info . cdylib_exports {
278
+ writeln ! ( f, "{}{}" , prefix, sym) ?;
279
+ }
280
+ Ok ( ( ) )
281
+ } ) ( ) ;
282
+ if let Err ( e) = res {
283
+ self . sess . fatal ( & format ! ( "failed to write lib.def file: {}" , e) ) ;
284
+ }
285
+ if self . sess . target . target . options . is_like_osx {
286
+ arg. push ( "-Wl,-exported_symbols_list," ) ;
287
+ } else {
288
+ arg. push ( "-Wl,--retain-symbols-file=" ) ;
289
+ }
290
+ arg. push ( & path) ;
271
291
}
272
- arg . push ( & path ) ;
292
+
273
293
self . cmd . arg ( arg) ;
274
294
}
275
295
}
0 commit comments