@@ -452,18 +452,34 @@ fn diagnostics_works() {
452
452
. run ( ) ;
453
453
}
454
454
455
+ #[ cfg( target_os = "macos" ) ]
456
+ #[ cargo_test( requires_nm, nightly, reason = "-Zremap-path-scope is unstable" ) ]
457
+ fn object_works ( ) {
458
+ object_works_helper ( |path| {
459
+ std:: process:: Command :: new ( "nm" )
460
+ . arg ( "-pa" )
461
+ . arg ( path)
462
+ . output ( )
463
+ . expect ( "nm works" )
464
+ . stdout
465
+ } )
466
+ }
467
+
455
468
#[ cfg( target_os = "linux" ) ]
456
469
#[ cargo_test( requires_readelf, nightly, reason = "-Zremap-path-scope is unstable" ) ]
457
470
fn object_works ( ) {
458
- use std:: os:: unix:: ffi:: OsStrExt ;
459
-
460
- let run_readelf = |path| {
471
+ object_works_helper ( |path| {
461
472
std:: process:: Command :: new ( "readelf" )
462
473
. arg ( "-wi" )
463
474
. arg ( path)
464
475
. output ( )
465
476
. expect ( "readelf works" )
466
- } ;
477
+ . stdout
478
+ } )
479
+ }
480
+
481
+ fn object_works_helper ( run : impl Fn ( & std:: path:: Path ) -> Vec < u8 > ) {
482
+ use std:: os:: unix:: ffi:: OsStrExt ;
467
483
468
484
let registry_src = paths:: home ( ) . join ( ".cargo/registry/src" ) ;
469
485
let pkg_remap = format ! ( "{}/[..]/bar-0.0.1=bar-0.0.1" , registry_src. display( ) ) ;
@@ -497,7 +513,7 @@ fn object_works() {
497
513
498
514
let bin_path = p. bin ( "foo" ) ;
499
515
assert ! ( bin_path. is_file( ) ) ;
500
- let stdout = run_readelf ( bin_path) . stdout ;
516
+ let stdout = run ( & bin_path) ;
501
517
// TODO: re-enable this check when rustc bootstrap disables remapping
502
518
// <https://github.com/rust-lang/cargo/pull/12625#discussion_r1371714791>
503
519
// assert!(memchr::memmem::find(&stdout, rust_src).is_some());
@@ -541,10 +557,34 @@ fn object_works() {
541
557
542
558
let bin_path = p. bin ( "foo" ) ;
543
559
assert ! ( bin_path. is_file( ) ) ;
544
- let stdout = run_readelf ( bin_path) . stdout ;
560
+ let stdout = run ( & bin_path) ;
545
561
assert ! ( memchr:: memmem:: find( & stdout, rust_src) . is_none( ) ) ;
546
- assert ! ( memchr:: memmem:: find( & stdout, registry_src_bytes) . is_none( ) ) ;
547
- assert ! ( memchr:: memmem:: find( & stdout, pkg_root) . is_none( ) ) ;
562
+ if cfg ! ( target_os = "macos" ) {
563
+ for line in stdout. split ( |c| c == & b'\n' ) {
564
+ let registry = memchr:: memmem:: find ( line, registry_src_bytes) . is_none ( ) ;
565
+ let local = memchr:: memmem:: find ( line, pkg_root) . is_none ( ) ;
566
+ if registry && local {
567
+ continue ;
568
+ }
569
+
570
+ if memchr:: memmem:: find ( line, b" OSO " ) . is_some ( ) {
571
+ // `OSO` symbols can't be trimmed at this moment.
572
+ // See <https://github.com/rust-lang/rust/issues/116948#issuecomment-1793617018>
573
+ // TODO: Change to `is_none()` once the issue is resolved.
574
+ continue ;
575
+ }
576
+
577
+ // on macOS `SO` symbols are embedded in final binaries and should be trimmed.
578
+ // See rust-lang/rust#117652.
579
+ assert ! (
580
+ memchr:: memmem:: find( line, b" SO " ) . is_some( ) ,
581
+ "untrimmed `SO` symbol found"
582
+ )
583
+ }
584
+ } else {
585
+ assert ! ( memchr:: memmem:: find( & stdout, registry_src_bytes) . is_none( ) ) ;
586
+ assert ! ( memchr:: memmem:: find( & stdout, pkg_root) . is_none( ) ) ;
587
+ }
548
588
}
549
589
550
590
// TODO: might want to move to test/testsuite/build_script.rs once stabilized.
0 commit comments