mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Rollup merge of #153857 - RalfJung:cfg-abi, r=Mark-Simulacrum
Rename `target.abi` to `target.cfg_abi` and enum-ify llvm_abiname See [Zulip](https://rust-lang.zulipchat.com/#narrow/channel/131828-t-compiler/topic/De-spaghettifying.20ABI.20controls/with/578893542) for more context. Discussed a bit in https://github.com/rust-lang/rust/pull/153769#discussion_r2934399038 too. This renames `target.abi` to `target.cfg_abi` to make it less likely that someone will use it to determine things about the actual ccABI, i.e. the calling convention used on the target. `target.abi` does not control that calling convention, it just *sometimes* informs the user about that calling convention (and also about other aspects of the ABI). Also turn llvm_abiname into an enum to make it more natural to match on. Cc @workingjubilee @madsmtm
This commit is contained in:
@@ -46,7 +46,7 @@
|
||||
use rustc_session::Session;
|
||||
use rustc_session::config::OutputFilenames;
|
||||
use rustc_span::{Symbol, sym};
|
||||
use rustc_target::spec::{Abi, Arch, Env, Os};
|
||||
use rustc_target::spec::{Arch, CfgAbi, Env, Os};
|
||||
|
||||
pub use crate::config::*;
|
||||
use crate::prelude::*;
|
||||
@@ -178,7 +178,7 @@ fn target_config(&self, sess: &Session) -> TargetConfig {
|
||||
let has_reliable_f16_f128 = !(sess.target.arch == Arch::X86_64
|
||||
&& sess.target.os == Os::Windows
|
||||
&& sess.target.env == Env::Gnu
|
||||
&& sess.target.abi != Abi::Llvm);
|
||||
&& sess.target.cfg_abi != CfgAbi::Llvm);
|
||||
|
||||
// FIXME(f128): f128 math operations need f128 math symbols, which currently aren't always
|
||||
// filled in by compiler-builtins. The only libc that provides these currently is glibc.
|
||||
|
||||
@@ -225,7 +225,7 @@ pub(crate) fn target_machine_factory(
|
||||
let triple = SmallCStr::new(&versioned_llvm_target(sess));
|
||||
let cpu = SmallCStr::new(llvm_util::target_cpu(sess));
|
||||
let features = CString::new(target_features.join(",")).unwrap();
|
||||
let abi = SmallCStr::new(&sess.target.llvm_abiname);
|
||||
let abi = SmallCStr::new(sess.target.llvm_abiname.desc());
|
||||
let trap_unreachable =
|
||||
sess.opts.unstable_opts.trap_unreachable.unwrap_or(sess.target.trap_unreachable);
|
||||
let emit_stack_size_section = sess.opts.unstable_opts.emit_stack_sizes;
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
use rustc_span::{DUMMY_SP, Span, Spanned, Symbol};
|
||||
use rustc_symbol_mangling::mangle_internal_symbol;
|
||||
use rustc_target::spec::{
|
||||
Abi, Arch, Env, HasTargetSpec, Os, RelocModel, SmallDataThresholdSupport, Target, TlsModel,
|
||||
Arch, CfgAbi, Env, HasTargetSpec, Os, RelocModel, SmallDataThresholdSupport, Target, TlsModel,
|
||||
};
|
||||
use smallvec::SmallVec;
|
||||
|
||||
@@ -344,7 +344,7 @@ pub(crate) unsafe fn create_module<'ll>(
|
||||
if sess.target.is_like_msvc
|
||||
|| (sess.target.options.os == Os::Windows
|
||||
&& sess.target.options.env == Env::Gnu
|
||||
&& sess.target.options.abi == Abi::Llvm)
|
||||
&& sess.target.options.cfg_abi == CfgAbi::Llvm)
|
||||
{
|
||||
match sess.opts.cg.control_flow_guard {
|
||||
CFGuard::Disabled => {}
|
||||
@@ -509,14 +509,13 @@ pub(crate) unsafe fn create_module<'ll>(
|
||||
// to workaround lld as the LTO plugin not
|
||||
// correctly setting target-abi for the LTO object
|
||||
// FIXME: https://github.com/llvm/llvm-project/issues/50591
|
||||
// If llvm_abiname is empty, emit nothing.
|
||||
let llvm_abiname = &sess.target.options.llvm_abiname;
|
||||
if matches!(sess.target.arch, Arch::RiscV32 | Arch::RiscV64) && !llvm_abiname.is_empty() {
|
||||
if matches!(sess.target.arch, Arch::RiscV32 | Arch::RiscV64) {
|
||||
llvm::add_module_flag_str(
|
||||
llmod,
|
||||
llvm::ModuleFlagMergeBehavior::Error,
|
||||
"target-abi",
|
||||
llvm_abiname,
|
||||
llvm_abiname.desc(),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
use rustc_session::Session;
|
||||
use rustc_session::config::{PrintKind, PrintRequest};
|
||||
use rustc_target::spec::{
|
||||
Abi, Arch, Env, MergeFunctions, Os, PanicStrategy, SmallDataThresholdSupport,
|
||||
Arch, CfgAbi, Env, MergeFunctions, Os, PanicStrategy, SmallDataThresholdSupport,
|
||||
};
|
||||
use smallvec::{SmallVec, smallvec};
|
||||
|
||||
@@ -362,7 +362,7 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) {
|
||||
let target_arch = &sess.target.arch;
|
||||
let target_os = &sess.target.options.os;
|
||||
let target_env = &sess.target.options.env;
|
||||
let target_abi = &sess.target.options.abi;
|
||||
let target_abi = &sess.target.options.cfg_abi;
|
||||
let target_pointer_width = sess.target.pointer_width;
|
||||
let version = get_version();
|
||||
let (major, _, _) = version;
|
||||
@@ -371,7 +371,9 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) {
|
||||
// Unsupported <https://github.com/llvm/llvm-project/issues/94434> (fixed in llvm22)
|
||||
(Arch::Arm64EC, _) if major < 22 => false,
|
||||
// MinGW ABI bugs <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115054>
|
||||
(Arch::X86_64, Os::Windows) if *target_env == Env::Gnu && *target_abi != Abi::Llvm => false,
|
||||
(Arch::X86_64, Os::Windows) if *target_env == Env::Gnu && *target_abi != CfgAbi::Llvm => {
|
||||
false
|
||||
}
|
||||
// Infinite recursion <https://github.com/llvm/llvm-project/issues/97981>
|
||||
(Arch::CSky, _) if major < 22 => false, // (fixed in llvm22)
|
||||
(Arch::PowerPC | Arch::PowerPC64, _) if major < 22 => false, // (fixed in llvm22)
|
||||
@@ -397,7 +399,9 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) {
|
||||
// ABI unsupported <https://github.com/llvm/llvm-project/issues/41838> (fixed in llvm22)
|
||||
(Arch::Sparc, _) if major < 22 => false,
|
||||
// MinGW ABI bugs <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115054>
|
||||
(Arch::X86_64, Os::Windows) if *target_env == Env::Gnu && *target_abi != Abi::Llvm => false,
|
||||
(Arch::X86_64, Os::Windows) if *target_env == Env::Gnu && *target_abi != CfgAbi::Llvm => {
|
||||
false
|
||||
}
|
||||
// There are no known problems on other platforms, so the only requirement is that symbols
|
||||
// are available. `compiler-builtins` provides all symbols required for core `f128`
|
||||
// support, so this should work for everything else.
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
use rustc_middle::bug;
|
||||
use rustc_middle::ty::Ty;
|
||||
use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf, TyAndLayout};
|
||||
use rustc_target::spec::{Arch, Env, RustcAbi};
|
||||
use rustc_target::spec::{Arch, Env, LlvmAbi, RustcAbi};
|
||||
|
||||
use crate::builder::Builder;
|
||||
use crate::llvm::{Type, Value};
|
||||
@@ -1077,7 +1077,7 @@ pub(super) fn emit_va_arg<'ll, 'tcx>(
|
||||
AllowHigherAlign::Yes,
|
||||
ForceRightAdjust::Yes,
|
||||
),
|
||||
Arch::RiscV32 if target.llvm_abiname == "ilp32e" => {
|
||||
Arch::RiscV32 if target.llvm_abiname == LlvmAbi::Ilp32e => {
|
||||
// FIXME: clang manually adjusts the alignment for this ABI. It notes:
|
||||
//
|
||||
// > To be compatible with GCC's behaviors, we force arguments with
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
use rustc_span::Symbol;
|
||||
use rustc_target::spec::crt_objects::CrtObjects;
|
||||
use rustc_target::spec::{
|
||||
Abi, BinaryFormat, Cc, Env, LinkOutputKind, LinkSelfContainedComponents,
|
||||
BinaryFormat, Cc, CfgAbi, Env, LinkOutputKind, LinkSelfContainedComponents,
|
||||
LinkSelfContainedDefault, LinkerFeatures, LinkerFlavor, LinkerFlavorCli, Lld, Os, RelocModel,
|
||||
RelroLevel, SanitizerSet, SplitDebuginfo,
|
||||
};
|
||||
@@ -1917,7 +1917,7 @@ fn self_contained_components(
|
||||
LinkSelfContainedDefault::InferredForMusl => sess.crt_static(Some(crate_type)),
|
||||
LinkSelfContainedDefault::InferredForMingw => {
|
||||
sess.host == sess.target
|
||||
&& sess.target.abi != Abi::Uwp
|
||||
&& sess.target.cfg_abi != CfgAbi::Uwp
|
||||
&& detect_self_contained_mingw(sess, linker)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_session::Session;
|
||||
use rustc_session::config::{self, CrateType, DebugInfo, LinkerPluginLto, Lto, OptLevel, Strip};
|
||||
use rustc_target::spec::{Abi, Arch, Cc, LinkOutputKind, LinkerFlavor, Lld, Os};
|
||||
use rustc_target::spec::{Arch, Cc, CfgAbi, LinkOutputKind, LinkerFlavor, Lld, Os};
|
||||
use tracing::{debug, warn};
|
||||
|
||||
use super::command::Command;
|
||||
@@ -84,7 +84,7 @@ pub(crate) fn get_linker<'a>(
|
||||
// To comply with the Windows App Certification Kit,
|
||||
// MSVC needs to link with the Store versions of the runtime libraries (vcruntime, msvcrt, etc).
|
||||
let t = &sess.target;
|
||||
if matches!(flavor, LinkerFlavor::Msvc(..)) && t.abi == Abi::Uwp {
|
||||
if matches!(flavor, LinkerFlavor::Msvc(..)) && t.cfg_abi == CfgAbi::Uwp {
|
||||
if let Some(ref tool) = msvc_tool {
|
||||
let original_path = tool.path();
|
||||
if let Some(root_lib_path) = original_path.ancestors().nth(4) {
|
||||
@@ -135,7 +135,7 @@ pub(crate) fn get_linker<'a>(
|
||||
|
||||
// FIXME: Move `/LIBPATH` addition for uwp targets from the linker construction
|
||||
// to the linker args construction.
|
||||
assert!(cmd.get_args().is_empty() || sess.target.abi == Abi::Uwp);
|
||||
assert!(cmd.get_args().is_empty() || sess.target.cfg_abi == CfgAbi::Uwp);
|
||||
match flavor {
|
||||
LinkerFlavor::Unix(Cc::No) if sess.target.os == Os::L4Re => {
|
||||
Box::new(L4Bender::new(cmd, sess)) as Box<dyn Linker>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
use rustc_middle::bug;
|
||||
use rustc_session::Session;
|
||||
use rustc_span::sym;
|
||||
use rustc_target::spec::{Abi, Os, RelocModel, Target, ef_avr_arch};
|
||||
use rustc_target::spec::{CfgAbi, LlvmAbi, Os, RelocModel, Target, ef_avr_arch};
|
||||
use tracing::debug;
|
||||
|
||||
use super::apple;
|
||||
@@ -295,10 +295,10 @@ pub(super) fn elf_e_flags(architecture: Architecture, sess: &Session) -> u32 {
|
||||
};
|
||||
|
||||
// Use the explicitly given ABI.
|
||||
match sess.target.options.llvm_abiname.as_ref() {
|
||||
"o32" if is_32bit => e_flags |= elf::EF_MIPS_ABI_O32,
|
||||
"n32" if !is_32bit => e_flags |= elf::EF_MIPS_ABI2,
|
||||
"n64" if !is_32bit => {}
|
||||
match &sess.target.options.llvm_abiname {
|
||||
LlvmAbi::O32 if is_32bit => e_flags |= elf::EF_MIPS_ABI_O32,
|
||||
LlvmAbi::N32 if !is_32bit => e_flags |= elf::EF_MIPS_ABI2,
|
||||
LlvmAbi::N64 if !is_32bit => {}
|
||||
// The rest is invalid (which is already ensured by the target spec check).
|
||||
s => bug!("invalid LLVM ABI `{}` for MIPS target", s),
|
||||
};
|
||||
@@ -336,12 +336,12 @@ pub(super) fn elf_e_flags(architecture: Architecture, sess: &Session) -> u32 {
|
||||
|
||||
// Set the appropriate flag based on ABI
|
||||
// This needs to match LLVM `RISCVELFStreamer.cpp`
|
||||
match &*sess.target.llvm_abiname {
|
||||
"ilp32" | "lp64" => (),
|
||||
"ilp32f" | "lp64f" => e_flags |= elf::EF_RISCV_FLOAT_ABI_SINGLE,
|
||||
"ilp32d" | "lp64d" => e_flags |= elf::EF_RISCV_FLOAT_ABI_DOUBLE,
|
||||
match &sess.target.llvm_abiname {
|
||||
LlvmAbi::Ilp32 | LlvmAbi::Lp64 => (),
|
||||
LlvmAbi::Ilp32f | LlvmAbi::Lp64f => e_flags |= elf::EF_RISCV_FLOAT_ABI_SINGLE,
|
||||
LlvmAbi::Ilp32d | LlvmAbi::Lp64d => e_flags |= elf::EF_RISCV_FLOAT_ABI_DOUBLE,
|
||||
// Note that the `lp64e` is still unstable as it's not (yet) part of the ELF psABI.
|
||||
"ilp32e" | "lp64e" => e_flags |= elf::EF_RISCV_RVE,
|
||||
LlvmAbi::Ilp32e | LlvmAbi::Lp64e => e_flags |= elf::EF_RISCV_RVE,
|
||||
_ => bug!("unknown RISC-V ABI name"),
|
||||
}
|
||||
|
||||
@@ -353,10 +353,10 @@ pub(super) fn elf_e_flags(architecture: Architecture, sess: &Session) -> u32 {
|
||||
|
||||
// Set the appropriate flag based on ABI
|
||||
// This needs to match LLVM `LoongArchELFStreamer.cpp`
|
||||
match &*sess.target.llvm_abiname {
|
||||
"ilp32s" | "lp64s" => e_flags |= elf::EF_LARCH_ABI_SOFT_FLOAT,
|
||||
"ilp32f" | "lp64f" => e_flags |= elf::EF_LARCH_ABI_SINGLE_FLOAT,
|
||||
"ilp32d" | "lp64d" => e_flags |= elf::EF_LARCH_ABI_DOUBLE_FLOAT,
|
||||
match &sess.target.llvm_abiname {
|
||||
LlvmAbi::Ilp32s | LlvmAbi::Lp64s => e_flags |= elf::EF_LARCH_ABI_SOFT_FLOAT,
|
||||
LlvmAbi::Ilp32f | LlvmAbi::Lp64f => e_flags |= elf::EF_LARCH_ABI_SINGLE_FLOAT,
|
||||
LlvmAbi::Ilp32d | LlvmAbi::Lp64d => e_flags |= elf::EF_LARCH_ABI_DOUBLE_FLOAT,
|
||||
_ => bug!("unknown LoongArch ABI name"),
|
||||
}
|
||||
|
||||
@@ -372,7 +372,7 @@ pub(super) fn elf_e_flags(architecture: Architecture, sess: &Session) -> u32 {
|
||||
}
|
||||
}
|
||||
Architecture::Csky => {
|
||||
if matches!(sess.target.options.abi, Abi::AbiV2) {
|
||||
if matches!(sess.target.options.cfg_abi, CfgAbi::AbiV2) {
|
||||
elf::EF_CSKY_ABIV2
|
||||
} else {
|
||||
elf::EF_CSKY_ABIV1
|
||||
@@ -383,14 +383,14 @@ pub(super) fn elf_e_flags(architecture: Architecture, sess: &Session) -> u32 {
|
||||
const EF_PPC64_ABI_ELF_V1: u32 = 1;
|
||||
const EF_PPC64_ABI_ELF_V2: u32 = 2;
|
||||
|
||||
match sess.target.options.llvm_abiname.as_ref() {
|
||||
match sess.target.options.llvm_abiname {
|
||||
// If the flags do not correctly indicate the ABI,
|
||||
// linkers such as ld.lld assume that the ppc64 object files are always ELFv2
|
||||
// which leads to broken binaries if ELFv1 is used for the object files.
|
||||
"elfv1" => EF_PPC64_ABI_ELF_V1,
|
||||
"elfv2" => EF_PPC64_ABI_ELF_V2,
|
||||
"" if sess.target.options.binary_format.to_object() == BinaryFormat::Elf => {
|
||||
bug!("No ABI specified for this PPC64 ELF target");
|
||||
LlvmAbi::ElfV1 => EF_PPC64_ABI_ELF_V1,
|
||||
LlvmAbi::ElfV2 => EF_PPC64_ABI_ELF_V2,
|
||||
_ if sess.target.options.binary_format.to_object() == BinaryFormat::Elf => {
|
||||
bug!("invalid ABI specified for this PPC64 ELF target");
|
||||
}
|
||||
// Fall back
|
||||
_ => EF_PPC64_ABI_UNKNOWN,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
use rustc_middle::{bug, mir, span_bug};
|
||||
use rustc_session::cstore::{DllCallingConvention, DllImport, DllImportSymbolType};
|
||||
use rustc_span::Span;
|
||||
use rustc_target::spec::{Abi, Env, Os, Target};
|
||||
use rustc_target::spec::{CfgAbi, Env, Os, Target};
|
||||
|
||||
use crate::traits::*;
|
||||
|
||||
@@ -171,7 +171,7 @@ pub fn asm_const_to_str<'tcx>(
|
||||
}
|
||||
|
||||
pub fn is_mingw_gnu_toolchain(target: &Target) -> bool {
|
||||
target.os == Os::Windows && target.env == Env::Gnu && target.abi == Abi::Unspecified
|
||||
target.os == Os::Windows && target.env == Env::Gnu && target.cfg_abi == CfgAbi::Unspecified
|
||||
}
|
||||
|
||||
pub fn i686_decorated_name(
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
use rustc_session::search_paths::PathKind;
|
||||
use rustc_span::Symbol;
|
||||
use rustc_span::def_id::{DefId, LOCAL_CRATE};
|
||||
use rustc_target::spec::{Abi, Arch, BinaryFormat, Env, LinkSelfContainedComponents, Os};
|
||||
use rustc_target::spec::{Arch, BinaryFormat, CfgAbi, Env, LinkSelfContainedComponents, Os};
|
||||
|
||||
use crate::errors;
|
||||
|
||||
@@ -73,14 +73,14 @@ pub fn walk_native_lib_search_dirs<R>(
|
||||
// FIXME: On AIX this also has the side-effect of making the list of library search paths
|
||||
// non-empty, which is needed or the linker may decide to record the LIBPATH env, if
|
||||
// defined, as the search path instead of appending the default search paths.
|
||||
if sess.target.abi == Abi::Fortanix
|
||||
if sess.target.cfg_abi == CfgAbi::Fortanix
|
||||
|| sess.target.os == Os::Linux
|
||||
|| sess.target.os == Os::Fuchsia
|
||||
|| sess.target.is_like_aix
|
||||
|| sess.target.is_like_darwin && !sess.sanitizers().is_empty()
|
||||
|| sess.target.os == Os::Windows
|
||||
&& sess.target.env == Env::Gnu
|
||||
&& sess.target.abi == Abi::Llvm
|
||||
&& sess.target.cfg_abi == CfgAbi::Llvm
|
||||
{
|
||||
f(&sess.target_tlib_path.dir, false)?;
|
||||
}
|
||||
|
||||
@@ -239,7 +239,7 @@ macro_rules! ins_sym {
|
||||
ins_none!(sym::sanitizer_cfi_normalize_integers);
|
||||
}
|
||||
|
||||
ins_sym!(sym::target_abi, sess.target.abi.desc_symbol());
|
||||
ins_sym!(sym::target_abi, sess.target.cfg_abi.desc_symbol());
|
||||
ins_sym!(sym::target_arch, sess.target.arch.desc_symbol());
|
||||
ins_str!(sym::target_endian, sess.target.endian.as_str());
|
||||
ins_sym!(sym::target_env, sess.target.env.desc_symbol());
|
||||
@@ -447,7 +447,7 @@ macro_rules! ins {
|
||||
};
|
||||
|
||||
for target in Target::builtins().chain(iter::once(current_target.clone())) {
|
||||
values_target_abi.insert(target.options.abi.desc_symbol());
|
||||
values_target_abi.insert(target.options.cfg_abi.desc_symbol());
|
||||
values_target_arch.insert(target.arch.desc_symbol());
|
||||
values_target_endian.insert(Symbol::intern(target.options.endian.as_str()));
|
||||
values_target_env.insert(target.options.env.desc_symbol());
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
use rustc_macros::{Decodable, Encodable, HashStable_Generic};
|
||||
use rustc_span::Symbol;
|
||||
|
||||
use crate::spec::{Abi, Arch, RelocModel, Target};
|
||||
use crate::spec::{Arch, CfgAbi, RelocModel, Target};
|
||||
|
||||
pub struct ModifierInfo {
|
||||
pub modifier: char,
|
||||
@@ -1001,7 +1001,7 @@ pub fn parse(
|
||||
_ => Err(&["C", "system", "efiapi"]),
|
||||
},
|
||||
InlineAsmArch::PowerPC | InlineAsmArch::PowerPC64 => match name {
|
||||
"C" | "system" => Ok(if target.abi == Abi::Spe {
|
||||
"C" | "system" => Ok(if target.cfg_abi == CfgAbi::Spe {
|
||||
InlineAsmClobberAbi::PowerPCSPE
|
||||
} else {
|
||||
InlineAsmClobberAbi::PowerPC
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
use rustc_span::Symbol;
|
||||
|
||||
use super::{InlineAsmArch, InlineAsmType, ModifierInfo};
|
||||
use crate::spec::{Abi, RelocModel, Target};
|
||||
use crate::spec::{CfgAbi, RelocModel, Target};
|
||||
|
||||
def_reg_class! {
|
||||
PowerPC PowerPCInlineAsmRegClass {
|
||||
@@ -105,9 +105,9 @@ fn reserved_v20to31(
|
||||
_is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
if target.is_like_aix {
|
||||
match &target.options.abi {
|
||||
Abi::VecDefault => Err("v20-v31 (vs52-vs63) are reserved on vec-default ABI"),
|
||||
Abi::VecExtAbi => Ok(()),
|
||||
match &target.options.cfg_abi {
|
||||
CfgAbi::VecDefault => Err("v20-v31 (vs52-vs63) are reserved on vec-default ABI"),
|
||||
CfgAbi::VecExtAbi => Ok(()),
|
||||
abi => unreachable!("unrecognized AIX ABI: {abi}"),
|
||||
}
|
||||
} else {
|
||||
@@ -122,7 +122,11 @@ fn spe_acc_target_check(
|
||||
target: &Target,
|
||||
_is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
if target.abi == Abi::Spe { Ok(()) } else { Err("spe_acc is only available on spe targets") }
|
||||
if target.cfg_abi == CfgAbi::Spe {
|
||||
Ok(())
|
||||
} else {
|
||||
Err("spe_acc is only available on spe targets")
|
||||
}
|
||||
}
|
||||
|
||||
def_regs! {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
};
|
||||
|
||||
use crate::callconv::{ArgAbi, ArgExtension, CastTarget, FnAbi, PassMode, Uniform};
|
||||
use crate::spec::HasTargetSpec;
|
||||
use crate::spec::{HasTargetSpec, LlvmAbi};
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
enum RegPassKind {
|
||||
@@ -415,9 +415,9 @@ pub(crate) fn compute_abi_info<'a, Ty, C>(cx: &C, fn_abi: &mut FnAbi<'a, Ty>)
|
||||
C: HasDataLayout + HasTargetSpec,
|
||||
{
|
||||
let xlen = cx.data_layout().pointer_size().bits();
|
||||
let flen = match &cx.target_spec().llvm_abiname[..] {
|
||||
"ilp32f" | "lp64f" => 32,
|
||||
"ilp32d" | "lp64d" => 64,
|
||||
let flen = match &cx.target_spec().llvm_abiname {
|
||||
LlvmAbi::Ilp32f | LlvmAbi::Lp64f => 32,
|
||||
LlvmAbi::Ilp32d | LlvmAbi::Lp64d => 64,
|
||||
_ => 0,
|
||||
};
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
use rustc_abi::{Endian, HasDataLayout, TyAbiInterface};
|
||||
|
||||
use crate::callconv::{Align, ArgAbi, FnAbi, Reg, RegKind, Uniform};
|
||||
use crate::spec::{HasTargetSpec, Os};
|
||||
use crate::spec::{HasTargetSpec, LlvmAbi, Os};
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
enum ABI {
|
||||
@@ -106,9 +106,9 @@ pub(crate) fn compute_abi_info<'a, Ty, C>(cx: &C, fn_abi: &mut FnAbi<'a, Ty>)
|
||||
Ty: TyAbiInterface<'a, C> + Copy,
|
||||
C: HasDataLayout + HasTargetSpec,
|
||||
{
|
||||
let abi = if cx.target_spec().options.llvm_abiname == "elfv2" {
|
||||
let abi = if cx.target_spec().options.llvm_abiname == LlvmAbi::ElfV2 {
|
||||
ELFv2
|
||||
} else if cx.target_spec().options.llvm_abiname == "elfv1" {
|
||||
} else if cx.target_spec().options.llvm_abiname == LlvmAbi::ElfV1 {
|
||||
ELFv1
|
||||
} else if cx.target_spec().os == Os::Aix {
|
||||
AIX
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
};
|
||||
|
||||
use crate::callconv::{ArgAbi, ArgExtension, CastTarget, FnAbi, PassMode, Uniform};
|
||||
use crate::spec::HasTargetSpec;
|
||||
use crate::spec::{HasTargetSpec, LlvmAbi};
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
enum RegPassKind {
|
||||
@@ -419,9 +419,9 @@ pub(crate) fn compute_abi_info<'a, Ty, C>(cx: &C, fn_abi: &mut FnAbi<'a, Ty>)
|
||||
Ty: TyAbiInterface<'a, C> + Copy,
|
||||
C: HasDataLayout + HasTargetSpec,
|
||||
{
|
||||
let flen = match &cx.target_spec().llvm_abiname[..] {
|
||||
"ilp32f" | "lp64f" => 32,
|
||||
"ilp32d" | "lp64d" => 64,
|
||||
let flen = match &cx.target_spec().llvm_abiname {
|
||||
LlvmAbi::Ilp32f | LlvmAbi::Lp64f => 32,
|
||||
LlvmAbi::Ilp32d | LlvmAbi::Lp64d => 64,
|
||||
_ => 0,
|
||||
};
|
||||
let xlen = cx.data_layout().pointer_size().bits();
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{
|
||||
Abi, BinaryFormat, Cc, CodeModel, LinkOutputKind, LinkerFlavor, Os, TargetOptions, crt_objects,
|
||||
cvs,
|
||||
BinaryFormat, Cc, CfgAbi, CodeModel, LinkOutputKind, LinkerFlavor, Os, TargetOptions,
|
||||
crt_objects, cvs,
|
||||
};
|
||||
|
||||
pub(crate) fn opts() -> TargetOptions {
|
||||
TargetOptions {
|
||||
abi: Abi::VecExtAbi,
|
||||
cfg_abi: CfgAbi::VecExtAbi,
|
||||
code_model: Some(CodeModel::Large),
|
||||
cpu: "pwr7".into(),
|
||||
os: Os::Aix,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::spec::{
|
||||
Abi, BinaryFormat, Cc, DebuginfoKind, Env, FloatAbi, FramePointer, LinkerFlavor, Lld, Os,
|
||||
BinaryFormat, Cc, CfgAbi, DebuginfoKind, Env, FloatAbi, FramePointer, LinkerFlavor, Lld, Os,
|
||||
RustcAbi, SplitDebuginfo, StackProbeType, StaticCow, Target, TargetOptions, cvs,
|
||||
};
|
||||
|
||||
@@ -108,11 +108,11 @@ fn target_env(self) -> Env {
|
||||
//
|
||||
// But let's continue setting them for backwards compatibility.
|
||||
// FIXME(madsmtm): Warn about using these in the future.
|
||||
fn target_abi(self) -> Abi {
|
||||
fn target_abi(self) -> CfgAbi {
|
||||
match self {
|
||||
Self::Normal => Abi::Unspecified,
|
||||
Self::MacCatalyst => Abi::MacAbi,
|
||||
Self::Simulator => Abi::Sim,
|
||||
Self::Normal => CfgAbi::Unspecified,
|
||||
Self::MacCatalyst => CfgAbi::MacAbi,
|
||||
Self::Simulator => CfgAbi::Sim,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -135,7 +135,7 @@ pub(crate) fn base(
|
||||
},
|
||||
os,
|
||||
env: env.target_env(),
|
||||
abi: env.target_abi(),
|
||||
cfg_abi: env.target_abi(),
|
||||
cpu: arch.target_cpu(env).into(),
|
||||
link_env_remove,
|
||||
vendor: "apple".into(),
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
aarch64_apple_watchos_sim, i686_apple_darwin, x86_64_apple_darwin, x86_64_apple_ios,
|
||||
x86_64_apple_tvos, x86_64_apple_watchos_sim,
|
||||
};
|
||||
use crate::spec::{Abi, Env};
|
||||
use crate::spec::{CfgAbi, Env};
|
||||
|
||||
#[test]
|
||||
fn simulator_targets_set_env() {
|
||||
@@ -21,7 +21,7 @@ fn simulator_targets_set_env() {
|
||||
for target in &all_sim_targets {
|
||||
assert_eq!(target.env, Env::Sim);
|
||||
// Ensure backwards compat
|
||||
assert_eq!(target.abi, Abi::Sim);
|
||||
assert_eq!(target.cfg_abi, CfgAbi::Sim);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
use crate::spec::crt_objects::pre_mingw_self_contained;
|
||||
use crate::spec::{
|
||||
Abi, BinaryFormat, Cc, DebuginfoKind, Env, LinkSelfContainedDefault, LinkerFlavor, Lld, Os,
|
||||
BinaryFormat, Cc, CfgAbi, DebuginfoKind, Env, LinkSelfContainedDefault, LinkerFlavor, Lld, Os,
|
||||
SplitDebuginfo, TargetOptions, add_link_args, cvs,
|
||||
};
|
||||
|
||||
@@ -26,7 +26,7 @@ pub(crate) fn opts() -> TargetOptions {
|
||||
os: Os::Windows,
|
||||
env: Env::Gnu,
|
||||
vendor: "pc".into(),
|
||||
abi: Abi::Llvm,
|
||||
cfg_abi: CfgAbi::Llvm,
|
||||
linker: Some("clang".into()),
|
||||
dynamic_linking: true,
|
||||
dll_tls_export: false,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Cc, LinkArgs, LinkerFlavor, Lld, TargetOptions, add_link_args, base};
|
||||
use crate::spec::{Cc, CfgAbi, LinkArgs, LinkerFlavor, Lld, TargetOptions, add_link_args, base};
|
||||
|
||||
pub(crate) fn opts() -> TargetOptions {
|
||||
let base = base::windows_gnu::opts();
|
||||
@@ -23,7 +23,7 @@ pub(crate) fn opts() -> TargetOptions {
|
||||
let late_link_args_static = LinkArgs::new();
|
||||
|
||||
TargetOptions {
|
||||
abi: Abi::Uwp,
|
||||
cfg_abi: CfgAbi::Uwp,
|
||||
vendor: "uwp".into(),
|
||||
limit_rdylib_exports: false,
|
||||
late_link_args,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
use crate::spec::{Abi, LinkerFlavor, Lld, TargetOptions, base};
|
||||
use crate::spec::{CfgAbi, LinkerFlavor, Lld, TargetOptions, base};
|
||||
|
||||
pub(crate) fn opts() -> TargetOptions {
|
||||
let mut opts =
|
||||
TargetOptions { abi: Abi::Uwp, vendor: "uwp".into(), ..base::windows_msvc::opts() };
|
||||
TargetOptions { cfg_abi: CfgAbi::Uwp, vendor: "uwp".into(), ..base::windows_msvc::opts() };
|
||||
|
||||
opts.add_pre_link_args(LinkerFlavor::Msvc(Lld::No), &["/APPCONTAINER", "mincore.lib"]);
|
||||
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
|
||||
use super::crt_objects::CrtObjects;
|
||||
use super::{
|
||||
Abi, Arch, BinaryFormat, CodeModel, DebuginfoKind, Env, FloatAbi, FramePointer, LinkArgsCli,
|
||||
Arch, BinaryFormat, CfgAbi, CodeModel, DebuginfoKind, Env, FloatAbi, FramePointer, LinkArgsCli,
|
||||
LinkSelfContainedComponents, LinkSelfContainedDefault, LinkerFlavorCli, LldFlavor,
|
||||
MergeFunctions, Os, PanicStrategy, RelocModel, RelroLevel, RustcAbi, SanitizerSet,
|
||||
SmallDataThresholdSupport, SplitDebuginfo, StackProbeType, StaticCow, SymbolVisibility, Target,
|
||||
TargetKind, TargetOptions, TargetWarnings, TlsModel,
|
||||
};
|
||||
use crate::json::{Json, ToJson};
|
||||
use crate::spec::AbiMap;
|
||||
use crate::spec::{AbiMap, LlvmAbi};
|
||||
|
||||
impl Target {
|
||||
/// Loads a target descriptor from a JSON object.
|
||||
@@ -69,7 +69,9 @@ macro_rules! forward_opt {
|
||||
forward_opt!(c_enum_min_bits); // if None, matches c_int_width
|
||||
forward!(os);
|
||||
forward!(env);
|
||||
forward!(abi);
|
||||
if let Some(abi) = json.abi {
|
||||
base.cfg_abi = abi;
|
||||
}
|
||||
forward!(vendor);
|
||||
forward_opt!(linker);
|
||||
forward!(linker_flavor_json);
|
||||
@@ -297,7 +299,7 @@ macro_rules! target_option_val {
|
||||
target_option_val!(c_int_width, "target-c-int-width");
|
||||
target_option_val!(os);
|
||||
target_option_val!(env);
|
||||
target_option_val!(abi);
|
||||
target_option_val!(cfg_abi, "abi");
|
||||
target_option_val!(vendor);
|
||||
target_option_val!(linker);
|
||||
target_option_val!(linker_flavor_json, "linker-flavor");
|
||||
@@ -505,7 +507,7 @@ struct TargetSpecJson {
|
||||
c_enum_min_bits: Option<u64>,
|
||||
os: Option<Os>,
|
||||
env: Option<Env>,
|
||||
abi: Option<Abi>,
|
||||
abi: Option<CfgAbi>,
|
||||
vendor: Option<StaticCow<str>>,
|
||||
linker: Option<StaticCow<str>>,
|
||||
#[serde(rename = "linker-flavor")]
|
||||
@@ -609,7 +611,7 @@ struct TargetSpecJson {
|
||||
#[serde(rename = "target-mcount")]
|
||||
mcount: Option<StaticCow<str>>,
|
||||
llvm_mcount_intrinsic: Option<StaticCow<str>>,
|
||||
llvm_abiname: Option<StaticCow<str>>,
|
||||
llvm_abiname: Option<LlvmAbi>,
|
||||
llvm_floatabi: Option<FloatAbi>,
|
||||
rustc_abi: Option<RustcAbi>,
|
||||
relax_elf_relocations: Option<bool>,
|
||||
|
||||
@@ -2065,7 +2065,10 @@ pub fn desc_symbol(&self) -> Symbol {
|
||||
}
|
||||
|
||||
crate::target_spec_enum! {
|
||||
pub enum Abi {
|
||||
/// An enum representing possible values for `cfg(target_abi)`.
|
||||
/// This field is not forwarded to LLVM so it does not by itself affect codegen.
|
||||
/// See the `cfg_abi` field of [`TargetOptions`] for more details.
|
||||
pub enum CfgAbi {
|
||||
Abi64 = "abi64",
|
||||
AbiV2 = "abiv2",
|
||||
AbiV2Hf = "abiv2hf",
|
||||
@@ -2090,12 +2093,40 @@ pub enum Abi {
|
||||
other_variant = Other;
|
||||
}
|
||||
|
||||
impl Abi {
|
||||
impl CfgAbi {
|
||||
pub fn desc_symbol(&self) -> Symbol {
|
||||
Symbol::intern(self.desc())
|
||||
}
|
||||
}
|
||||
|
||||
crate::target_spec_enum! {
|
||||
/// An enum representing possible values for the `llvm_abiname` field of [`TargetOptions`].
|
||||
/// This field is used by LLVM on some targets to control which ABI to use.
|
||||
pub enum LlvmAbi {
|
||||
// RISC-V and LoongArch
|
||||
Ilp32 = "ilp32",
|
||||
Ilp32f = "ilp32f",
|
||||
Ilp32d = "ilp32d",
|
||||
Ilp32e = "ilp32e",
|
||||
Ilp32s = "ilp32s",
|
||||
Lp64 = "lp64",
|
||||
Lp64f = "lp64f",
|
||||
Lp64d = "lp64d",
|
||||
Lp64e = "lp64e",
|
||||
Lp64s = "lp64s",
|
||||
// MIPS
|
||||
O32 = "o32",
|
||||
N32 = "n32",
|
||||
N64 = "n64",
|
||||
// PowerPC
|
||||
ElfV1 = "elfv1",
|
||||
ElfV2 = "elfv2",
|
||||
|
||||
Unspecified = "",
|
||||
}
|
||||
other_variant = Other;
|
||||
}
|
||||
|
||||
/// Everything `rustc` knows about how to compile for a specific target.
|
||||
///
|
||||
/// Every field here must be specified, and has no default value.
|
||||
@@ -2221,13 +2252,18 @@ pub struct TargetOptions {
|
||||
pub os: Os,
|
||||
/// Environment name to use for conditional compilation (`target_env`). Defaults to [`Env::Unspecified`].
|
||||
pub env: Env,
|
||||
/// ABI name to distinguish multiple ABIs on the same OS and architecture. For instance, `"eabi"`
|
||||
/// or `"eabihf"`. Defaults to [`Abi::Unspecified`].
|
||||
/// This field is *not* forwarded directly to LLVM and therefore does not control which ABI (in
|
||||
/// the sense of function calling convention) is actually used; its primary purpose is
|
||||
/// `cfg(target_abi)`. The actual calling convention is controlled by `llvm_abiname`,
|
||||
/// `llvm_floatabi`, and `rustc_abi`.
|
||||
pub abi: Abi,
|
||||
/// ABI name to distinguish multiple ABIs on the same OS and architecture. For instance,
|
||||
/// `"eabi"` or `"eabihf"`. Defaults to [`CfgAbi::Unspecified`].
|
||||
/// The only purpose of this field is to control `cfg(target_abi)`. This does not control the
|
||||
/// calling convention used by this target! The actual calling convention is controlled by
|
||||
/// `llvm_abiname`, `llvm_floatabi`, and `rustc_abi`.
|
||||
///
|
||||
/// In a target spec, this field generally *informs* the user about what the ABI is, but you
|
||||
/// have to also set up other parts of the target spec to ensure that this information is
|
||||
/// correct. In the rest of the compiler, do not check this field if what you actually need to
|
||||
/// know about is the calling convention. Most targets have an open-ended set of values for this
|
||||
/// field.
|
||||
pub cfg_abi: CfgAbi,
|
||||
/// Vendor name to use for conditional compilation (`target_vendor`). Defaults to "unknown".
|
||||
#[rustc_lint_opt_deny_field_access(
|
||||
"use `Target::is_like_*` instead of this field; see https://github.com/rust-lang/rust/issues/100343 for rationale"
|
||||
@@ -2537,7 +2573,7 @@ pub struct TargetOptions {
|
||||
|
||||
/// LLVM ABI name, corresponds to the '-mabi' parameter available in multilib C compilers
|
||||
/// and the `-target-abi` flag in llc. In the LLVM API this is `MCOptions.ABIName`.
|
||||
pub llvm_abiname: StaticCow<str>,
|
||||
pub llvm_abiname: LlvmAbi,
|
||||
|
||||
/// Control the float ABI to use, for architectures that support it. The only architecture we
|
||||
/// currently use this for is ARM. Corresponds to the `-float-abi` flag in llc. In the LLVM API
|
||||
@@ -2550,7 +2586,6 @@ pub struct TargetOptions {
|
||||
/// Picks a specific ABI for this target. This is *not* just for "Rust" ABI functions,
|
||||
/// it can also affect "C" ABI functions; the point is that this flag is interpreted by
|
||||
/// rustc and not forwarded to LLVM.
|
||||
/// So far, this is only used on x86.
|
||||
pub rustc_abi: Option<RustcAbi>,
|
||||
|
||||
/// Whether or not RelaxElfRelocation flag will be passed to the linker
|
||||
@@ -2739,7 +2774,7 @@ fn default() -> TargetOptions {
|
||||
c_int_width: 32,
|
||||
os: Os::None,
|
||||
env: Env::Unspecified,
|
||||
abi: Abi::Unspecified,
|
||||
cfg_abi: CfgAbi::Unspecified,
|
||||
vendor: "unknown".into(),
|
||||
linker: option_env!("CFG_DEFAULT_LINKER").map(|s| s.into()),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::Yes, Lld::No),
|
||||
@@ -2835,7 +2870,7 @@ fn default() -> TargetOptions {
|
||||
merge_functions: MergeFunctions::Aliases,
|
||||
mcount: "mcount".into(),
|
||||
llvm_mcount_intrinsic: None,
|
||||
llvm_abiname: "".into(),
|
||||
llvm_abiname: LlvmAbi::Unspecified,
|
||||
llvm_floatabi: None,
|
||||
rustc_abi: None,
|
||||
relax_elf_relocations: false,
|
||||
@@ -3183,71 +3218,106 @@ macro_rules! check_matches {
|
||||
);
|
||||
}
|
||||
|
||||
// Ensure built-in targets don't use the `Other` variants.
|
||||
if kind == TargetKind::Builtin {
|
||||
check!(
|
||||
!matches!(self.arch, Arch::Other(_)),
|
||||
"`Arch::Other` is only meant for JSON targets"
|
||||
);
|
||||
check!(!matches!(self.os, Os::Other(_)), "`Os::Other` is only meant for JSON targets");
|
||||
check!(
|
||||
!matches!(self.env, Env::Other(_)),
|
||||
"`Env::Other` is only meant for JSON targets"
|
||||
);
|
||||
check!(
|
||||
!matches!(self.cfg_abi, CfgAbi::Other(_)),
|
||||
"`CfgAbi::Other` is only meant for JSON targets"
|
||||
);
|
||||
check!(
|
||||
!matches!(self.llvm_abiname, LlvmAbi::Other(_)),
|
||||
"`LlvmAbi::Other` is only meant for JSON targets"
|
||||
);
|
||||
}
|
||||
|
||||
// Check ABI flag consistency, for the architectures where we have proper ABI treatment.
|
||||
// To ensure targets are trated consistently, please consult with the team before allowing
|
||||
// new cases.
|
||||
match self.arch {
|
||||
Arch::X86 => {
|
||||
check!(self.llvm_abiname.is_empty(), "`llvm_abiname` is unused on x86-32");
|
||||
check!(
|
||||
self.llvm_abiname == LlvmAbi::Unspecified,
|
||||
"`llvm_abiname` is unused on x86-32"
|
||||
);
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on x86-32");
|
||||
check_matches!(
|
||||
(&self.rustc_abi, &self.abi),
|
||||
(&self.rustc_abi, &self.cfg_abi),
|
||||
// FIXME: we do not currently set a target_abi for softfloat targets here,
|
||||
// but we probably should, so we already allow it.
|
||||
(Some(RustcAbi::Softfloat), Abi::SoftFloat | Abi::Unspecified | Abi::Other(_))
|
||||
| (
|
||||
Some(RustcAbi::X86Sse2) | None,
|
||||
Abi::Uwp | Abi::Llvm | Abi::Sim | Abi::Unspecified | Abi::Other(_)
|
||||
),
|
||||
(
|
||||
Some(RustcAbi::Softfloat),
|
||||
CfgAbi::SoftFloat | CfgAbi::Unspecified | CfgAbi::Other(_)
|
||||
) | (
|
||||
Some(RustcAbi::X86Sse2) | None,
|
||||
CfgAbi::Uwp
|
||||
| CfgAbi::Llvm
|
||||
| CfgAbi::Sim
|
||||
| CfgAbi::Unspecified
|
||||
| CfgAbi::Other(_)
|
||||
),
|
||||
"invalid x86-32 Rust-specific ABI and `cfg(target_abi)` combination:\n\
|
||||
Rust-specific ABI: {:?}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.rustc_abi,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
Arch::X86_64 => {
|
||||
check!(self.llvm_abiname.is_empty(), "`llvm_abiname` is unused on x86-64");
|
||||
check!(
|
||||
self.llvm_abiname == LlvmAbi::Unspecified,
|
||||
"`llvm_abiname` is unused on x86-64"
|
||||
);
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on x86-64");
|
||||
// FIXME: we do not currently set a target_abi for softfloat targets here, but we
|
||||
// probably should, so we already allow it.
|
||||
// FIXME: Ensure that target_abi = "x32" correlates with actually using that ABI.
|
||||
// Do any of the others need a similar check?
|
||||
check_matches!(
|
||||
(&self.rustc_abi, &self.abi),
|
||||
(Some(RustcAbi::Softfloat), Abi::SoftFloat | Abi::Unspecified | Abi::Other(_))
|
||||
| (
|
||||
None,
|
||||
Abi::X32
|
||||
| Abi::Llvm
|
||||
| Abi::Fortanix
|
||||
| Abi::Uwp
|
||||
| Abi::MacAbi
|
||||
| Abi::Sim
|
||||
| Abi::Unspecified
|
||||
| Abi::Other(_)
|
||||
),
|
||||
(&self.rustc_abi, &self.cfg_abi),
|
||||
(
|
||||
Some(RustcAbi::Softfloat),
|
||||
CfgAbi::SoftFloat | CfgAbi::Unspecified | CfgAbi::Other(_)
|
||||
) | (
|
||||
None,
|
||||
CfgAbi::X32
|
||||
| CfgAbi::Llvm
|
||||
| CfgAbi::Fortanix
|
||||
| CfgAbi::Uwp
|
||||
| CfgAbi::MacAbi
|
||||
| CfgAbi::Sim
|
||||
| CfgAbi::Unspecified
|
||||
| CfgAbi::Other(_)
|
||||
),
|
||||
"invalid x86-64 Rust-specific ABI and `cfg(target_abi)` combination:\n\
|
||||
Rust-specific ABI: {:?}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.rustc_abi,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
Arch::RiscV32 => {
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on RISC-V");
|
||||
check!(self.rustc_abi.is_none(), "`rustc_abi` is unused on RISC-V");
|
||||
check_matches!(
|
||||
(&*self.llvm_abiname, &self.abi),
|
||||
("ilp32", Abi::Unspecified | Abi::Other(_))
|
||||
| ("ilp32f", Abi::Unspecified | Abi::Other(_))
|
||||
| ("ilp32d", Abi::Unspecified | Abi::Other(_))
|
||||
| ("ilp32e", Abi::Ilp32e),
|
||||
(&self.llvm_abiname, &self.cfg_abi),
|
||||
(LlvmAbi::Ilp32, CfgAbi::Unspecified | CfgAbi::Other(_))
|
||||
| (LlvmAbi::Ilp32f, CfgAbi::Unspecified | CfgAbi::Other(_))
|
||||
| (LlvmAbi::Ilp32d, CfgAbi::Unspecified | CfgAbi::Other(_))
|
||||
| (LlvmAbi::Ilp32e, CfgAbi::Ilp32e),
|
||||
"invalid RISC-V ABI name and `cfg(target_abi)` combination:\n\
|
||||
ABI name: {}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.llvm_abiname,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
Arch::RiscV64 => {
|
||||
@@ -3255,68 +3325,77 @@ macro_rules! check_matches {
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on RISC-V");
|
||||
check!(self.rustc_abi.is_none(), "`rustc_abi` is unused on RISC-V");
|
||||
check_matches!(
|
||||
(&*self.llvm_abiname, &self.abi),
|
||||
("lp64", Abi::Unspecified | Abi::Other(_))
|
||||
| ("lp64f", Abi::Unspecified | Abi::Other(_))
|
||||
| ("lp64d", Abi::Unspecified | Abi::Other(_))
|
||||
| ("lp64e", Abi::Unspecified | Abi::Other(_)),
|
||||
(&self.llvm_abiname, &self.cfg_abi),
|
||||
(LlvmAbi::Lp64, CfgAbi::Unspecified | CfgAbi::Other(_))
|
||||
| (LlvmAbi::Lp64f, CfgAbi::Unspecified | CfgAbi::Other(_))
|
||||
| (LlvmAbi::Lp64d, CfgAbi::Unspecified | CfgAbi::Other(_))
|
||||
| (LlvmAbi::Lp64e, CfgAbi::Unspecified | CfgAbi::Other(_)),
|
||||
"invalid RISC-V ABI name and `cfg(target_abi)` combination:\n\
|
||||
ABI name: {}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.llvm_abiname,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
Arch::Arm => {
|
||||
check!(self.llvm_abiname.is_empty(), "`llvm_abiname` is unused on ARM");
|
||||
check!(
|
||||
self.llvm_abiname == LlvmAbi::Unspecified,
|
||||
"`llvm_abiname` is unused on ARM"
|
||||
);
|
||||
check!(self.rustc_abi.is_none(), "`rustc_abi` is unused on ARM");
|
||||
check_matches!(
|
||||
(&self.llvm_floatabi, &self.abi),
|
||||
(&self.llvm_floatabi, &self.cfg_abi),
|
||||
(
|
||||
Some(FloatAbi::Hard),
|
||||
Abi::EabiHf | Abi::Uwp | Abi::Unspecified | Abi::Other(_)
|
||||
) | (Some(FloatAbi::Soft), Abi::Eabi),
|
||||
CfgAbi::EabiHf | CfgAbi::Uwp | CfgAbi::Unspecified | CfgAbi::Other(_)
|
||||
) | (Some(FloatAbi::Soft), CfgAbi::Eabi),
|
||||
"Invalid combination of float ABI and `cfg(target_abi)` for ARM target\n\
|
||||
float ABI: {:?}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.llvm_floatabi,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
)
|
||||
}
|
||||
Arch::AArch64 => {
|
||||
check!(self.llvm_abiname.is_empty(), "`llvm_abiname` is unused on aarch64");
|
||||
check!(
|
||||
self.llvm_abiname == LlvmAbi::Unspecified,
|
||||
"`llvm_abiname` is unused on aarch64"
|
||||
);
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on aarch64");
|
||||
// FIXME: Ensure that target_abi = "ilp32" correlates with actually using that ABI.
|
||||
// Do any of the others need a similar check?
|
||||
check_matches!(
|
||||
(&self.rustc_abi, &self.abi),
|
||||
(Some(RustcAbi::Softfloat), Abi::SoftFloat)
|
||||
(&self.rustc_abi, &self.cfg_abi),
|
||||
(Some(RustcAbi::Softfloat), CfgAbi::SoftFloat)
|
||||
| (
|
||||
None,
|
||||
Abi::Ilp32
|
||||
| Abi::Llvm
|
||||
| Abi::MacAbi
|
||||
| Abi::Sim
|
||||
| Abi::Uwp
|
||||
| Abi::Unspecified
|
||||
| Abi::Other(_)
|
||||
CfgAbi::Ilp32
|
||||
| CfgAbi::Llvm
|
||||
| CfgAbi::MacAbi
|
||||
| CfgAbi::Sim
|
||||
| CfgAbi::Uwp
|
||||
| CfgAbi::Unspecified
|
||||
| CfgAbi::Other(_)
|
||||
),
|
||||
"invalid aarch64 Rust-specific ABI and `cfg(target_abi)` combination:\n\
|
||||
Rust-specific ABI: {:?}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.rustc_abi,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
Arch::PowerPC => {
|
||||
check!(self.llvm_abiname.is_empty(), "`llvm_abiname` is unused on PowerPC");
|
||||
check!(
|
||||
self.llvm_abiname == LlvmAbi::Unspecified,
|
||||
"`llvm_abiname` is unused on PowerPC"
|
||||
);
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on PowerPC");
|
||||
check!(self.rustc_abi.is_none(), "`rustc_abi` is unused on PowerPC");
|
||||
// FIXME: Check that `target_abi` matches the actually configured ABI (with or
|
||||
// without SPE).
|
||||
check_matches!(
|
||||
self.abi,
|
||||
Abi::Spe | Abi::Unspecified | Abi::Other(_),
|
||||
self.cfg_abi,
|
||||
CfgAbi::Spe | CfgAbi::Unspecified | CfgAbi::Other(_),
|
||||
"invalid `target_abi` for PowerPC"
|
||||
);
|
||||
}
|
||||
@@ -3328,116 +3407,123 @@ macro_rules! check_matches {
|
||||
// FIXME: Check that `target_abi` matches the actually configured ABI
|
||||
// (vec-default vs vec-ext).
|
||||
check_matches!(
|
||||
(&*self.llvm_abiname, &self.abi),
|
||||
("", Abi::VecDefault | Abi::VecExtAbi),
|
||||
(&self.llvm_abiname, &self.cfg_abi),
|
||||
(LlvmAbi::Unspecified, CfgAbi::VecDefault | CfgAbi::VecExtAbi),
|
||||
"invalid PowerPC64 AIX ABI name and `cfg(target_abi)` combination:\n\
|
||||
ABI name: {}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.llvm_abiname,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
} else if self.endian == Endian::Big {
|
||||
check_matches!(
|
||||
(&*self.llvm_abiname, &self.abi),
|
||||
("elfv1", Abi::ElfV1) | ("elfv2", Abi::ElfV2),
|
||||
(&self.llvm_abiname, &self.cfg_abi),
|
||||
(LlvmAbi::ElfV1, CfgAbi::ElfV1) | (LlvmAbi::ElfV2, CfgAbi::ElfV2),
|
||||
"invalid PowerPC64 big-endian ABI name and `cfg(target_abi)` combination:\n\
|
||||
ABI name: {}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.llvm_abiname,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
} else {
|
||||
check_matches!(
|
||||
(&*self.llvm_abiname, &self.abi),
|
||||
("elfv2", Abi::ElfV2),
|
||||
(&self.llvm_abiname, &self.cfg_abi),
|
||||
(LlvmAbi::ElfV2, CfgAbi::ElfV2),
|
||||
"invalid PowerPC64 little-endian ABI name and `cfg(target_abi)` combination:\n\
|
||||
ABI name: {}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.llvm_abiname,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
}
|
||||
Arch::S390x => {
|
||||
check!(self.llvm_abiname.is_empty(), "`llvm_abiname` is unused on s390x");
|
||||
check!(
|
||||
self.llvm_abiname == LlvmAbi::Unspecified,
|
||||
"`llvm_abiname` is unused on s390x"
|
||||
);
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on s390x");
|
||||
check_matches!(
|
||||
(&self.rustc_abi, &self.abi),
|
||||
(Some(RustcAbi::Softfloat), Abi::SoftFloat)
|
||||
| (None, Abi::Unspecified | Abi::Other(_)),
|
||||
(&self.rustc_abi, &self.cfg_abi),
|
||||
(Some(RustcAbi::Softfloat), CfgAbi::SoftFloat)
|
||||
| (None, CfgAbi::Unspecified | CfgAbi::Other(_)),
|
||||
"invalid s390x Rust-specific ABI and `cfg(target_abi)` combination:\n\
|
||||
Rust-specific ABI: {:?}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.rustc_abi,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
Arch::LoongArch32 => {
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on LoongArch");
|
||||
check!(self.rustc_abi.is_none(), "`rustc_abi` is unused on LoongArch");
|
||||
check_matches!(
|
||||
(&*self.llvm_abiname, &self.abi),
|
||||
("ilp32s", Abi::SoftFloat)
|
||||
| ("ilp32f", Abi::Unspecified | Abi::Other(_))
|
||||
| ("ilp32d", Abi::Unspecified | Abi::Other(_)),
|
||||
(&self.llvm_abiname, &self.cfg_abi),
|
||||
(LlvmAbi::Ilp32s, CfgAbi::SoftFloat)
|
||||
| (LlvmAbi::Ilp32f, CfgAbi::Unspecified | CfgAbi::Other(_))
|
||||
| (LlvmAbi::Ilp32d, CfgAbi::Unspecified | CfgAbi::Other(_)),
|
||||
"invalid LoongArch ABI name and `cfg(target_abi)` combination:\n\
|
||||
ABI name: {}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.llvm_abiname,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
Arch::LoongArch64 => {
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on LoongArch");
|
||||
check!(self.rustc_abi.is_none(), "`rustc_abi` is unused on LoongArch");
|
||||
check_matches!(
|
||||
(&*self.llvm_abiname, &self.abi),
|
||||
("lp64s", Abi::SoftFloat)
|
||||
| ("lp64f", Abi::Unspecified | Abi::Other(_))
|
||||
| ("lp64d", Abi::Unspecified | Abi::Other(_)),
|
||||
(&self.llvm_abiname, &self.cfg_abi),
|
||||
(LlvmAbi::Lp64s, CfgAbi::SoftFloat)
|
||||
| (LlvmAbi::Lp64f, CfgAbi::Unspecified | CfgAbi::Other(_))
|
||||
| (LlvmAbi::Lp64d, CfgAbi::Unspecified | CfgAbi::Other(_)),
|
||||
"invalid LoongArch ABI name and `cfg(target_abi)` combination:\n\
|
||||
ABI name: {}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.llvm_abiname,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
Arch::Mips | Arch::Mips32r6 => {
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on MIPS");
|
||||
check!(self.rustc_abi.is_none(), "`rustc_abi` is unused on MIPS");
|
||||
check_matches!(
|
||||
(&*self.llvm_abiname, &self.abi),
|
||||
("o32", Abi::Unspecified | Abi::Other(_)),
|
||||
(&self.llvm_abiname, &self.cfg_abi),
|
||||
(LlvmAbi::O32, CfgAbi::Unspecified | CfgAbi::Other(_)),
|
||||
"invalid MIPS ABI name and `cfg(target_abi)` combination:\n\
|
||||
ABI name: {}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.llvm_abiname,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
Arch::Mips64 | Arch::Mips64r6 => {
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on MIPS");
|
||||
check!(self.rustc_abi.is_none(), "`rustc_abi` is unused on MIPS");
|
||||
check_matches!(
|
||||
(&*self.llvm_abiname, &self.abi),
|
||||
(&self.llvm_abiname, &self.cfg_abi),
|
||||
// No in-tree targets use "n32" but at least for now we let out-of-tree targets
|
||||
// experiment with that.
|
||||
("n64", Abi::Abi64) | ("n32", Abi::Unspecified | Abi::Other(_)),
|
||||
(LlvmAbi::N64, CfgAbi::Abi64)
|
||||
| (LlvmAbi::N32, CfgAbi::Unspecified | CfgAbi::Other(_)),
|
||||
"invalid MIPS ABI name and `cfg(target_abi)` combination:\n\
|
||||
ABI name: {}\n\
|
||||
cfg(target_abi): {}",
|
||||
self.llvm_abiname,
|
||||
self.abi,
|
||||
self.cfg_abi,
|
||||
);
|
||||
}
|
||||
Arch::CSky => {
|
||||
check!(self.llvm_abiname.is_empty(), "`llvm_abiname` is unused on CSky");
|
||||
check!(
|
||||
self.llvm_abiname == LlvmAbi::Unspecified,
|
||||
"`llvm_abiname` is unused on CSky"
|
||||
);
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on CSky");
|
||||
check!(self.rustc_abi.is_none(), "`rustc_abi` is unused on CSky");
|
||||
// FIXME: Check that `target_abi` matches the actually configured ABI (v2 vs v2hf).
|
||||
check_matches!(
|
||||
self.abi,
|
||||
Abi::AbiV2 | Abi::AbiV2Hf,
|
||||
self.cfg_abi,
|
||||
CfgAbi::AbiV2 | CfgAbi::AbiV2Hf,
|
||||
"invalid `target_abi` for CSky"
|
||||
);
|
||||
}
|
||||
@@ -3446,11 +3532,14 @@ macro_rules! check_matches {
|
||||
// Ensure consistency among built-in targets, but give JSON targets the opportunity
|
||||
// to experiment with these.
|
||||
if kind == TargetKind::Builtin {
|
||||
check!(self.llvm_abiname.is_empty(), "`llvm_abiname` is unused on {arch}");
|
||||
check!(
|
||||
self.llvm_abiname == LlvmAbi::Unspecified,
|
||||
"`llvm_abiname` is unused on {arch}"
|
||||
);
|
||||
check!(self.llvm_floatabi.is_none(), "`llvm_floatabi` is unused on {arch}");
|
||||
check_matches!(
|
||||
self.abi,
|
||||
Abi::Unspecified | Abi::Other(_),
|
||||
self.cfg_abi,
|
||||
CfgAbi::Unspecified | CfgAbi::Other(_),
|
||||
"`target_abi` is unused on {arch}"
|
||||
);
|
||||
}
|
||||
@@ -3665,7 +3754,7 @@ pub fn object_architecture(
|
||||
// it using a custom target specification. N32
|
||||
// is an ILP32 ABI like the Aarch64_Ilp32
|
||||
// and X86_64_X32 cases above and below this one.
|
||||
if self.options.llvm_abiname.as_ref() == "n32" {
|
||||
if self.options.llvm_abiname == LlvmAbi::N32 {
|
||||
Architecture::Mips64_N32
|
||||
} else {
|
||||
Architecture::Mips64
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{
|
||||
Abi, Arch, FramePointer, StackProbeType, Target, TargetMetadata, TargetOptions, base,
|
||||
Arch, CfgAbi, FramePointer, StackProbeType, Target, TargetMetadata, TargetOptions, base,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -20,7 +20,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "E-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32".into(),
|
||||
arch: Arch::AArch64,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Ilp32,
|
||||
cfg_abi: CfgAbi::Ilp32,
|
||||
features: "+v8a,+outline-atomics".into(),
|
||||
// the AAPCS64 expects use of non-leaf frame pointers per
|
||||
// https://github.com/ARM-software/abi-aa/blob/4492d1570eb70c8fd146623e0db65b2d241f12e7/aapcs64/aapcs64.rst#the-frame-pointer
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, RustcAbi, SanitizerSet,
|
||||
Arch, Cc, CfgAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, RustcAbi, SanitizerSet,
|
||||
StackProbeType, Target, TargetMetadata, TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let opts = TargetOptions {
|
||||
abi: Abi::SoftFloat,
|
||||
cfg_abi: CfgAbi::SoftFloat,
|
||||
rustc_abi: Some(RustcAbi::Softfloat),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::spec::{
|
||||
Abi, Arch, FramePointer, StackProbeType, Target, TargetMetadata, TargetOptions, base,
|
||||
Arch, CfgAbi, FramePointer, StackProbeType, Target, TargetMetadata, TargetOptions, base,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32".into(),
|
||||
arch: Arch::AArch64,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Ilp32,
|
||||
cfg_abi: CfgAbi::Ilp32,
|
||||
features: "+v8a,+outline-atomics".into(),
|
||||
// the AAPCS64 expects use of non-leaf frame pointers per
|
||||
// https://github.com/ARM-software/abi-aa/blob/4492d1570eb70c8fd146623e0db65b2d241f12e7/aapcs64/aapcs64.rst#the-frame-pointer
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
// For example, `-C target-cpu=cortex-a53`.
|
||||
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, RustcAbi, SanitizerSet,
|
||||
Arch, Cc, CfgAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, RustcAbi, SanitizerSet,
|
||||
StackProbeType, Target, TargetMetadata, TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let opts = TargetOptions {
|
||||
abi: Abi::SoftFloat,
|
||||
cfg_abi: CfgAbi::SoftFloat,
|
||||
rustc_abi: Some(RustcAbi::Softfloat),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, RustcAbi, SanitizerSet,
|
||||
Arch, Cc, CfgAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, RustcAbi, SanitizerSet,
|
||||
StackProbeType, Target, TargetMetadata, TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let opts = TargetOptions {
|
||||
abi: Abi::SoftFloat,
|
||||
cfg_abi: CfgAbi::SoftFloat,
|
||||
rustc_abi: Some(RustcAbi::Softfloat),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, SanitizerSet, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{
|
||||
Arch, CfgAbi, FloatAbi, SanitizerSet, Target, TargetMetadata, TargetOptions, base,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +15,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
// https://developer.android.com/ndk/guides/abis.html#armeabi
|
||||
features: "+strict-align,+v5te".into(),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+strict-align,+v6".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
features: "+strict-align,+v6,+vfp2".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
// Most of these settings are copied from the arm_unknown_linux_gnueabi
|
||||
// target.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
// Most of these settings are copied from the arm_unknown_linux_gnueabihf
|
||||
// target.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "E-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+strict-align,+v8,+crc".into(),
|
||||
endian: Endian::Big,
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions,
|
||||
Arch, Cc, CfgAbi, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target,
|
||||
TargetMetadata, TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -20,7 +20,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "E-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
endian: Endian::Big,
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions,
|
||||
Arch, Cc, CfgAbi, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target,
|
||||
TargetMetadata, TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -20,7 +20,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "E-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
endian: Endian::Big,
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
//! The default link script is very likely wrong, so you should use
|
||||
//! `-Clink-arg=-Tmy_script.ld` to override that with a correct linker script.
|
||||
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -24,7 +24,7 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Arm,
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
asm_args: cvs!["-mthumb-interwork", "-march=armv4t", "-mlittle-endian",],
|
||||
features: "+soft-float,+strict-align".into(),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+soft-float,+strict-align".into(),
|
||||
// Atomic operations provided by compiler-builtins
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! Targets the ARMv5TE architecture, with `a32` code by default.
|
||||
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Arm,
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
asm_args: cvs!["-mthumb-interwork", "-march=armv5te", "-mlittle-endian",],
|
||||
features: "+soft-float,+strict-align".into(),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+soft-float,+strict-align".into(),
|
||||
// Atomic operations provided by compiler-builtins
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+soft-float,+strict-align".into(),
|
||||
// Atomic operations provided by compiler-builtins
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+soft-float,+strict-align".into(),
|
||||
// Atomic operations provided by compiler-builtins
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! Targets the ARMv6K architecture, with `a32` code by default.
|
||||
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Arm,
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
asm_args: cvs!["-mthumb-interwork", "-march=armv6", "-mlittle-endian",],
|
||||
features: "+soft-float,+strict-align,+v6k".into(),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! Targets the ARMv6K architecture, with `a32` code by default, and hard-float ABI
|
||||
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Arm,
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
asm_args: cvs!["-mthumb-interwork", "-march=armv6", "-mlittle-endian",],
|
||||
features: "+strict-align,+v6k,+vfp2,-d32".into(),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
features: "+v6,+vfp2".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
features: "+v6,+vfp2".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, Env, FloatAbi, LinkerFlavor, Lld, Os, RelocModel, Target, TargetMetadata,
|
||||
Arch, Cc, CfgAbi, Env, FloatAbi, LinkerFlavor, Lld, Os, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions, cvs,
|
||||
};
|
||||
|
||||
@@ -29,7 +29,7 @@ pub(crate) fn target() -> Target {
|
||||
env: Env::Newlib,
|
||||
vendor: "nintendo".into(),
|
||||
cpu: "mpcore".into(),
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
families: cvs!["unix"],
|
||||
linker: Some("arm-none-eabi-gcc".into()),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, FloatAbi, LinkerFlavor, Lld, SanitizerSet, Target, TargetMetadata,
|
||||
Arch, Cc, CfgAbi, FloatAbi, LinkerFlavor, Lld, SanitizerSet, Target, TargetMetadata,
|
||||
TargetOptions, base,
|
||||
};
|
||||
|
||||
@@ -26,7 +26,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+v7,+thumb-mode,+thumb2,+vfp3d16,-neon".into(),
|
||||
supported_sanitizers: SanitizerSet::ADDRESS,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, Env, FloatAbi, LinkerFlavor, Lld, Os, PanicStrategy, RelocModel, Target,
|
||||
Arch, Cc, CfgAbi, Env, FloatAbi, LinkerFlavor, Lld, Os, PanicStrategy, RelocModel, Target,
|
||||
TargetMetadata, TargetOptions, cvs,
|
||||
};
|
||||
|
||||
@@ -19,7 +19,7 @@ pub(crate) fn target() -> Target {
|
||||
options: TargetOptions {
|
||||
os: Os::Rtems,
|
||||
families: cvs!["unix"],
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::Yes, Lld::No),
|
||||
linker: None,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, Env, FloatAbi, LinkerFlavor, Lld, Os, RelocModel, Target, TargetMetadata,
|
||||
Arch, Cc, CfgAbi, Env, FloatAbi, LinkerFlavor, Lld, Os, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions, cvs,
|
||||
};
|
||||
|
||||
@@ -34,7 +34,7 @@ pub(crate) fn target() -> Target {
|
||||
c_int_width: 32,
|
||||
env: Env::Newlib,
|
||||
vendor: "sony".into(),
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::Yes, Lld::No),
|
||||
no_default_libraries: false,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
features: "+v7,+vfp3d16,+thumb2,-neon".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
// This target is for glibc Linux on ARMv7 without thumb-mode, NEON or
|
||||
// hardfloat.
|
||||
@@ -16,7 +16,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
// This target is for glibc Linux on ARMv7 without NEON or
|
||||
// thumb-mode. See the thumbv7neon variant for enabling both.
|
||||
@@ -16,7 +16,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
// Info about features at https://wiki.debian.org/ArmHardFloatPort
|
||||
features: "+v7,+vfp3d16,+thumb2,-neon".into(),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
// This target is for musl Linux on ARMv7 without thumb-mode, NEON or
|
||||
// hardfloat.
|
||||
@@ -19,7 +19,7 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Arm,
|
||||
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
// This target is for musl Linux on ARMv7 without thumb-mode or NEON.
|
||||
|
||||
@@ -18,7 +18,7 @@ pub(crate) fn target() -> Target {
|
||||
// Most of these settings are copied from the armv7_unknown_linux_gnueabihf
|
||||
// target.
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
features: "+v7,+vfp3d16,+thumb2,-neon".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
// This target is for OpenHarmony on ARMv7 Linux with thumb-mode, but no NEON or
|
||||
// hardfloat.
|
||||
@@ -19,7 +19,7 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Arm,
|
||||
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
// This target is for uclibc Linux on ARMv7 without NEON,
|
||||
// thumb-mode or hardfloat.
|
||||
@@ -18,7 +18,7 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Arm,
|
||||
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||
cpu: "generic".into(),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
// This target is for uclibc Linux on ARMv7 without NEON or
|
||||
// thumb-mode. See the thumbv7neon variant for enabling both.
|
||||
@@ -23,7 +23,7 @@ pub(crate) fn target() -> Target {
|
||||
cpu: "generic".into(),
|
||||
max_atomic_width: Some(64),
|
||||
mcount: "_mcount".into(),
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
..base
|
||||
},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
features: "+v7,+vfp3d16,+thumb2,-neon".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::spec::{
|
||||
Abi, Arch, FloatAbi, LinkSelfContainedDefault, Os, PanicStrategy, RelroLevel, Target,
|
||||
Arch, CfgAbi, FloatAbi, LinkSelfContainedDefault, Os, PanicStrategy, RelroLevel, Target,
|
||||
TargetMetadata, TargetOptions,
|
||||
};
|
||||
|
||||
@@ -19,7 +19,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,7 +13,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
// Info about features at https://wiki.debian.org/ArmHardFloatPort
|
||||
features: "+v7,+vfp3d16,+thumb2,-neon".into(),
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, RelocModel, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{
|
||||
Arch, CfgAbi, FloatAbi, RelocModel, Target, TargetMetadata, TargetOptions, base,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let base = base::solid::opts();
|
||||
@@ -14,7 +16,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
linker: Some("arm-kmc-eabi-gcc".into()),
|
||||
features: "+v7,+soft-float,+thumb2,-neon".into(),
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use crate::spec::{Abi, Arch, FloatAbi, RelocModel, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{
|
||||
Arch, CfgAbi, FloatAbi, RelocModel, Target, TargetMetadata, TargetOptions, base,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let base = base::solid::opts();
|
||||
@@ -14,7 +16,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
linker: Some("arm-kmc-eabi-gcc".into()),
|
||||
features: "+v7,+vfp3d16,+thumb2,-neon".into(),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Targets the Little-endian Cortex-A8 (and similar) processors (ARMv7-A)
|
||||
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
features: "+soft-float,-neon,+strict-align".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Targets the Little-endian Cortex-A8 (and similar) processors (ARMv7-A)
|
||||
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
features: "+vfp3d16,-neon,+strict-align".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
// configuration without hardware floating point support.
|
||||
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, FloatAbi, LinkerFlavor, Lld, Os, PanicStrategy, RelocModel, Target,
|
||||
Arch, Cc, CfgAbi, FloatAbi, LinkerFlavor, Lld, Os, PanicStrategy, RelocModel, Target,
|
||||
TargetMetadata, TargetOptions, cvs,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let opts = TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
// configuration with hardware floating point support.
|
||||
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, FloatAbi, LinkerFlavor, Lld, Os, PanicStrategy, RelocModel, Target,
|
||||
Arch, Cc, CfgAbi, FloatAbi, LinkerFlavor, Lld, Os, PanicStrategy, RelocModel, Target,
|
||||
TargetMetadata, TargetOptions, cvs,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let opts = TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, Env, FloatAbi, LinkerFlavor, Lld, Os, PanicStrategy, RelocModel, Target,
|
||||
Arch, Cc, CfgAbi, Env, FloatAbi, LinkerFlavor, Lld, Os, PanicStrategy, RelocModel, Target,
|
||||
TargetMetadata, TargetOptions,
|
||||
};
|
||||
|
||||
@@ -11,7 +11,7 @@ pub(crate) fn target() -> Target {
|
||||
env: Env::V5,
|
||||
os: Os::VexOs,
|
||||
cpu: "cortex-a9".into(),
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
is_like_vexos: true,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Targets the Little-endian Cortex-R4/R5 processor (ARMv7-R)
|
||||
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Eabi,
|
||||
cfg_abi: CfgAbi::Eabi,
|
||||
llvm_floatabi: Some(FloatAbi::Soft),
|
||||
max_atomic_width: Some(64),
|
||||
has_thumb_interworking: true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Targets the Little-endian Cortex-R4F/R5F processor (ARMv7-R)
|
||||
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||
arch: Arch::Arm,
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
features: "+vfp3d16".into(),
|
||||
max_atomic_width: Some(64),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Targets the Little-endian Cortex-R52 processor (ARMv8-R)
|
||||
|
||||
use crate::spec::{Abi, Arch, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, FloatAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -16,7 +16,7 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Arm,
|
||||
|
||||
options: TargetOptions {
|
||||
abi: Abi::EabiHf,
|
||||
cfg_abi: CfgAbi::EabiHf,
|
||||
llvm_floatabi: Some(FloatAbi::Hard),
|
||||
// Armv8-R requires a minimum set of floating-point features equivalent to:
|
||||
// fp-armv8, SP-only, with 16 DP (32 SP) registers
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use crate::spec::{Abi, Arch, Cc, LinkerFlavor, Lld, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{
|
||||
Arch, Cc, CfgAbi, LinkerFlavor, Lld, Target, TargetMetadata, TargetOptions, base,
|
||||
};
|
||||
|
||||
// This target is for glibc Linux on Csky
|
||||
|
||||
@@ -16,7 +18,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-S32-p:32:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:32:32-v128:32:32-a:0:32-Fi32-n32".into(),
|
||||
arch: Arch::CSky,
|
||||
options: TargetOptions {
|
||||
abi: Abi::AbiV2,
|
||||
cfg_abi: CfgAbi::AbiV2,
|
||||
features: "+2e3,+3e7,+7e10,+cache,+dsp1e2,+dspe60,+e1,+e2,+edsp,+elrw,+hard-tp,+high-registers,+hwdiv,+mp,+mp1e2,+nvic,+trust".into(),
|
||||
late_link_args: TargetOptions::link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-l:libatomic.a"]),
|
||||
max_atomic_width: Some(32),
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use crate::spec::{Abi, Arch, Cc, LinkerFlavor, Lld, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{
|
||||
Arch, Cc, CfgAbi, LinkerFlavor, Lld, Target, TargetMetadata, TargetOptions, base,
|
||||
};
|
||||
|
||||
// This target is for glibc Linux on Csky
|
||||
|
||||
@@ -16,7 +18,7 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-S32-p:32:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:32:32-v128:32:32-a:0:32-Fi32-n32".into(),
|
||||
arch: Arch::CSky,
|
||||
options: TargetOptions {
|
||||
abi: Abi::AbiV2Hf,
|
||||
cfg_abi: CfgAbi::AbiV2Hf,
|
||||
cpu: "ck860fv".into(),
|
||||
features: "+hard-float,+hard-float-abi,+2e3,+3e7,+7e10,+cache,+dsp1e2,+dspe60,+e1,+e2,+edsp,+elrw,+hard-tp,+high-registers,+hwdiv,+mp,+mp1e2,+nvic,+trust".into(),
|
||||
late_link_args: TargetOptions::link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-l:libatomic.a", "-mhard-float"]),
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use crate::spec::{
|
||||
Arch, Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetMetadata, TargetOptions,
|
||||
Arch, Cc, LinkerFlavor, Lld, LlvmAbi, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -19,7 +20,7 @@ pub(crate) fn target() -> Target {
|
||||
features: "+f,+d".into(),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
llvm_abiname: "ilp32d".into(),
|
||||
llvm_abiname: LlvmAbi::Ilp32d,
|
||||
max_atomic_width: Some(32),
|
||||
relocation_model: RelocModel::Static,
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions,
|
||||
Arch, Cc, CfgAbi, LinkerFlavor, Lld, LlvmAbi, PanicStrategy, RelocModel, Target,
|
||||
TargetMetadata, TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -18,10 +18,10 @@ pub(crate) fn target() -> Target {
|
||||
options: TargetOptions {
|
||||
cpu: "generic".into(),
|
||||
features: "-f,-d".into(),
|
||||
abi: Abi::SoftFloat,
|
||||
cfg_abi: CfgAbi::SoftFloat,
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
llvm_abiname: "ilp32s".into(),
|
||||
llvm_abiname: LlvmAbi::Ilp32s,
|
||||
max_atomic_width: Some(32),
|
||||
relocation_model: RelocModel::Static,
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use crate::spec::{Arch, CodeModel, SanitizerSet, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{
|
||||
Arch, CodeModel, LlvmAbi, SanitizerSet, Target, TargetMetadata, TargetOptions, base,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -16,7 +18,7 @@ pub(crate) fn target() -> Target {
|
||||
code_model: Some(CodeModel::Medium),
|
||||
cpu: "generic".into(),
|
||||
features: "+f,+d,+lsx,+relax".into(),
|
||||
llvm_abiname: "lp64d".into(),
|
||||
llvm_abiname: LlvmAbi::Lp64d,
|
||||
max_atomic_width: Some(64),
|
||||
supported_sanitizers: SanitizerSet::ADDRESS
|
||||
| SanitizerSet::CFI
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use crate::spec::{Arch, CodeModel, SanitizerSet, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{
|
||||
Arch, CodeModel, LlvmAbi, SanitizerSet, Target, TargetMetadata, TargetOptions, base,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -16,7 +18,7 @@ pub(crate) fn target() -> Target {
|
||||
code_model: Some(CodeModel::Medium),
|
||||
cpu: "generic".into(),
|
||||
features: "+f,+d,+lsx,+relax".into(),
|
||||
llvm_abiname: "lp64d".into(),
|
||||
llvm_abiname: LlvmAbi::Lp64d,
|
||||
max_atomic_width: Some(64),
|
||||
crt_static_default: false,
|
||||
supported_sanitizers: SanitizerSet::ADDRESS
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use crate::spec::{Arch, CodeModel, SanitizerSet, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{
|
||||
Arch, CodeModel, LlvmAbi, SanitizerSet, Target, TargetMetadata, TargetOptions, base,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -16,7 +18,7 @@ pub(crate) fn target() -> Target {
|
||||
code_model: Some(CodeModel::Medium),
|
||||
cpu: "generic".into(),
|
||||
features: "+f,+d,+lsx,+relax".into(),
|
||||
llvm_abiname: "lp64d".into(),
|
||||
llvm_abiname: LlvmAbi::Lp64d,
|
||||
max_atomic_width: Some(64),
|
||||
supported_sanitizers: SanitizerSet::ADDRESS
|
||||
| SanitizerSet::CFI
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use crate::spec::{
|
||||
Arch, Cc, CodeModel, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions,
|
||||
Arch, Cc, CodeModel, LinkerFlavor, Lld, LlvmAbi, PanicStrategy, RelocModel, Target,
|
||||
TargetMetadata, TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -20,7 +20,7 @@ pub(crate) fn target() -> Target {
|
||||
features: "+f,+d,-lsx".into(),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
llvm_abiname: "lp64d".into(),
|
||||
llvm_abiname: LlvmAbi::Lp64d,
|
||||
max_atomic_width: Some(64),
|
||||
relocation_model: RelocModel::Static,
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use crate::spec::{
|
||||
Abi, Arch, Cc, CodeModel, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions,
|
||||
Arch, Cc, CfgAbi, CodeModel, LinkerFlavor, Lld, LlvmAbi, PanicStrategy, RelocModel, Target,
|
||||
TargetMetadata, TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -18,10 +18,10 @@ pub(crate) fn target() -> Target {
|
||||
options: TargetOptions {
|
||||
cpu: "generic".into(),
|
||||
features: "-f,-d".into(),
|
||||
abi: Abi::SoftFloat,
|
||||
cfg_abi: CfgAbi::SoftFloat,
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
llvm_abiname: "lp64s".into(),
|
||||
llvm_abiname: LlvmAbi::Lp64s,
|
||||
max_atomic_width: Some(64),
|
||||
relocation_model: RelocModel::Static,
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{Abi, Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut base = base::linux_musl::opts();
|
||||
@@ -24,10 +24,10 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Mips64,
|
||||
options: TargetOptions {
|
||||
vendor: "openwrt".into(),
|
||||
abi: Abi::Abi64,
|
||||
cfg_abi: CfgAbi::Abi64,
|
||||
endian: Endian::Big,
|
||||
mcount: "_mcount".into(),
|
||||
llvm_abiname: "n64".into(),
|
||||
llvm_abiname: LlvmAbi::N64,
|
||||
..base
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{Abi, Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -15,14 +15,14 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "E-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: Arch::Mips64,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Abi64,
|
||||
cfg_abi: CfgAbi::Abi64,
|
||||
endian: Endian::Big,
|
||||
// NOTE(mips64r2) matches C toolchain
|
||||
cpu: "mips64r2".into(),
|
||||
features: "+mips64r2,+xgot".into(),
|
||||
max_atomic_width: Some(64),
|
||||
mcount: "_mcount".into(),
|
||||
llvm_abiname: "n64".into(),
|
||||
llvm_abiname: LlvmAbi::N64,
|
||||
|
||||
..base::linux_gnu::opts()
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{Abi, Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut base = base::linux_musl::opts();
|
||||
@@ -20,10 +20,10 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "E-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: Arch::Mips64,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Abi64,
|
||||
cfg_abi: CfgAbi::Abi64,
|
||||
endian: Endian::Big,
|
||||
mcount: "_mcount".into(),
|
||||
llvm_abiname: "n64".into(),
|
||||
llvm_abiname: LlvmAbi::N64,
|
||||
..base
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -13,13 +13,13 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: Arch::Mips64,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Abi64,
|
||||
cfg_abi: CfgAbi::Abi64,
|
||||
// NOTE(mips64r2) matches C toolchain
|
||||
cpu: "mips64r2".into(),
|
||||
features: "+mips64r2,+xgot".into(),
|
||||
max_atomic_width: Some(64),
|
||||
mcount: "_mcount".into(),
|
||||
llvm_abiname: "n64".into(),
|
||||
llvm_abiname: LlvmAbi::N64,
|
||||
|
||||
..base::linux_gnu::opts()
|
||||
},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Abi, Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut base = base::linux_musl::opts();
|
||||
@@ -18,9 +18,9 @@ pub(crate) fn target() -> Target {
|
||||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: Arch::Mips64,
|
||||
options: TargetOptions {
|
||||
abi: Abi::Abi64,
|
||||
cfg_abi: CfgAbi::Abi64,
|
||||
mcount: "_mcount".into(),
|
||||
llvm_abiname: "n64".into(),
|
||||
llvm_abiname: LlvmAbi::N64,
|
||||
..base
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{
|
||||
Arch, Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetMetadata, TargetOptions,
|
||||
Arch, Cc, LinkerFlavor, Lld, LlvmAbi, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -24,7 +25,7 @@ pub(crate) fn target() -> Target {
|
||||
endian: Endian::Big,
|
||||
cpu: "mips32r2".into(),
|
||||
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
max_atomic_width: Some(32),
|
||||
|
||||
features: "+mips32r2,+soft-float,+noabicalls".into(),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -18,7 +18,7 @@ pub(crate) fn target() -> Target {
|
||||
endian: Endian::Big,
|
||||
cpu: "mips32r2".into(),
|
||||
features: "+mips32r2,+fpxx,+nooddspreg".into(),
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
max_atomic_width: Some(32),
|
||||
mcount: "_mcount".into(),
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut base = base::linux_musl::opts();
|
||||
@@ -20,7 +20,7 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Mips,
|
||||
options: TargetOptions {
|
||||
endian: Endian::Big,
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
mcount: "_mcount".into(),
|
||||
..base
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -18,7 +18,7 @@ pub(crate) fn target() -> Target {
|
||||
endian: Endian::Big,
|
||||
cpu: "mips32r2".into(),
|
||||
features: "+mips32r2,+soft-float".into(),
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
max_atomic_width: Some(32),
|
||||
mcount: "_mcount".into(),
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{
|
||||
Arch, Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetMetadata, TargetOptions,
|
||||
Arch, Cc, LinkerFlavor, Lld, LlvmAbi, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -24,7 +25,7 @@ pub(crate) fn target() -> Target {
|
||||
endian: Endian::Little,
|
||||
cpu: "mips32r2".into(),
|
||||
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
max_atomic_width: Some(32),
|
||||
|
||||
features: "+mips32r2,+soft-float,+noabicalls".into(),
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use crate::spec::{
|
||||
Arch, Cc, LinkerFlavor, Lld, Os, RelocModel, Target, TargetMetadata, TargetOptions, cvs,
|
||||
Arch, Cc, LinkerFlavor, Lld, LlvmAbi, Os, RelocModel, Target, TargetMetadata, TargetOptions,
|
||||
cvs,
|
||||
};
|
||||
|
||||
// The PSP has custom linker requirements.
|
||||
@@ -36,7 +37,7 @@ pub(crate) fn target() -> Target {
|
||||
|
||||
// PSP does not support trap-on-condition instructions.
|
||||
llvm_args: cvs!["-mno-check-zero-division"],
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
pre_link_args,
|
||||
link_script: Some(LINKER_SCRIPT.into()),
|
||||
..Default::default()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::spec::{
|
||||
Arch, Cc, LinkerFlavor, Lld, Os, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
Arch, Cc, LinkerFlavor, Lld, LlvmAbi, Os, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions, cvs,
|
||||
};
|
||||
|
||||
@@ -41,7 +41,7 @@ pub(crate) fn target() -> Target {
|
||||
|
||||
// PSX does not support trap-on-condition instructions.
|
||||
llvm_args: cvs!["-mno-check-zero-division"],
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
..Default::default()
|
||||
},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -16,7 +16,7 @@ pub(crate) fn target() -> Target {
|
||||
options: TargetOptions {
|
||||
cpu: "mips32r2".into(),
|
||||
features: "+mips32r2,+fpxx,+nooddspreg".into(),
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
max_atomic_width: Some(32),
|
||||
mcount: "_mcount".into(),
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut base = base::linux_musl::opts();
|
||||
@@ -16,6 +16,6 @@ pub(crate) fn target() -> Target {
|
||||
pointer_width: 32,
|
||||
data_layout: "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64".into(),
|
||||
arch: Arch::Mips,
|
||||
options: TargetOptions { llvm_abiname: "o32".into(), mcount: "_mcount".into(), ..base },
|
||||
options: TargetOptions { llvm_abiname: LlvmAbi::O32, mcount: "_mcount".into(), ..base },
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -16,7 +16,7 @@ pub(crate) fn target() -> Target {
|
||||
options: TargetOptions {
|
||||
cpu: "mips32r2".into(),
|
||||
features: "+mips32r2,+soft-float".into(),
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
max_atomic_width: Some(32),
|
||||
mcount: "_mcount".into(),
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut base = base::netbsd::opts();
|
||||
@@ -20,7 +20,7 @@ pub(crate) fn target() -> Target {
|
||||
arch: Arch::Mips,
|
||||
options: TargetOptions {
|
||||
features: "+soft-float".into(),
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
mcount: "__mcount".into(),
|
||||
endian: Endian::Little,
|
||||
..base
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
//! Can be used for MIPS M4K core (e.g. on PIC32MX devices)
|
||||
|
||||
use crate::spec::{
|
||||
Arch, Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetMetadata, TargetOptions,
|
||||
Arch, Cc, LinkerFlavor, Lld, LlvmAbi, PanicStrategy, RelocModel, Target, TargetMetadata,
|
||||
TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
@@ -23,7 +24,7 @@ pub(crate) fn target() -> Target {
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
cpu: "mips32r2".into(),
|
||||
features: "+mips32r2,+soft-float,+noabicalls".into(),
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
max_atomic_width: Some(32),
|
||||
linker: Some("rust-lld".into()),
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use rustc_abi::Endian;
|
||||
|
||||
use crate::spec::{Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -18,7 +18,7 @@ pub(crate) fn target() -> Target {
|
||||
endian: Endian::Big,
|
||||
cpu: "mips32r6".into(),
|
||||
features: "+mips32r6".into(),
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
max_atomic_width: Some(32),
|
||||
mcount: "_mcount".into(),
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::spec::{Arch, Target, TargetMetadata, TargetOptions, base};
|
||||
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
@@ -16,7 +16,7 @@ pub(crate) fn target() -> Target {
|
||||
options: TargetOptions {
|
||||
cpu: "mips32r6".into(),
|
||||
features: "+mips32r6".into(),
|
||||
llvm_abiname: "o32".into(),
|
||||
llvm_abiname: LlvmAbi::O32,
|
||||
max_atomic_width: Some(32),
|
||||
mcount: "_mcount".into(),
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user