Fix flags when using clang as linker for Fuchsia · rust-lang/rust@55d5dcb (original) (raw)

`@@ -1551,12 +1551,21 @@ fn crt_objects_fallback(sess: &Session, crate_type: CrateType) -> bool {

`

1551

1551

`fn add_pre_link_objects(

`

1552

1552

`cmd: &mut dyn Linker,

`

1553

1553

`sess: &Session,

`

``

1554

`+

flavor: LinkerFlavor,

`

1554

1555

`link_output_kind: LinkOutputKind,

`

1555

1556

`self_contained: bool,

`

1556

1557

`) {

`

``

1558

`+

// FIXME: we are currently missing some infra here (per-linker-flavor CRT objects),

`

``

1559

`+

// so Fuchsia has to be special-cased.

`

1557

1560

`let opts = &sess.target;

`

1558

``

`-

let objects =

`

1559

``

`-

if self_contained { &opts.pre_link_objects_fallback } else { &opts.pre_link_objects };

`

``

1561

`+

let empty = Default::default();

`

``

1562

`+

let objects = if self_contained {

`

``

1563

`+

&opts.pre_link_objects_fallback

`

``

1564

`+

} else if !(sess.target.os == "fuchsia" && flavor == LinkerFlavor::Gcc) {

`

``

1565

`+

&opts.pre_link_objects

`

``

1566

`+

} else {

`

``

1567

`+

&empty

`

``

1568

`+

};

`

1560

1569

`for obj in objects.get(&link_output_kind).iter().copied().flatten() {

`

1561

1570

` cmd.add_object(&get_object_file_path(sess, obj, self_contained));

`

1562

1571

`}

`

`@@ -1881,7 +1890,7 @@ fn linker_with_args<'a, B: ArchiveBuilder<'a>>(

`

1881

1890

`// ------------ Object code and libraries, order-dependent ------------

`

1882

1891

``

1883

1892

`// Pre-link CRT objects.

`

1884

``

`-

add_pre_link_objects(cmd, sess, link_output_kind, crt_objects_fallback);

`

``

1893

`+

add_pre_link_objects(cmd, sess, flavor, link_output_kind, crt_objects_fallback);

`

1885

1894

``

1886

1895

`add_linked_symbol_object(

`

1887

1896

` cmd,

`

`@@ -2018,7 +2027,10 @@ fn add_order_independent_options(

`

2018

2027

``

2019

2028

`add_link_script(cmd, sess, tmpdir, crate_type);

`

2020

2029

``

2021

``

`-

if sess.target.os == "fuchsia" && crate_type == CrateType::Executable {

`

``

2030

`+

if sess.target.os == "fuchsia"

`

``

2031

`+

&& crate_type == CrateType::Executable

`

``

2032

`+

&& flavor != LinkerFlavor::Gcc

`

``

2033

`+

{

`

2022

2034

`let prefix = if sess.opts.unstable_opts.sanitizer.contains(SanitizerSet::ADDRESS) {

`

2023

2035

`"asan/"

`

2024

2036

`} else {

`