@@ -8,6 +8,7 @@ use crate::llvm_util;
8
8
use crate :: type_:: Type ;
9
9
use crate :: value:: Value ;
10
10
11
+ use cstr:: cstr;
11
12
use rustc_codegen_ssa:: base:: { wants_msvc_seh, wants_wasm_eh} ;
12
13
use rustc_codegen_ssa:: errors as ssa_errors;
13
14
use rustc_codegen_ssa:: traits:: * ;
@@ -214,13 +215,13 @@ pub unsafe fn create_module<'ll>(
214
215
// If skipping the PLT is enabled, we need to add some module metadata
215
216
// to ensure intrinsic calls don't use it.
216
217
if !sess. needs_plt ( ) {
217
- let avoid_plt = c "RtLibUseGOT". as_ptr ( ) . cast ( ) ;
218
+ let avoid_plt = "RtLibUseGOT\0 " . as_ptr ( ) . cast ( ) ;
218
219
llvm:: LLVMRustAddModuleFlag ( llmod, llvm:: LLVMModFlagBehavior :: Warning , avoid_plt, 1 ) ;
219
220
}
220
221
221
222
// Enable canonical jump tables if CFI is enabled. (See https://reviews.llvm.org/D65629.)
222
223
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 ( ) ;
224
225
llvm:: LLVMRustAddModuleFlag (
225
226
llmod,
226
227
llvm:: LLVMModFlagBehavior :: Override ,
@@ -231,7 +232,7 @@ pub unsafe fn create_module<'ll>(
231
232
232
233
// Enable LTO unit splitting if specified or if CFI is enabled. (See https://reviews.llvm.org/D53891.)
233
234
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 ( ) ;
235
236
llvm:: LLVMRustAddModuleFlag (
236
237
llmod,
237
238
llvm:: LLVMModFlagBehavior :: Override ,
@@ -242,7 +243,7 @@ pub unsafe fn create_module<'ll>(
242
243
243
244
// Add "kcfi" module flag if KCFI is enabled. (See https://reviews.llvm.org/D119296.)
244
245
if sess. is_sanitizer_kcfi_enabled ( ) {
245
- let kcfi = c "kcfi". as_ptr ( ) . cast ( ) ;
246
+ let kcfi = "kcfi\0 " . as_ptr ( ) . cast ( ) ;
246
247
llvm:: LLVMRustAddModuleFlag ( llmod, llvm:: LLVMModFlagBehavior :: Override , kcfi, 1 ) ;
247
248
}
248
249
@@ -255,7 +256,7 @@ pub unsafe fn create_module<'ll>(
255
256
llvm:: LLVMRustAddModuleFlag (
256
257
llmod,
257
258
llvm:: LLVMModFlagBehavior :: Warning ,
258
- c "cfguard". as_ptr ( ) as * const _ ,
259
+ "cfguard\0 " . as_ptr ( ) as * const _ ,
259
260
1 ,
260
261
)
261
262
}
@@ -264,7 +265,7 @@ pub unsafe fn create_module<'ll>(
264
265
llvm:: LLVMRustAddModuleFlag (
265
266
llmod,
266
267
llvm:: LLVMModFlagBehavior :: Warning ,
267
- c "cfguard". as_ptr ( ) as * const _ ,
268
+ "cfguard\0 " . as_ptr ( ) as * const _ ,
268
269
2 ,
269
270
)
270
271
}
@@ -282,26 +283,26 @@ pub unsafe fn create_module<'ll>(
282
283
llvm:: LLVMRustAddModuleFlag (
283
284
llmod,
284
285
behavior,
285
- c "branch-target-enforcement". as_ptr ( ) . cast ( ) ,
286
+ "branch-target-enforcement\0 " . as_ptr ( ) . cast ( ) ,
286
287
bti. into ( ) ,
287
288
) ;
288
289
llvm:: LLVMRustAddModuleFlag (
289
290
llmod,
290
291
behavior,
291
- c "sign-return-address". as_ptr ( ) . cast ( ) ,
292
+ "sign-return-address\0 " . as_ptr ( ) . cast ( ) ,
292
293
pac_ret. is_some ( ) . into ( ) ,
293
294
) ;
294
295
let pac_opts = pac_ret. unwrap_or ( PacRet { leaf : false , key : PAuthKey :: A } ) ;
295
296
llvm:: LLVMRustAddModuleFlag (
296
297
llmod,
297
298
behavior,
298
- c "sign-return-address-all". as_ptr ( ) . cast ( ) ,
299
+ "sign-return-address-all\0 " . as_ptr ( ) . cast ( ) ,
299
300
pac_opts. leaf . into ( ) ,
300
301
) ;
301
302
llvm:: LLVMRustAddModuleFlag (
302
303
llmod,
303
304
behavior,
304
- c "sign-return-address-with-bkey". as_ptr ( ) . cast ( ) ,
305
+ "sign-return-address-with-bkey\0 " . as_ptr ( ) . cast ( ) ,
305
306
u32:: from ( pac_opts. key == PAuthKey :: B ) ,
306
307
) ;
307
308
} else {
@@ -317,15 +318,15 @@ pub unsafe fn create_module<'ll>(
317
318
llvm:: LLVMRustAddModuleFlag (
318
319
llmod,
319
320
llvm:: LLVMModFlagBehavior :: Override ,
320
- c "cf-protection-branch". as_ptr ( ) . cast ( ) ,
321
+ "cf-protection-branch\0 " . as_ptr ( ) . cast ( ) ,
321
322
1 ,
322
323
)
323
324
}
324
325
if let CFProtection :: Return | CFProtection :: Full = sess. opts . unstable_opts . cf_protection {
325
326
llvm:: LLVMRustAddModuleFlag (
326
327
llmod,
327
328
llvm:: LLVMModFlagBehavior :: Override ,
328
- c "cf-protection-return". as_ptr ( ) . cast ( ) ,
329
+ "cf-protection-return\0 " . as_ptr ( ) . cast ( ) ,
329
330
1 ,
330
331
)
331
332
}
@@ -334,7 +335,7 @@ pub unsafe fn create_module<'ll>(
334
335
llvm:: LLVMRustAddModuleFlag (
335
336
llmod,
336
337
llvm:: LLVMModFlagBehavior :: Error ,
337
- c "Virtual Function Elim". as_ptr ( ) . cast ( ) ,
338
+ "Virtual Function Elim\0 " . as_ptr ( ) . cast ( ) ,
338
339
1 ,
339
340
) ;
340
341
}
@@ -344,7 +345,7 @@ pub unsafe fn create_module<'ll>(
344
345
llvm:: LLVMRustAddModuleFlag (
345
346
llmod,
346
347
llvm:: LLVMModFlagBehavior :: Warning ,
347
- c "ehcontguard". as_ptr ( ) as * const _ ,
348
+ "ehcontguard\0 " . as_ptr ( ) as * const _ ,
348
349
1 ,
349
350
)
350
351
}
@@ -362,7 +363,7 @@ pub unsafe fn create_module<'ll>(
362
363
) ;
363
364
llvm:: LLVMAddNamedMetadataOperand (
364
365
llmod,
365
- c "llvm.ident". as_ptr ( ) ,
366
+ cstr ! ( "llvm.ident" ) . as_ptr ( ) ,
366
367
llvm:: LLVMMDNodeInContext ( llcx, & name_metadata, 1 ) ,
367
368
) ;
368
369
@@ -510,13 +511,14 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
510
511
}
511
512
512
513
pub ( crate ) fn create_used_variable_impl ( & self , name : & ' static CStr , values : & [ & ' ll Value ] ) {
514
+ let section = cstr ! ( "llvm.metadata" ) ;
513
515
let array = self . const_array ( self . type_ptr ( ) , values) ;
514
516
515
517
unsafe {
516
518
let g = llvm:: LLVMAddGlobal ( self . llmod , self . val_ty ( array) , name. as_ptr ( ) ) ;
517
519
llvm:: LLVMSetInitializer ( g, array) ;
518
520
llvm:: LLVMRustSetLinkage ( g, llvm:: Linkage :: AppendingLinkage ) ;
519
- llvm:: LLVMSetSection ( g, c"llvm.metadata" . as_ptr ( ) ) ;
521
+ llvm:: LLVMSetSection ( g, section . as_ptr ( ) ) ;
520
522
}
521
523
}
522
524
}
0 commit comments