-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Set dso_local for hidden, private and local items #83592
Conversation
r? @davidtwco (rust-highfive has picked a reviewer for you, use r? to override) |
@bors try @rust-timer queue |
Awaiting bors try build completion. @rustbot label: +S-waiting-on-perf |
⌛ Trying commit e5184ab339d2ee4fc502dae690892fbff8bfe99a with merge 67a145d7d663cd212cb8c2bef6a90df8d6f652c9... |
This comment has been minimized.
This comment has been minimized.
💔 Test failed - checks-actions |
e5184ab
to
415c627
Compare
This comment has been minimized.
This comment has been minimized.
641791c
to
ef11651
Compare
This comment has been minimized.
This comment has been minimized.
ef11651
to
012504b
Compare
This comment has been minimized.
This comment has been minimized.
e431f03
to
ec3ef2a
Compare
@bors try @rust-timer queue |
Awaiting bors try build completion. @rustbot label: +S-waiting-on-perf |
⌛ Trying commit ec3ef2a5f48bc553788b66e07137ea5e14ca1dde with merge 01bf9eb60ecc1bf23dd897173c7330b0fc7a1348... |
This comment has been minimized.
This comment has been minimized.
☀️ Try build successful - checks-actions |
Queued 01bf9eb60ecc1bf23dd897173c7330b0fc7a1348 with parent cb0e0db, future comparison URL. |
@davidtwco the number of test changes may warrant a second look. |
@bors r+ |
📌 Commit 2f000a7 has been approved by |
☀️ Test successful - checks-actions |
The test case wasn't actually checked for x64 due to a small difference in the name.
Set dso_local for more items Related to rust-lang#83592. (cc `@nagisa)` Noticed that on x86_64 with `relocation-model: static` `R_X86_64_GOTPCREL` relocations were still generated in some cases. (related: Rust-for-Linux/linux#135; Rust-for-Linux needs these fixes to successfully build) First time doing anything with LLVM so not sure whether this is correct but the following are some of the things I've tried to convince myself. ## C equivalent Example from clang which also sets `dso_local` in these cases: `clang-12 -fno-PIC -S -emit-llvm test.c` ```C extern int A; int* a() { return &A; } int B; int* b() { return &B; } ``` ``` ; ModuleID = 'test.c' source_filename = "test.c" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" `@A` = external dso_local global i32, align 4 `@B` = dso_local global i32 0, align 4 ; Function Attrs: noinline nounwind optnone uwtable define dso_local i32* `@a()` #0 { ret i32* `@A` } ; Function Attrs: noinline nounwind optnone uwtable define dso_local i32* `@b()` #0 { ret i32* `@B` } attributes #0 = { noinline nounwind optnone uwtable "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" } !llvm.module.flags = !{!0} !llvm.ident = !{!1} !0 = !{i32 1, !"wchar_size", i32 4} !1 = !{!"clang version 12.0.0 (https://github.com/llvm/llvm-project/ b978a93)"} ``` `clang-12 -fno-PIC -c test.c` `objdump test.o -r`: ``` test.o: file format elf64-x86-64 RELOCATION RECORDS FOR [.text]: OFFSET TYPE VALUE 0000000000000006 R_X86_64_64 A 0000000000000016 R_X86_64_64 B RELOCATION RECORDS FOR [.eh_frame]: OFFSET TYPE VALUE 0000000000000020 R_X86_64_PC32 .text 0000000000000040 R_X86_64_PC32 .text+0x0000000000000010 ``` ## Comparison to pre-LLVM 12 output `rustc --emit=obj,llvm-ir --target=x86_64-unknown-none-linuxkernel --crate-type rlib test.rs` ```Rust #![feature(no_core, lang_items)] #![no_core] #[lang="sized"] trait Sized {} #[lang="sync"] trait Sync {} #[lang = "drop_in_place"] pub unsafe fn drop_in_place<T: ?Sized>(_: *mut T) {} impl Sync for i32 {} pub static STATIC: i32 = 32; extern { pub static EXT_STATIC: i32; } pub fn a() -> &'static i32 { &STATIC } pub fn b() -> &'static i32 { unsafe {&EXT_STATIC} } ``` `objdump test.o -r` nightly-2021-02-20 (rustc target is `x86_64-linux-kernel`): ``` RELOCATION RECORDS FOR [.text._ZN4test1a17h1024ba65f3424175E]: OFFSET TYPE VALUE 0000000000000007 R_X86_64_32S _ZN4test6STATIC17h3adc41a83746c9ffE RELOCATION RECORDS FOR [.text._ZN4test1b17h86a6a80c1190ac8dE]: OFFSET TYPE VALUE 0000000000000007 R_X86_64_32S EXT_STATIC ``` nightly-2021-05-10: ``` RELOCATION RECORDS FOR [.text._ZN4test1a17he846f03bf37b2d20E]: OFFSET TYPE VALUE 0000000000000007 R_X86_64_GOTPCREL _ZN4test6STATIC17h5a059515bf3d4968E-0x0000000000000004 RELOCATION RECORDS FOR [.text._ZN4test1b17h7e0f7f80fbd91125E]: OFFSET TYPE VALUE 0000000000000007 R_X86_64_GOTPCREL EXT_STATIC-0x0000000000000004 ``` This PR: ``` RELOCATION RECORDS FOR [.text._ZN4test1a17he846f03bf37b2d20E]: OFFSET TYPE VALUE 0000000000000007 R_X86_64_32S _ZN4test6STATIC17h5a059515bf3d4968E RELOCATION RECORDS FOR [.text._ZN4test1b17h7e0f7f80fbd91125E]: OFFSET TYPE VALUE 0000000000000007 R_X86_64_32S EXT_STATIC ```
Includes rust-lang/rust#83592 and rust-lang/rust#85276 which were needed to build correctly again after rustc's upgrade to LLVM 12. Signed-off-by: Boris-Chengbiao Zhou <[email protected]>
Includes rust-lang/rust#83592 and rust-lang/rust#85276 which are needed to build correctly again after rustc's upgrade to LLVM 12. Signed-off-by: Boris-Chengbiao Zhou <[email protected]>
Includes rust-lang/rust#83592 and rust-lang/rust#85276 which are needed to build correctly again after rustc's upgrade to LLVM 12. Signed-off-by: Boris-Chengbiao Zhou <[email protected]>
Includes rust-lang/rust#83592, rust-lang/rust#85276 and rust-lang/rust#85700 which are needed to build correctly again after rustc's upgrade to LLVM 12. Signed-off-by: Boris-Chengbiao Zhou <[email protected]>
Includes rust-lang/rust#83592, rust-lang/rust#85276 and rust-lang/rust#85700 which are needed to build correctly again after rustc's upgrade to LLVM 12. Signed-off-by: Boris-Chengbiao Zhou <[email protected]>
Includes rust-lang/rust#83592, rust-lang/rust#85276 and rust-lang/rust#85700 which are needed to build correctly again after rustc's upgrade to LLVM 12. Also fixes a newly introduced clippy warning. Signed-off-by: Boris-Chengbiao Zhou <[email protected]>
Includes rust-lang/rust#83592, rust-lang/rust#85276 and rust-lang/rust#85700 which are needed to build correctly again after rustc's upgrade to LLVM 12. Signed-off-by: Boris-Chengbiao Zhou <[email protected]>
This should probably have no real effect in most cases, as e.g.
hidden
visibility already implies
dso_local
(or at least LLVM IR does notpreserve the
dso_local
setting if the item is alreadyhidden
), butit should fix
-Crelocation-model=static
and improve codegen inexecutables.
Note that this PR does not exhaustively port the logic in clang, only the
portion that is necessary to fix a regression from LLVM 12 that relates to
-Crelocation_model=static
.Fixes #83335