compiler: replace cstr macro with c str literals in compiler and few other c str replacements

This commit is contained in:
klensy 2023-12-03 14:02:31 +03:00
parent 71940e0a8a
commit 26e69a8816
14 changed files with 42 additions and 71 deletions

View File

@ -869,16 +869,6 @@ dependencies = [
"typenum", "typenum",
] ]
[[package]]
name = "cstr"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c11a39d776a3b35896711da8a04dc1835169dcd36f710878187637314e47941b"
dependencies = [
"proc-macro2",
"quote",
]
[[package]] [[package]]
name = "ctrlc" name = "ctrlc"
version = "3.4.0" version = "3.4.0"
@ -3585,7 +3575,6 @@ name = "rustc_codegen_llvm"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
"cstr",
"itertools", "itertools",
"libc", "libc",
"measureme", "measureme",

View File

@ -9,7 +9,6 @@ test = false
[dependencies] [dependencies]
# tidy-alphabetical-start # tidy-alphabetical-start
bitflags = "1.0" bitflags = "1.0"
cstr = "0.2"
itertools = "0.11" itertools = "0.11"
libc = "0.2" libc = "0.2"
measureme = "10.0.0" measureme = "10.0.0"

View File

@ -146,7 +146,7 @@ fn create_wrapper_function(
} }
llvm::LLVMRustSetVisibility(callee, llvm::Visibility::Hidden); llvm::LLVMRustSetVisibility(callee, llvm::Visibility::Hidden);
let llbb = llvm::LLVMAppendBasicBlockInContext(llcx, llfn, "entry\0".as_ptr().cast()); let llbb = llvm::LLVMAppendBasicBlockInContext(llcx, llfn, c"entry".as_ptr().cast());
let llbuilder = llvm::LLVMCreateBuilderInContext(llcx); let llbuilder = llvm::LLVMCreateBuilderInContext(llcx);
llvm::LLVMPositionBuilderAtEnd(llbuilder, llbb); llvm::LLVMPositionBuilderAtEnd(llbuilder, llbb);

View File

@ -631,7 +631,7 @@ pub(crate) fn run_pass_manager(
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
module.module_llvm.llmod(), module.module_llvm.llmod(),
llvm::LLVMModFlagBehavior::Error, llvm::LLVMModFlagBehavior::Error,
"LTOPostLink\0".as_ptr().cast(), c"LTOPostLink".as_ptr().cast(),
1, 1,
); );
} }

View File

@ -916,6 +916,7 @@ fn target_is_aix(cgcx: &CodegenContext<LlvmCodegenBackend>) -> bool {
cgcx.opts.target_triple.triple().contains("-aix") cgcx.opts.target_triple.triple().contains("-aix")
} }
//FIXME use c string literals here too
pub(crate) fn bitcode_section_name(cgcx: &CodegenContext<LlvmCodegenBackend>) -> &'static str { pub(crate) fn bitcode_section_name(cgcx: &CodegenContext<LlvmCodegenBackend>) -> &'static str {
if target_is_apple(cgcx) { if target_is_apple(cgcx) {
"__LLVM,__bitcode\0" "__LLVM,__bitcode\0"
@ -994,7 +995,7 @@ unsafe fn embed_bitcode(
let llglobal = llvm::LLVMAddGlobal( let llglobal = llvm::LLVMAddGlobal(
llmod, llmod,
common::val_ty(llconst), common::val_ty(llconst),
"rustc.embedded.module\0".as_ptr().cast(), c"rustc.embedded.module".as_ptr().cast(),
); );
llvm::LLVMSetInitializer(llglobal, llconst); llvm::LLVMSetInitializer(llglobal, llconst);
@ -1007,15 +1008,15 @@ unsafe fn embed_bitcode(
let llglobal = llvm::LLVMAddGlobal( let llglobal = llvm::LLVMAddGlobal(
llmod, llmod,
common::val_ty(llconst), common::val_ty(llconst),
"rustc.embedded.cmdline\0".as_ptr().cast(), c"rustc.embedded.cmdline".as_ptr().cast(),
); );
llvm::LLVMSetInitializer(llglobal, llconst); llvm::LLVMSetInitializer(llglobal, llconst);
let section = if is_apple { let section = if is_apple {
"__LLVM,__cmdline\0" c"__LLVM,__cmdline"
} else if is_aix { } else if is_aix {
".info\0" c".info"
} else { } else {
".llvmcmd\0" c".llvmcmd"
}; };
llvm::LLVMSetSection(llglobal, section.as_ptr().cast()); llvm::LLVMSetSection(llglobal, section.as_ptr().cast());
llvm::LLVMRustSetLinkage(llglobal, llvm::Linkage::PrivateLinkage); llvm::LLVMRustSetLinkage(llglobal, llvm::Linkage::PrivateLinkage);

View File

@ -19,8 +19,6 @@ use crate::context::CodegenCx;
use crate::llvm; use crate::llvm;
use crate::value::Value; use crate::value::Value;
use cstr::cstr;
use rustc_codegen_ssa::base::maybe_create_entry_wrapper; use rustc_codegen_ssa::base::maybe_create_entry_wrapper;
use rustc_codegen_ssa::mono_item::MonoItemExt; use rustc_codegen_ssa::mono_item::MonoItemExt;
use rustc_codegen_ssa::traits::*; use rustc_codegen_ssa::traits::*;
@ -110,11 +108,11 @@ pub fn compile_codegen_unit(tcx: TyCtxt<'_>, cgu_name: Symbol) -> (ModuleCodegen
// Create the llvm.used and llvm.compiler.used variables. // Create the llvm.used and llvm.compiler.used variables.
if !cx.used_statics.borrow().is_empty() { if !cx.used_statics.borrow().is_empty() {
cx.create_used_variable_impl(cstr!("llvm.used"), &*cx.used_statics.borrow()); cx.create_used_variable_impl(c"llvm.used", &*cx.used_statics.borrow());
} }
if !cx.compiler_used_statics.borrow().is_empty() { if !cx.compiler_used_statics.borrow().is_empty() {
cx.create_used_variable_impl( cx.create_used_variable_impl(
cstr!("llvm.compiler.used"), c"llvm.compiler.used",
&*cx.compiler_used_statics.borrow(), &*cx.compiler_used_statics.borrow(),
); );
} }

View File

@ -7,7 +7,6 @@ use crate::llvm_util;
use crate::type_::Type; use crate::type_::Type;
use crate::type_of::LayoutLlvmExt; use crate::type_of::LayoutLlvmExt;
use crate::value::Value; use crate::value::Value;
use cstr::cstr;
use libc::{c_char, c_uint}; use libc::{c_char, c_uint};
use rustc_codegen_ssa::common::{IntPredicate, RealPredicate, SynchronizationScope, TypeKind}; use rustc_codegen_ssa::common::{IntPredicate, RealPredicate, SynchronizationScope, TypeKind};
use rustc_codegen_ssa::mir::operand::{OperandRef, OperandValue}; use rustc_codegen_ssa::mir::operand::{OperandRef, OperandValue};
@ -27,7 +26,6 @@ use rustc_target::abi::{self, call::FnAbi, Align, Size, WrappingRange};
use rustc_target::spec::{HasTargetSpec, SanitizerSet, Target}; use rustc_target::spec::{HasTargetSpec, SanitizerSet, Target};
use smallvec::SmallVec; use smallvec::SmallVec;
use std::borrow::Cow; use std::borrow::Cow;
use std::ffi::CStr;
use std::iter; use std::iter;
use std::ops::Deref; use std::ops::Deref;
use std::ptr; use std::ptr;
@ -47,13 +45,10 @@ impl Drop for Builder<'_, '_, '_> {
} }
} }
// FIXME(eddyb) use a checked constructor when they become `const fn`.
const EMPTY_C_STR: &CStr = unsafe { CStr::from_bytes_with_nul_unchecked(b"\0") };
/// Empty string, to be used where LLVM expects an instruction name, indicating /// Empty string, to be used where LLVM expects an instruction name, indicating
/// that the instruction is to be left unnamed (i.e. numbered, in textual IR). /// that the instruction is to be left unnamed (i.e. numbered, in textual IR).
// FIXME(eddyb) pass `&CStr` directly to FFI once it's a thin pointer. // FIXME(eddyb) pass `&CStr` directly to FFI once it's a thin pointer.
const UNNAMED: *const c_char = EMPTY_C_STR.as_ptr(); const UNNAMED: *const c_char = c"".as_ptr();
impl<'ll, 'tcx> BackendTypes for Builder<'_, 'll, 'tcx> { impl<'ll, 'tcx> BackendTypes for Builder<'_, 'll, 'tcx> {
type Value = <CodegenCx<'ll, 'tcx> as BackendTypes>::Value; type Value = <CodegenCx<'ll, 'tcx> as BackendTypes>::Value;
@ -1003,14 +998,13 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
} }
fn cleanup_pad(&mut self, parent: Option<&'ll Value>, args: &[&'ll Value]) -> Funclet<'ll> { fn cleanup_pad(&mut self, parent: Option<&'ll Value>, args: &[&'ll Value]) -> Funclet<'ll> {
let name = cstr!("cleanuppad");
let ret = unsafe { let ret = unsafe {
llvm::LLVMBuildCleanupPad( llvm::LLVMBuildCleanupPad(
self.llbuilder, self.llbuilder,
parent, parent,
args.as_ptr(), args.as_ptr(),
args.len() as c_uint, args.len() as c_uint,
name.as_ptr(), c"cleanuppad".as_ptr(),
) )
}; };
Funclet::new(ret.expect("LLVM does not have support for cleanuppad")) Funclet::new(ret.expect("LLVM does not have support for cleanuppad"))
@ -1024,14 +1018,13 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
} }
fn catch_pad(&mut self, parent: &'ll Value, args: &[&'ll Value]) -> Funclet<'ll> { fn catch_pad(&mut self, parent: &'ll Value, args: &[&'ll Value]) -> Funclet<'ll> {
let name = cstr!("catchpad");
let ret = unsafe { let ret = unsafe {
llvm::LLVMBuildCatchPad( llvm::LLVMBuildCatchPad(
self.llbuilder, self.llbuilder,
parent, parent,
args.as_ptr(), args.as_ptr(),
args.len() as c_uint, args.len() as c_uint,
name.as_ptr(), c"catchpad".as_ptr(),
) )
}; };
Funclet::new(ret.expect("LLVM does not have support for catchpad")) Funclet::new(ret.expect("LLVM does not have support for catchpad"))
@ -1043,14 +1036,13 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
unwind: Option<&'ll BasicBlock>, unwind: Option<&'ll BasicBlock>,
handlers: &[&'ll BasicBlock], handlers: &[&'ll BasicBlock],
) -> &'ll Value { ) -> &'ll Value {
let name = cstr!("catchswitch");
let ret = unsafe { let ret = unsafe {
llvm::LLVMBuildCatchSwitch( llvm::LLVMBuildCatchSwitch(
self.llbuilder, self.llbuilder,
parent, parent,
unwind, unwind,
handlers.len() as c_uint, handlers.len() as c_uint,
name.as_ptr(), c"catchswitch".as_ptr(),
) )
}; };
let ret = ret.expect("LLVM does not have support for catchswitch"); let ret = ret.expect("LLVM does not have support for catchswitch");

View File

@ -8,7 +8,6 @@ use crate::llvm::{self, True};
use crate::type_::Type; use crate::type_::Type;
use crate::type_of::LayoutLlvmExt; use crate::type_of::LayoutLlvmExt;
use crate::value::Value; use crate::value::Value;
use cstr::cstr;
use rustc_codegen_ssa::traits::*; use rustc_codegen_ssa::traits::*;
use rustc_hir::def_id::DefId; use rustc_hir::def_id::DefId;
use rustc_middle::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs}; use rustc_middle::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs};
@ -476,9 +475,9 @@ impl<'ll> StaticMethods for CodegenCx<'ll, '_> {
.all(|&byte| byte == 0); .all(|&byte| byte == 0);
let sect_name = if all_bytes_are_zero { let sect_name = if all_bytes_are_zero {
cstr!("__DATA,__thread_bss") c"__DATA,__thread_bss"
} else { } else {
cstr!("__DATA,__thread_data") c"__DATA,__thread_data"
}; };
llvm::LLVMSetSection(g, sect_name.as_ptr()); llvm::LLVMSetSection(g, sect_name.as_ptr());
} }
@ -507,7 +506,7 @@ impl<'ll> StaticMethods for CodegenCx<'ll, '_> {
let val = llvm::LLVMMetadataAsValue(self.llcx, meta); let val = llvm::LLVMMetadataAsValue(self.llcx, meta);
llvm::LLVMAddNamedMetadataOperand( llvm::LLVMAddNamedMetadataOperand(
self.llmod, self.llmod,
"wasm.custom_sections\0".as_ptr().cast(), c"wasm.custom_sections".as_ptr().cast(),
val, val,
); );
} }

View File

@ -8,7 +8,6 @@ use crate::llvm_util;
use crate::type_::Type; use crate::type_::Type;
use crate::value::Value; use crate::value::Value;
use cstr::cstr;
use rustc_codegen_ssa::base::{wants_msvc_seh, wants_wasm_eh}; use rustc_codegen_ssa::base::{wants_msvc_seh, wants_wasm_eh};
use rustc_codegen_ssa::errors as ssa_errors; use rustc_codegen_ssa::errors as ssa_errors;
use rustc_codegen_ssa::traits::*; use rustc_codegen_ssa::traits::*;
@ -214,13 +213,13 @@ pub unsafe fn create_module<'ll>(
// If skipping the PLT is enabled, we need to add some module metadata // If skipping the PLT is enabled, we need to add some module metadata
// to ensure intrinsic calls don't use it. // to ensure intrinsic calls don't use it.
if !sess.needs_plt() { if !sess.needs_plt() {
let avoid_plt = "RtLibUseGOT\0".as_ptr().cast(); let avoid_plt = c"RtLibUseGOT".as_ptr().cast();
llvm::LLVMRustAddModuleFlag(llmod, llvm::LLVMModFlagBehavior::Warning, avoid_plt, 1); llvm::LLVMRustAddModuleFlag(llmod, llvm::LLVMModFlagBehavior::Warning, avoid_plt, 1);
} }
// Enable canonical jump tables if CFI is enabled. (See https://reviews.llvm.org/D65629.) // Enable canonical jump tables if CFI is enabled. (See https://reviews.llvm.org/D65629.)
if sess.is_sanitizer_cfi_canonical_jump_tables_enabled() && sess.is_sanitizer_cfi_enabled() { if sess.is_sanitizer_cfi_canonical_jump_tables_enabled() && sess.is_sanitizer_cfi_enabled() {
let canonical_jump_tables = "CFI Canonical Jump Tables\0".as_ptr().cast(); let canonical_jump_tables = c"CFI Canonical Jump Tables".as_ptr().cast();
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
llvm::LLVMModFlagBehavior::Override, llvm::LLVMModFlagBehavior::Override,
@ -231,7 +230,7 @@ pub unsafe fn create_module<'ll>(
// Enable LTO unit splitting if specified or if CFI is enabled. (See https://reviews.llvm.org/D53891.) // Enable LTO unit splitting if specified or if CFI is enabled. (See https://reviews.llvm.org/D53891.)
if sess.is_split_lto_unit_enabled() || sess.is_sanitizer_cfi_enabled() { if sess.is_split_lto_unit_enabled() || sess.is_sanitizer_cfi_enabled() {
let enable_split_lto_unit = "EnableSplitLTOUnit\0".as_ptr().cast(); let enable_split_lto_unit = c"EnableSplitLTOUnit".as_ptr().cast();
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
llvm::LLVMModFlagBehavior::Override, llvm::LLVMModFlagBehavior::Override,
@ -242,7 +241,7 @@ pub unsafe fn create_module<'ll>(
// Add "kcfi" module flag if KCFI is enabled. (See https://reviews.llvm.org/D119296.) // Add "kcfi" module flag if KCFI is enabled. (See https://reviews.llvm.org/D119296.)
if sess.is_sanitizer_kcfi_enabled() { if sess.is_sanitizer_kcfi_enabled() {
let kcfi = "kcfi\0".as_ptr().cast(); let kcfi = c"kcfi".as_ptr().cast();
llvm::LLVMRustAddModuleFlag(llmod, llvm::LLVMModFlagBehavior::Override, kcfi, 1); llvm::LLVMRustAddModuleFlag(llmod, llvm::LLVMModFlagBehavior::Override, kcfi, 1);
} }
@ -255,7 +254,7 @@ pub unsafe fn create_module<'ll>(
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
llvm::LLVMModFlagBehavior::Warning, llvm::LLVMModFlagBehavior::Warning,
"cfguard\0".as_ptr() as *const _, c"cfguard".as_ptr() as *const _,
1, 1,
) )
} }
@ -264,7 +263,7 @@ pub unsafe fn create_module<'ll>(
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
llvm::LLVMModFlagBehavior::Warning, llvm::LLVMModFlagBehavior::Warning,
"cfguard\0".as_ptr() as *const _, c"cfguard".as_ptr() as *const _,
2, 2,
) )
} }
@ -282,26 +281,26 @@ pub unsafe fn create_module<'ll>(
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
behavior, behavior,
"branch-target-enforcement\0".as_ptr().cast(), c"branch-target-enforcement".as_ptr().cast(),
bti.into(), bti.into(),
); );
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
behavior, behavior,
"sign-return-address\0".as_ptr().cast(), c"sign-return-address".as_ptr().cast(),
pac_ret.is_some().into(), pac_ret.is_some().into(),
); );
let pac_opts = pac_ret.unwrap_or(PacRet { leaf: false, key: PAuthKey::A }); let pac_opts = pac_ret.unwrap_or(PacRet { leaf: false, key: PAuthKey::A });
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
behavior, behavior,
"sign-return-address-all\0".as_ptr().cast(), c"sign-return-address-all".as_ptr().cast(),
pac_opts.leaf.into(), pac_opts.leaf.into(),
); );
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
behavior, behavior,
"sign-return-address-with-bkey\0".as_ptr().cast(), c"sign-return-address-with-bkey".as_ptr().cast(),
u32::from(pac_opts.key == PAuthKey::B), u32::from(pac_opts.key == PAuthKey::B),
); );
} else { } else {
@ -317,7 +316,7 @@ pub unsafe fn create_module<'ll>(
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
llvm::LLVMModFlagBehavior::Override, llvm::LLVMModFlagBehavior::Override,
"cf-protection-branch\0".as_ptr().cast(), c"cf-protection-branch".as_ptr().cast(),
1, 1,
) )
} }
@ -325,7 +324,7 @@ pub unsafe fn create_module<'ll>(
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
llvm::LLVMModFlagBehavior::Override, llvm::LLVMModFlagBehavior::Override,
"cf-protection-return\0".as_ptr().cast(), c"cf-protection-return".as_ptr().cast(),
1, 1,
) )
} }
@ -334,7 +333,7 @@ pub unsafe fn create_module<'ll>(
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
llvm::LLVMModFlagBehavior::Error, llvm::LLVMModFlagBehavior::Error,
"Virtual Function Elim\0".as_ptr().cast(), c"Virtual Function Elim".as_ptr().cast(),
1, 1,
); );
} }
@ -344,7 +343,7 @@ pub unsafe fn create_module<'ll>(
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
llmod, llmod,
llvm::LLVMModFlagBehavior::Warning, llvm::LLVMModFlagBehavior::Warning,
"ehcontguard\0".as_ptr() as *const _, c"ehcontguard".as_ptr() as *const _,
1, 1,
) )
} }
@ -362,7 +361,7 @@ pub unsafe fn create_module<'ll>(
); );
llvm::LLVMAddNamedMetadataOperand( llvm::LLVMAddNamedMetadataOperand(
llmod, llmod,
cstr!("llvm.ident").as_ptr(), c"llvm.ident".as_ptr(),
llvm::LLVMMDNodeInContext(llcx, &name_metadata, 1), llvm::LLVMMDNodeInContext(llcx, &name_metadata, 1),
); );
@ -510,14 +509,13 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
} }
pub(crate) fn create_used_variable_impl(&self, name: &'static CStr, values: &[&'ll Value]) { pub(crate) fn create_used_variable_impl(&self, name: &'static CStr, values: &[&'ll Value]) {
let section = cstr!("llvm.metadata");
let array = self.const_array(self.type_ptr(), values); let array = self.const_array(self.type_ptr(), values);
unsafe { unsafe {
let g = llvm::LLVMAddGlobal(self.llmod, self.val_ty(array), name.as_ptr()); let g = llvm::LLVMAddGlobal(self.llmod, self.val_ty(array), name.as_ptr());
llvm::LLVMSetInitializer(g, array); llvm::LLVMSetInitializer(g, array);
llvm::LLVMRustSetLinkage(g, llvm::Linkage::AppendingLinkage); llvm::LLVMRustSetLinkage(g, llvm::Linkage::AppendingLinkage);
llvm::LLVMSetSection(g, section.as_ptr()); llvm::LLVMSetSection(g, c"llvm.metadata".as_ptr());
} }
} }
} }

View File

@ -30,14 +30,13 @@ pub fn insert_reference_to_gdb_debug_scripts_section_global(bx: &mut Builder<'_,
/// Allocates the global variable responsible for the .debug_gdb_scripts binary /// Allocates the global variable responsible for the .debug_gdb_scripts binary
/// section. /// section.
pub fn get_or_insert_gdb_debug_scripts_section_global<'ll>(cx: &CodegenCx<'ll, '_>) -> &'ll Value { pub fn get_or_insert_gdb_debug_scripts_section_global<'ll>(cx: &CodegenCx<'ll, '_>) -> &'ll Value {
let c_section_var_name = "__rustc_debug_gdb_scripts_section__\0"; let c_section_var_name = c"__rustc_debug_gdb_scripts_section__";
let section_var_name = &c_section_var_name[..c_section_var_name.len() - 1]; let section_var_name = c_section_var_name.to_str().unwrap();
let section_var = let section_var =
unsafe { llvm::LLVMGetNamedGlobal(cx.llmod, c_section_var_name.as_ptr().cast()) }; unsafe { llvm::LLVMGetNamedGlobal(cx.llmod, c_section_var_name.as_ptr().cast()) };
section_var.unwrap_or_else(|| { section_var.unwrap_or_else(|| {
let section_name = b".debug_gdb_scripts\0";
let mut section_contents = Vec::new(); let mut section_contents = Vec::new();
// Add the pretty printers for the standard library first. // Add the pretty printers for the standard library first.
@ -70,7 +69,7 @@ pub fn get_or_insert_gdb_debug_scripts_section_global<'ll>(cx: &CodegenCx<'ll, '
let section_var = cx let section_var = cx
.define_global(section_var_name, llvm_type) .define_global(section_var_name, llvm_type)
.unwrap_or_else(|| bug!("symbol `{}` is already defined", section_var_name)); .unwrap_or_else(|| bug!("symbol `{}` is already defined", section_var_name));
llvm::LLVMSetSection(section_var, section_name.as_ptr().cast()); llvm::LLVMSetSection(section_var, c".debug_gdb_scripts".as_ptr().cast());
llvm::LLVMSetInitializer(section_var, cx.const_bytes(section_contents)); llvm::LLVMSetInitializer(section_var, cx.const_bytes(section_contents));
llvm::LLVMSetGlobalConstant(section_var, llvm::True); llvm::LLVMSetGlobalConstant(section_var, llvm::True);
llvm::LLVMSetUnnamedAddress(section_var, llvm::UnnamedAddr::Global); llvm::LLVMSetUnnamedAddress(section_var, llvm::UnnamedAddr::Global);

View File

@ -20,7 +20,6 @@ use crate::llvm::debuginfo::{
}; };
use crate::value::Value; use crate::value::Value;
use cstr::cstr;
use rustc_codegen_ssa::debuginfo::type_names::cpp_like_debuginfo; use rustc_codegen_ssa::debuginfo::type_names::cpp_like_debuginfo;
use rustc_codegen_ssa::debuginfo::type_names::VTableNameKind; use rustc_codegen_ssa::debuginfo::type_names::VTableNameKind;
use rustc_codegen_ssa::traits::*; use rustc_codegen_ssa::traits::*;
@ -854,7 +853,6 @@ pub fn build_compile_unit_di_node<'ll, 'tcx>(
use rustc_session::RemapFileNameExt; use rustc_session::RemapFileNameExt;
let name_in_debuginfo = name_in_debuginfo.to_string_lossy(); let name_in_debuginfo = name_in_debuginfo.to_string_lossy();
let work_dir = tcx.sess.opts.working_dir.for_codegen(tcx.sess).to_string_lossy(); let work_dir = tcx.sess.opts.working_dir.for_codegen(tcx.sess).to_string_lossy();
let flags = "\0";
let output_filenames = tcx.output_filenames(()); let output_filenames = tcx.output_filenames(());
let split_name = if tcx.sess.target_can_use_split_dwarf() { let split_name = if tcx.sess.target_can_use_split_dwarf() {
output_filenames output_filenames
@ -897,7 +895,7 @@ pub fn build_compile_unit_di_node<'ll, 'tcx>(
producer.as_ptr().cast(), producer.as_ptr().cast(),
producer.len(), producer.len(),
tcx.sess.opts.optimize != config::OptLevel::No, tcx.sess.opts.optimize != config::OptLevel::No,
flags.as_ptr().cast(), c"".as_ptr().cast(),
0, 0,
// NB: this doesn't actually have any perceptible effect, it seems. LLVM will instead // NB: this doesn't actually have any perceptible effect, it seems. LLVM will instead
// put the path supplied to `MCSplitDwarfFile` into the debug info of the final // put the path supplied to `MCSplitDwarfFile` into the debug info of the final
@ -926,8 +924,7 @@ pub fn build_compile_unit_di_node<'ll, 'tcx>(
); );
let val = llvm::LLVMMetadataAsValue(debug_context.llcontext, gcov_metadata); let val = llvm::LLVMMetadataAsValue(debug_context.llcontext, gcov_metadata);
let llvm_gcov_ident = cstr!("llvm.gcov"); llvm::LLVMAddNamedMetadataOperand(debug_context.llmod, c"llvm.gcov".as_ptr(), val);
llvm::LLVMAddNamedMetadataOperand(debug_context.llmod, llvm_gcov_ident.as_ptr(), val);
} }
return unit_metadata; return unit_metadata;

View File

@ -112,7 +112,7 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> {
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
self.llmod, self.llmod,
llvm::LLVMModFlagBehavior::Warning, llvm::LLVMModFlagBehavior::Warning,
"Dwarf Version\0".as_ptr().cast(), c"Dwarf Version".as_ptr().cast(),
dwarf_version, dwarf_version,
); );
} else { } else {
@ -120,17 +120,16 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> {
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
self.llmod, self.llmod,
llvm::LLVMModFlagBehavior::Warning, llvm::LLVMModFlagBehavior::Warning,
"CodeView\0".as_ptr().cast(), c"CodeView".as_ptr().cast(),
1, 1,
) )
} }
// Prevent bitcode readers from deleting the debug info. // Prevent bitcode readers from deleting the debug info.
let ptr = "Debug Info Version\0".as_ptr();
llvm::LLVMRustAddModuleFlag( llvm::LLVMRustAddModuleFlag(
self.llmod, self.llmod,
llvm::LLVMModFlagBehavior::Warning, llvm::LLVMModFlagBehavior::Warning,
ptr.cast(), c"Debug Info Version".as_ptr().cast(),
llvm::LLVMRustDebugMetadataVersion(), llvm::LLVMRustDebugMetadataVersion(),
); );
} }

View File

@ -8,6 +8,7 @@
#![feature(rustdoc_internals)] #![feature(rustdoc_internals)]
#![doc(rust_logo)] #![doc(rust_logo)]
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")] #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
#![cfg_attr(bootstrap, feature(c_str_literals))]
#![feature(exact_size_is_empty)] #![feature(exact_size_is_empty)]
#![feature(extern_types)] #![feature(extern_types)]
#![feature(hash_raw_entry)] #![feature(hash_raw_entry)]

View File

@ -210,7 +210,6 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[
"crossbeam-epoch", "crossbeam-epoch",
"crossbeam-utils", "crossbeam-utils",
"crypto-common", "crypto-common",
"cstr",
"darling", "darling",
"darling_core", "darling_core",
"darling_macro", "darling_macro",