@@ -8,6 +8,7 @@ use crate::llvm_util;
88use crate :: type_:: Type ;
99use crate :: value:: Value ;
1010
11+ use cstr:: cstr;
1112use rustc_codegen_ssa:: base:: { wants_msvc_seh, wants_wasm_eh} ;
1213use rustc_codegen_ssa:: errors as ssa_errors;
1314use rustc_codegen_ssa:: traits:: * ;
@@ -214,13 +215,13 @@ pub unsafe fn create_module<'ll>(
214215 // If skipping the PLT is enabled, we need to add some module metadata
215216 // to ensure intrinsic calls don't use it.
216217 if !sess. needs_plt ( ) {
217- let avoid_plt = c "RtLibUseGOT". as_ptr ( ) . cast ( ) ;
218+ let avoid_plt = "RtLibUseGOT\0 " . as_ptr ( ) . cast ( ) ;
218219 llvm:: LLVMRustAddModuleFlag ( llmod, llvm:: LLVMModFlagBehavior :: Warning , avoid_plt, 1 ) ;
219220 }
220221
221222 // Enable canonical jump tables if CFI is enabled. (See https://reviews.llvm.org/D65629.)
222223 if sess. is_sanitizer_cfi_canonical_jump_tables_enabled ( ) && sess. is_sanitizer_cfi_enabled ( ) {
223- let canonical_jump_tables = c "CFI Canonical Jump Tables". as_ptr ( ) . cast ( ) ;
224+ let canonical_jump_tables = "CFI Canonical Jump Tables\0 " . as_ptr ( ) . cast ( ) ;
224225 llvm:: LLVMRustAddModuleFlag (
225226 llmod,
226227 llvm:: LLVMModFlagBehavior :: Override ,
@@ -231,7 +232,7 @@ pub unsafe fn create_module<'ll>(
231232
232233 // Enable LTO unit splitting if specified or if CFI is enabled. (See https://reviews.llvm.org/D53891.)
233234 if sess. is_split_lto_unit_enabled ( ) || sess. is_sanitizer_cfi_enabled ( ) {
234- let enable_split_lto_unit = c "EnableSplitLTOUnit". as_ptr ( ) . cast ( ) ;
235+ let enable_split_lto_unit = "EnableSplitLTOUnit\0 " . as_ptr ( ) . cast ( ) ;
235236 llvm:: LLVMRustAddModuleFlag (
236237 llmod,
237238 llvm:: LLVMModFlagBehavior :: Override ,
@@ -242,7 +243,7 @@ pub unsafe fn create_module<'ll>(
242243
243244 // Add "kcfi" module flag if KCFI is enabled. (See https://reviews.llvm.org/D119296.)
244245 if sess. is_sanitizer_kcfi_enabled ( ) {
245- let kcfi = c "kcfi". as_ptr ( ) . cast ( ) ;
246+ let kcfi = "kcfi\0 " . as_ptr ( ) . cast ( ) ;
246247 llvm:: LLVMRustAddModuleFlag ( llmod, llvm:: LLVMModFlagBehavior :: Override , kcfi, 1 ) ;
247248 }
248249
@@ -255,7 +256,7 @@ pub unsafe fn create_module<'ll>(
255256 llvm:: LLVMRustAddModuleFlag (
256257 llmod,
257258 llvm:: LLVMModFlagBehavior :: Warning ,
258- c "cfguard". as_ptr ( ) as * const _ ,
259+ "cfguard\0 " . as_ptr ( ) as * const _ ,
259260 1 ,
260261 )
261262 }
@@ -264,7 +265,7 @@ pub unsafe fn create_module<'ll>(
264265 llvm:: LLVMRustAddModuleFlag (
265266 llmod,
266267 llvm:: LLVMModFlagBehavior :: Warning ,
267- c "cfguard". as_ptr ( ) as * const _ ,
268+ "cfguard\0 " . as_ptr ( ) as * const _ ,
268269 2 ,
269270 )
270271 }
@@ -282,26 +283,26 @@ pub unsafe fn create_module<'ll>(
282283 llvm:: LLVMRustAddModuleFlag (
283284 llmod,
284285 behavior,
285- c "branch-target-enforcement". as_ptr ( ) . cast ( ) ,
286+ "branch-target-enforcement\0 " . as_ptr ( ) . cast ( ) ,
286287 bti. into ( ) ,
287288 ) ;
288289 llvm:: LLVMRustAddModuleFlag (
289290 llmod,
290291 behavior,
291- c "sign-return-address". as_ptr ( ) . cast ( ) ,
292+ "sign-return-address\0 " . as_ptr ( ) . cast ( ) ,
292293 pac_ret. is_some ( ) . into ( ) ,
293294 ) ;
294295 let pac_opts = pac_ret. unwrap_or ( PacRet { leaf : false , key : PAuthKey :: A } ) ;
295296 llvm:: LLVMRustAddModuleFlag (
296297 llmod,
297298 behavior,
298- c "sign-return-address-all". as_ptr ( ) . cast ( ) ,
299+ "sign-return-address-all\0 " . as_ptr ( ) . cast ( ) ,
299300 pac_opts. leaf . into ( ) ,
300301 ) ;
301302 llvm:: LLVMRustAddModuleFlag (
302303 llmod,
303304 behavior,
304- c "sign-return-address-with-bkey". as_ptr ( ) . cast ( ) ,
305+ "sign-return-address-with-bkey\0 " . as_ptr ( ) . cast ( ) ,
305306 u32:: from ( pac_opts. key == PAuthKey :: B ) ,
306307 ) ;
307308 } else {
@@ -317,15 +318,15 @@ pub unsafe fn create_module<'ll>(
317318 llvm:: LLVMRustAddModuleFlag (
318319 llmod,
319320 llvm:: LLVMModFlagBehavior :: Override ,
320- c "cf-protection-branch". as_ptr ( ) . cast ( ) ,
321+ "cf-protection-branch\0 " . as_ptr ( ) . cast ( ) ,
321322 1 ,
322323 )
323324 }
324325 if let CFProtection :: Return | CFProtection :: Full = sess. opts . unstable_opts . cf_protection {
325326 llvm:: LLVMRustAddModuleFlag (
326327 llmod,
327328 llvm:: LLVMModFlagBehavior :: Override ,
328- c "cf-protection-return". as_ptr ( ) . cast ( ) ,
329+ "cf-protection-return\0 " . as_ptr ( ) . cast ( ) ,
329330 1 ,
330331 )
331332 }
@@ -334,7 +335,7 @@ pub unsafe fn create_module<'ll>(
334335 llvm:: LLVMRustAddModuleFlag (
335336 llmod,
336337 llvm:: LLVMModFlagBehavior :: Error ,
337- c "Virtual Function Elim". as_ptr ( ) . cast ( ) ,
338+ "Virtual Function Elim\0 " . as_ptr ( ) . cast ( ) ,
338339 1 ,
339340 ) ;
340341 }
@@ -344,7 +345,7 @@ pub unsafe fn create_module<'ll>(
344345 llvm:: LLVMRustAddModuleFlag (
345346 llmod,
346347 llvm:: LLVMModFlagBehavior :: Warning ,
347- c "ehcontguard". as_ptr ( ) as * const _ ,
348+ "ehcontguard\0 " . as_ptr ( ) as * const _ ,
348349 1 ,
349350 )
350351 }
@@ -362,7 +363,7 @@ pub unsafe fn create_module<'ll>(
362363 ) ;
363364 llvm:: LLVMAddNamedMetadataOperand (
364365 llmod,
365- c "llvm.ident". as_ptr ( ) ,
366+ cstr ! ( "llvm.ident" ) . as_ptr ( ) ,
366367 llvm:: LLVMMDNodeInContext ( llcx, & name_metadata, 1 ) ,
367368 ) ;
368369
@@ -510,13 +511,14 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
510511 }
511512
512513 pub ( crate ) fn create_used_variable_impl ( & self , name : & ' static CStr , values : & [ & ' ll Value ] ) {
514+ let section = cstr ! ( "llvm.metadata" ) ;
513515 let array = self . const_array ( self . type_ptr ( ) , values) ;
514516
515517 unsafe {
516518 let g = llvm:: LLVMAddGlobal ( self . llmod , self . val_ty ( array) , name. as_ptr ( ) ) ;
517519 llvm:: LLVMSetInitializer ( g, array) ;
518520 llvm:: LLVMRustSetLinkage ( g, llvm:: Linkage :: AppendingLinkage ) ;
519- llvm:: LLVMSetSection ( g, c"llvm.metadata" . as_ptr ( ) ) ;
521+ llvm:: LLVMSetSection ( g, section . as_ptr ( ) ) ;
520522 }
521523 }
522524}
0 commit comments