Skip to content

Commit c7ba4bb

Browse files
committed
add externally_initialized to OBJC_SELECTOR_REFERENCES_
1 parent dcbf505 commit c7ba4bb

File tree

5 files changed

+8
-2
lines changed

5 files changed

+8
-2
lines changed

compiler/rustc_codegen_llvm/src/consts.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,7 @@ impl<'ll> CodegenCx<'ll, '_> {
680680
});
681681
set_global_alignment(self, selref_g, self.tcx.data_layout.pointer_align().abi);
682682
llvm::set_initializer(selref_g, selref_llval);
683+
llvm::set_externally_initialized(selref_g, true);
683684
if is_x86_32_macos {
684685
llvm::set_linkage(selref_g, llvm::Linkage::PrivateLinkage);
685686
llvm::set_section(selref_g, c"__OBJC,__message_refs,literal_pointers,no_dead_strip");

compiler/rustc_codegen_llvm/src/llvm/ffi.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,6 +1189,7 @@ unsafe extern "C" {
11891189
pub(crate) safe fn LLVMSetGlobalConstant(GlobalVar: &Value, IsConstant: Bool);
11901190
pub(crate) safe fn LLVMSetTailCall(CallInst: &Value, IsTailCall: Bool);
11911191
pub(crate) safe fn LLVMSetTailCallKind(CallInst: &Value, kind: TailCallKind);
1192+
pub(crate) safe fn LLVMSetExternallyInitialized(GlobalVar: &Value, IsExtInit: Bool);
11921193

11931194
// Operations on attributes
11941195
pub(crate) fn LLVMCreateStringAttribute(

compiler/rustc_codegen_llvm/src/llvm/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,10 @@ pub(crate) fn set_alignment(llglobal: &Value, align: Align) {
248248
}
249249
}
250250

251+
pub(crate) fn set_externally_initialized(llglobal: &Value, is_ext_init: bool) {
252+
LLVMSetExternallyInitialized(llglobal, if is_ext_init { ffi::True } else { ffi::False });
253+
}
254+
251255
/// Get the `name`d comdat from `llmod` and assign it to `llglobal`.
252256
///
253257
/// Inserts the comdat into `llmod` if it does not exist.

tests/codegen-llvm/darwin-objc-32bit-x86-macos.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ pub fn get_selector() -> *mut () {
3535
// CHECK: @OBJC_CLASS_REFERENCES_.{{[0-9]+}} = private global ptr @OBJC_CLASS_NAME_.{{[0-9]+}}, section "__OBJC,__cls_refs,literal_pointers,no_dead_strip", align 4
3636

3737
// CHECK: @OBJC_METH_VAR_NAME_.{{[0-9]+}} = private unnamed_addr constant [9 x i8] c"myMethod\00", section "__TEXT,__cstring,cstring_literals", align 1
38-
// CHECK: @OBJC_SELECTOR_REFERENCES_.{{[0-9]+}} = private global ptr @OBJC_METH_VAR_NAME_.{{[0-9]+}}, section "__OBJC,__message_refs,literal_pointers,no_dead_strip", align 4
38+
// CHECK: @OBJC_SELECTOR_REFERENCES_.{{[0-9]+}} = private externally_initialized global ptr @OBJC_METH_VAR_NAME_.{{[0-9]+}}, section "__OBJC,__message_refs,literal_pointers,no_dead_strip", align 4
3939

4040
// CHECK: @OBJC_CLASS_NAME_.{{[0-9]+}} = private unnamed_addr constant [1 x i8] zeroinitializer, section "__TEXT,__cstring,cstring_literals", align 1
4141
// CHECK: @OBJC_MODULES = private global %struct._objc_module { i32 7, i32 16, ptr @OBJC_CLASS_NAME_.{{[0-9]+}}, ptr null }, section "__OBJC,__module_info,regular,no_dead_strip", align 4

tests/codegen-llvm/darwin-objc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ pub fn get_selector() -> *mut () {
5959
// aarch64_ios_sim-SAME: align 8
6060

6161
// CHECK: @OBJC_METH_VAR_NAME_.{{[0-9]+}} = private unnamed_addr constant [9 x i8] c"myMethod\00", section "__TEXT,__objc_methname,cstring_literals", align 1
62-
// CHECK: @OBJC_SELECTOR_REFERENCES_.{{[0-9]+}} = internal global ptr @OBJC_METH_VAR_NAME_.{{[0-9]+}}, section "__DATA,__objc_selrefs,literal_pointers,no_dead_strip",
62+
// CHECK: @OBJC_SELECTOR_REFERENCES_.{{[0-9]+}} = internal externally_initialized global ptr @OBJC_METH_VAR_NAME_.{{[0-9]+}}, section "__DATA,__objc_selrefs,literal_pointers,no_dead_strip",
6363
// x86_64_macos-SAME: align 8
6464
// aarch64_macos-SAME: align 8
6565
// i386_ios-SAME: align 4

0 commit comments

Comments
 (0)