mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
use new c literals instead of cstr! macro
This commit is contained in:
parent
e4f7ad8e68
commit
a17561ffc9
11
Cargo.lock
11
Cargo.lock
@ -872,16 +872,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.3.1"
|
version = "3.3.1"
|
||||||
@ -3180,7 +3170,6 @@ name = "rustc_codegen_llvm"
|
|||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cstr",
|
|
||||||
"libc",
|
"libc",
|
||||||
"measureme",
|
"measureme",
|
||||||
"object 0.31.1",
|
"object 0.31.1",
|
||||||
|
@ -8,7 +8,6 @@ test = false
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bitflags = "1.0"
|
bitflags = "1.0"
|
||||||
cstr = "0.2"
|
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
measureme = "10.0.0"
|
measureme = "10.0.0"
|
||||||
object = { version = "0.31.1", default-features = false, features = [
|
object = { version = "0.31.1", default-features = false, features = [
|
||||||
|
@ -77,7 +77,7 @@ pub(crate) unsafe fn codegen(
|
|||||||
llvm::LLVMRustGetOrInsertFunction(llmod, callee.as_ptr().cast(), callee.len(), ty);
|
llvm::LLVMRustGetOrInsertFunction(llmod, callee.as_ptr().cast(), callee.len(), ty);
|
||||||
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);
|
||||||
@ -129,7 +129,7 @@ pub(crate) unsafe fn codegen(
|
|||||||
attributes::apply_to_llfn(callee, llvm::AttributePlace::Function, &[no_return]);
|
attributes::apply_to_llfn(callee, llvm::AttributePlace::Function, &[no_return]);
|
||||||
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);
|
||||||
|
@ -595,7 +595,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,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -891,11 +891,11 @@ 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);
|
||||||
|
|
||||||
let section = if is_apple { "__LLVM,__bitcode\0" } else { ".llvmbc\0" };
|
let section = if is_apple { c"__LLVM,__bitcode" } else { c".llvmbc" };
|
||||||
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);
|
||||||
llvm::LLVMSetGlobalConstant(llglobal, llvm::True);
|
llvm::LLVMSetGlobalConstant(llglobal, llvm::True);
|
||||||
@ -904,10 +904,10 @@ 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 { "__LLVM,__cmdline\0" } else { ".llvmcmd\0" };
|
let section = if is_apple { c"__LLVM,__cmdline" } else { 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);
|
||||||
} else {
|
} else {
|
||||||
|
@ -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(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ use crate::llvm::{self, AtomicOrdering, AtomicRmwBinOp, BasicBlock, False, 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 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};
|
||||||
@ -25,7 +24,6 @@ use rustc_symbol_mangling::typeid::{kcfi_typeid_for_fnabi, typeid_for_fnabi, Typ
|
|||||||
use rustc_target::abi::{self, call::FnAbi, Align, Size, WrappingRange};
|
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 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;
|
||||||
@ -45,13 +43,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;
|
||||||
@ -1010,14 +1005,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"))
|
||||||
@ -1031,14 +1025,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"))
|
||||||
@ -1050,14 +1043,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");
|
||||||
|
@ -6,7 +6,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};
|
||||||
@ -473,9 +472,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());
|
||||||
}
|
}
|
||||||
@ -504,7 +503,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,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
use rustc_codegen_ssa::base::wants_msvc_seh;
|
||||||
use rustc_codegen_ssa::traits::*;
|
use rustc_codegen_ssa::traits::*;
|
||||||
use rustc_data_structures::base_n;
|
use rustc_data_structures::base_n;
|
||||||
@ -224,36 +223,42 @@ 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();
|
llvm::LLVMRustAddModuleFlag(
|
||||||
llvm::LLVMRustAddModuleFlag(llmod, llvm::LLVMModFlagBehavior::Warning, avoid_plt, 1);
|
llmod,
|
||||||
|
llvm::LLVMModFlagBehavior::Warning,
|
||||||
|
c"RtLibUseGOT".as_ptr().cast(),
|
||||||
|
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();
|
|
||||||
llvm::LLVMRustAddModuleFlag(
|
llvm::LLVMRustAddModuleFlag(
|
||||||
llmod,
|
llmod,
|
||||||
llvm::LLVMModFlagBehavior::Override,
|
llvm::LLVMModFlagBehavior::Override,
|
||||||
canonical_jump_tables,
|
c"CFI Canonical Jump Tables".as_ptr().cast(),
|
||||||
1,
|
1,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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();
|
|
||||||
llvm::LLVMRustAddModuleFlag(
|
llvm::LLVMRustAddModuleFlag(
|
||||||
llmod,
|
llmod,
|
||||||
llvm::LLVMModFlagBehavior::Override,
|
llvm::LLVMModFlagBehavior::Override,
|
||||||
enable_split_lto_unit,
|
c"EnableSplitLTOUnit".as_ptr().cast(),
|
||||||
1,
|
1,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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();
|
llvm::LLVMRustAddModuleFlag(
|
||||||
llvm::LLVMRustAddModuleFlag(llmod, llvm::LLVMModFlagBehavior::Override, kcfi, 1);
|
llmod,
|
||||||
|
llvm::LLVMModFlagBehavior::Override,
|
||||||
|
c"kcfi".as_ptr().cast(),
|
||||||
|
1,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Control Flow Guard is currently only supported by the MSVC linker on Windows.
|
// Control Flow Guard is currently only supported by the MSVC linker on Windows.
|
||||||
@ -265,7 +270,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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -274,7 +279,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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -292,26 +297,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 {
|
||||||
@ -327,7 +332,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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -335,7 +340,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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -344,7 +349,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,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -476,14 +481,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_to(self.type_i8()), values);
|
let array = self.const_array(self.type_ptr_to(self.type_i8()), 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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,6 @@ pub fn get_or_insert_gdb_debug_scripts_section_global<'ll>(cx: &CodegenCx<'ll, '
|
|||||||
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.
|
||||||
@ -71,7 +70,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);
|
||||||
|
@ -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::*;
|
||||||
@ -812,7 +811,6 @@ pub fn build_compile_unit_di_node<'ll, 'tcx>(
|
|||||||
|
|
||||||
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.to_string_lossy(FileNameDisplayPreference::Remapped);
|
let work_dir = tcx.sess.opts.working_dir.to_string_lossy(FileNameDisplayPreference::Remapped);
|
||||||
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
|
||||||
@ -849,7 +847,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
|
||||||
@ -878,8 +876,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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert `llvm.ident` metadata on the wasm targets since that will
|
// Insert `llvm.ident` metadata on the wasm targets since that will
|
||||||
@ -892,7 +889,7 @@ pub fn build_compile_unit_di_node<'ll, 'tcx>(
|
|||||||
);
|
);
|
||||||
llvm::LLVMAddNamedMetadataOperand(
|
llvm::LLVMAddNamedMetadataOperand(
|
||||||
debug_context.llmod,
|
debug_context.llmod,
|
||||||
cstr!("llvm.ident").as_ptr(),
|
c"llvm.ident".as_ptr(),
|
||||||
llvm::LLVMMDNodeInContext(debug_context.llcontext, &name_metadata, 1),
|
llvm::LLVMMDNodeInContext(debug_context.llcontext, &name_metadata, 1),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -113,7 +113,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 {
|
||||||
@ -121,17 +121,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(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#![feature(let_chains)]
|
#![feature(let_chains)]
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
#![feature(impl_trait_in_assoc_type)]
|
#![feature(impl_trait_in_assoc_type)]
|
||||||
|
#![feature(c_str_literals)]
|
||||||
#![recursion_limit = "256"]
|
#![recursion_limit = "256"]
|
||||||
#![allow(rustc::potential_query_instability)]
|
#![allow(rustc::potential_query_instability)]
|
||||||
#![deny(rustc::untranslatable_diagnostic)]
|
#![deny(rustc::untranslatable_diagnostic)]
|
||||||
|
Loading…
Reference in New Issue
Block a user