@@ -1049,24 +1049,18 @@ unsafe fn embed_bitcode(
1049
1049
{
1050
1050
// We don't need custom section flags, create LLVM globals.
1051
1051
let llconst = common:: bytes_in_context ( llcx, bitcode) ;
1052
- let llglobal = llvm:: LLVMAddGlobal (
1053
- llmod,
1054
- common:: val_ty ( llconst) ,
1055
- c"rustc.embedded.module" . as_ptr ( ) ,
1056
- ) ;
1057
- llvm:: LLVMSetInitializer ( llglobal, llconst) ;
1052
+ let llglobal =
1053
+ llvm:: add_global ( llmod, common:: val_ty ( llconst) , c"rustc.embedded.module" ) ;
1054
+ llvm:: set_initializer ( llglobal, llconst) ;
1058
1055
1059
1056
llvm:: set_section ( llglobal, bitcode_section_name ( cgcx) ) ;
1060
1057
llvm:: set_linkage ( llglobal, llvm:: Linkage :: PrivateLinkage ) ;
1061
1058
llvm:: LLVMSetGlobalConstant ( llglobal, llvm:: True ) ;
1062
1059
1063
1060
let llconst = common:: bytes_in_context ( llcx, cmdline. as_bytes ( ) ) ;
1064
- let llglobal = llvm:: LLVMAddGlobal (
1065
- llmod,
1066
- common:: val_ty ( llconst) ,
1067
- c"rustc.embedded.cmdline" . as_ptr ( ) ,
1068
- ) ;
1069
- llvm:: LLVMSetInitializer ( llglobal, llconst) ;
1061
+ let llglobal =
1062
+ llvm:: add_global ( llmod, common:: val_ty ( llconst) , c"rustc.embedded.cmdline" ) ;
1063
+ llvm:: set_initializer ( llglobal, llconst) ;
1070
1064
let section = if cgcx. target_is_like_osx {
1071
1065
c"__LLVM,__cmdline"
1072
1066
} else if cgcx. target_is_like_aix {
@@ -1106,31 +1100,29 @@ fn create_msvc_imps(
1106
1100
// underscores added in front).
1107
1101
let prefix = if cgcx. target_arch == "x86" { "\x01 __imp__" } else { "\x01 __imp_" } ;
1108
1102
1109
- unsafe {
1110
- let ptr_ty = Type :: ptr_llcx ( llcx) ;
1111
- let globals = base:: iter_globals ( llmod)
1112
- . filter ( |& val| {
1113
- llvm:: get_linkage ( val) == llvm:: Linkage :: ExternalLinkage
1114
- && llvm:: LLVMIsDeclaration ( val) == 0
1115
- } )
1116
- . filter_map ( |val| {
1117
- // Exclude some symbols that we know are not Rust symbols.
1118
- let name = llvm:: get_value_name ( val) ;
1119
- if ignored ( name) { None } else { Some ( ( val, name) ) }
1120
- } )
1121
- . map ( move |( val, name) | {
1122
- let mut imp_name = prefix. as_bytes ( ) . to_vec ( ) ;
1123
- imp_name. extend ( name) ;
1124
- let imp_name = CString :: new ( imp_name) . unwrap ( ) ;
1125
- ( imp_name, val)
1126
- } )
1127
- . collect :: < Vec < _ > > ( ) ;
1103
+ let ptr_ty = Type :: ptr_llcx ( llcx) ;
1104
+ let globals = base:: iter_globals ( llmod)
1105
+ . filter ( |& val| {
1106
+ llvm:: get_linkage ( val) == llvm:: Linkage :: ExternalLinkage && !llvm:: is_declaration ( val)
1107
+ } )
1108
+ . filter_map ( |val| {
1109
+ // Exclude some symbols that we know are not Rust symbols.
1110
+ let name = llvm:: get_value_name ( val) ;
1111
+ if ignored ( name) { None } else { Some ( ( val, name) ) }
1112
+ } )
1113
+ . map ( move |( val, name) | {
1114
+ let mut imp_name = prefix. as_bytes ( ) . to_vec ( ) ;
1115
+ imp_name. extend ( name) ;
1116
+ let imp_name = CString :: new ( imp_name) . unwrap ( ) ;
1117
+ ( imp_name, val)
1118
+ } )
1119
+ . collect :: < Vec < _ > > ( ) ;
1128
1120
1129
- for ( imp_name, val) in globals {
1130
- let imp = llvm:: LLVMAddGlobal ( llmod, ptr_ty, imp_name. as_ptr ( ) ) ;
1131
- llvm :: LLVMSetInitializer ( imp , val ) ;
1132
- llvm:: set_linkage ( imp, llvm :: Linkage :: ExternalLinkage ) ;
1133
- }
1121
+ for ( imp_name, val) in globals {
1122
+ let imp = llvm:: add_global ( llmod, ptr_ty, & imp_name) ;
1123
+
1124
+ llvm:: set_initializer ( imp, val ) ;
1125
+ llvm :: set_linkage ( imp , llvm :: Linkage :: ExternalLinkage ) ;
1134
1126
}
1135
1127
1136
1128
// Use this function to exclude certain symbols from `__imp` generation.
0 commit comments