rust/compiler
bors 558553272d Auto merge of #88200 - pcwalton:no-dso-local-on-mach-o, r=nagisa
Stop emitting the `dso_local` LLVM attribute for external symbols under the static relocation model on macOS.

This matches Clang's behavior:

973cb2c326/clang/lib/CodeGen/CodeGenModule.cpp (L1038-L1040)

Even if `dso_local` were properly supported in this way on macOS, it seems
incorrect to add this annotation as liberally as we did. The `dso_local`
annotation is for symbols that ultimately end up in the same linkage unit, but
we were adding this annotation even for `static` values inside `extern` blocks
marked with `#[link(type="framework")]`, which should be considered dynamically
linked.  Note that Clang likewise avoids emitting `dso_local` for `dllimport`
symbols:

973cb2c326/clang/lib/CodeGen/CodeGenModule.cpp (L1005-L1007)

This issue caused breakage in the `ring` crate, which links to a symbol defined
in `Security.framework` that ultimately resolves to address `0x0`:

b94d61e044/src/rand.rs (L390)

For this symbol, the use of `dso_local` causes LLVM to emit a relocation of
type `X86_64_RELOC_SIGNED`, which is a 32-bit signed PC-relative offset. If the
binary is large enough, `0x0` might be out of range, and the link will fail.
Avoiding `dso_local` causes LLVM to use the GOT instead, emitting a relocation
of type `X86_64_RELOC_GOT_LOAD`, which will properly handle the large offset
and cause the link to succeed.

As a side note, the static relocation model is effectively deprecated for
security reasons on macOS, as it prohibits PIE. It's also completely
unsupported on Apple Silicon, so I don't think it's worth going to the effort
of properly supporting this model on that platform.
2021-08-22 23:44:48 +00:00
..
rustc
rustc_apfloat
rustc_arena
rustc_ast Remove box syntax from rustc_ast 2021-08-18 09:25:26 +02:00
rustc_ast_lowering Introduce hir::ExprKind::Let - Take 2 2021-08-15 16:18:26 -03:00
rustc_ast_passes Auto merge of #86860 - fee1-dead:stabilize, r=LeSeulArtichaut 2021-08-18 01:00:17 +00:00
rustc_ast_pretty Introduce hir::ExprKind::Let - Take 2 2021-08-15 16:18:26 -03:00
rustc_attr
rustc_builtin_macros Remove box syntax from rustc_builtin_macros 2021-08-18 09:25:26 +02:00
rustc_codegen_cranelift Auto merge of #88135 - crlf0710:trait_upcasting_part_3, r=nikomatsakis 2021-08-21 21:14:07 +00:00
rustc_codegen_llvm Auto merge of #88200 - pcwalton:no-dso-local-on-mach-o, r=nagisa 2021-08-22 23:44:48 +00:00
rustc_codegen_ssa Auto merge of #88135 - crlf0710:trait_upcasting_part_3, r=nikomatsakis 2021-08-21 21:14:07 +00:00
rustc_data_structures Remove duplicate trait bounds in rustc_data_structures::graph 2021-08-09 08:52:04 -05:00
rustc_driver Reduce verbosity of RUSTC_LOG 2021-08-09 21:39:39 -04:00
rustc_error_codes Auto merge of #88134 - rylev:force-warn-improvements, r=nikomatsakis 2021-08-21 15:51:50 +00:00
rustc_errors Modify structured suggestion output 2021-08-11 09:46:24 +00:00
rustc_expand Introduce hir::ExprKind::Let - Take 2 2021-08-15 16:18:26 -03:00
rustc_feature Auto merge of #87570 - nikic:llvm-13, r=nagisa 2021-08-21 09:25:28 +00:00
rustc_fs_util
rustc_graphviz
rustc_hir Introduce hir::ExprKind::Let - Take 2 2021-08-15 16:18:26 -03:00
rustc_hir_pretty Introduce hir::ExprKind::Let - Take 2 2021-08-15 16:18:26 -03:00
rustc_incremental
rustc_index
rustc_infer Auto merge of #88166 - BoxyUwU:const-equate-canon, r=lcnr 2021-08-22 18:00:22 +00:00
rustc_interface Replace #[plugin_registrar] with exporting __rustc_plugin_registrar 2021-08-10 14:20:48 +02:00
rustc_lexer Renamed variable str -> tail for clarity 2021-08-11 13:57:28 +02:00
rustc_lint Rollup merge of #86747 - FabianWolff:issue-86653, r=GuillaumeGomez 2021-08-22 20:52:50 +02:00
rustc_lint_defs Auto merge of #87324 - asquared31415:named-asm-labels, r=Amanieu 2021-08-14 17:33:38 +00:00
rustc_llvm Rollup merge of #88164 - durin42:llvm-14-san-opts, r=nikic 2021-08-22 20:52:53 +02:00
rustc_macros Rollup merge of #86123 - Aaron1011:query-span, r=cjgillot 2021-08-19 19:30:04 +02:00
rustc_metadata Include (potentially remapped) working dir in crate hash 2021-08-15 15:17:37 -05:00
rustc_middle Rollup merge of #88211 - petrochenkov:withhilo, r=jyn514 2021-08-22 20:52:54 +02:00
rustc_mir Auto merge of #88135 - crlf0710:trait_upcasting_part_3, r=nikomatsakis 2021-08-21 21:14:07 +00:00
rustc_mir_build Auto merge of #88039 - sexxi-goose:fix-87987, r=nikomatsakis 2021-08-20 02:19:58 +00:00
rustc_parse Remove box syntax from rustc_parse 2021-08-18 09:25:26 +02:00
rustc_parse_format
rustc_passes Rollup merge of #88036 - nbdd0121:const3, r=petrochenkov 2021-08-18 19:54:59 +02:00
rustc_plugin_impl Replace #[plugin_registrar] with exporting __rustc_plugin_registrar 2021-08-10 14:20:48 +02:00
rustc_privacy rustc_privacy: Replace HirIds and DefIds with LocalDefIds where possible 2021-08-19 00:01:12 +03:00
rustc_query_impl Fold vtable_trait_upcasting_coercion_new_vptr_slot logic into obligation processing. 2021-08-18 13:00:27 +08:00
rustc_query_system Prevent double panic when handling incremental fingerprint mismatch 2021-08-12 15:11:39 -05:00
rustc_resolve Rollup merge of #88238 - m-ou-se:used-imports-no-track-namespace, r=estebank 2021-08-22 20:52:56 +02:00
rustc_save_analysis Include (potentially remapped) working dir in crate hash 2021-08-15 15:17:37 -05:00
rustc_serialize Remove box syntax from rustc_serialize 2021-08-18 09:25:26 +02:00
rustc_session Include (potentially remapped) working dir in crate hash 2021-08-15 15:17:37 -05:00
rustc_span Rollup merge of #88050 - Aaron1011:filename-hash-stable, r=michaelwoerister 2021-08-19 19:30:07 +02:00
rustc_symbol_mangling Auto merge of #85296 - bjorn3:plugin_cleanup, r=petrochenkov 2021-08-12 04:30:41 +00:00
rustc_target Rollup merge of #88077 - kit-981:feature/fix-minimum-os-version-in-header, r=petrochenkov 2021-08-22 20:52:52 +02:00
rustc_trait_selection Auto merge of #88166 - BoxyUwU:const-equate-canon, r=lcnr 2021-08-22 18:00:22 +00:00
rustc_traits introduce a Coerce predicate 2021-08-19 17:28:24 -04:00
rustc_ty_utils Fold vtable_trait_upcasting_coercion_new_vptr_slot logic into obligation processing. 2021-08-18 13:00:27 +08:00
rustc_type_ir
rustc_typeck Rollup merge of #88211 - petrochenkov:withhilo, r=jyn514 2021-08-22 20:52:54 +02:00