Rollup merge of #134932 - RalfJung:arm-float-abi, r=workingjubilee
explicitly set float ABI for all ARM targets We currently always set the `FloatABIType` field in the LLVM target machine to `Default`, which means LLVM infers the ARM float ABI (hard vs soft) from the LLVM target triple. This causes problems such as having to set the LLVM triple to `*-gnueabi` for our `musleabi` targets to ensure they get correctly inferred as soft-float targets. It also means rustc doesn't really know which float ABI ends up being used, which is a blocker for https://github.com/rust-lang/rust/pull/134794. So I think we should stop doing that and instead explicitly control that value. That's what this PR implements. See [Zulip](https://rust-lang.zulipchat.com/#narrow/channel/187780-t-compiler.2Fwg-llvm/topic/Softfloat.20ABI.2C.20hardfloat.20instructions) for more context. Best reviewed commit-by-commit. I hope I got all those `llvm_floatabi` values right...
This commit is contained in:
commit
e49929e44d
66 changed files with 258 additions and 103 deletions
|
@ -25,7 +25,7 @@ impl OwnedTargetMachine {
|
||||||
model: llvm::CodeModel,
|
model: llvm::CodeModel,
|
||||||
reloc: llvm::RelocModel,
|
reloc: llvm::RelocModel,
|
||||||
level: llvm::CodeGenOptLevel,
|
level: llvm::CodeGenOptLevel,
|
||||||
use_soft_fp: bool,
|
float_abi: llvm::FloatAbi,
|
||||||
function_sections: bool,
|
function_sections: bool,
|
||||||
data_sections: bool,
|
data_sections: bool,
|
||||||
unique_section_names: bool,
|
unique_section_names: bool,
|
||||||
|
@ -57,7 +57,7 @@ impl OwnedTargetMachine {
|
||||||
model,
|
model,
|
||||||
reloc,
|
reloc,
|
||||||
level,
|
level,
|
||||||
use_soft_fp,
|
float_abi,
|
||||||
function_sections,
|
function_sections,
|
||||||
data_sections,
|
data_sections,
|
||||||
unique_section_names,
|
unique_section_names,
|
||||||
|
|
|
@ -26,7 +26,7 @@ use rustc_session::config::{
|
||||||
self, Lto, OutputType, Passes, RemapPathScopeComponents, SplitDwarfKind, SwitchWithOptPath,
|
self, Lto, OutputType, Passes, RemapPathScopeComponents, SplitDwarfKind, SwitchWithOptPath,
|
||||||
};
|
};
|
||||||
use rustc_span::{BytePos, InnerSpan, Pos, SpanData, SyntaxContext, sym};
|
use rustc_span::{BytePos, InnerSpan, Pos, SpanData, SyntaxContext, sym};
|
||||||
use rustc_target::spec::{CodeModel, RelocModel, SanitizerSet, SplitDebuginfo, TlsModel};
|
use rustc_target::spec::{CodeModel, FloatAbi, RelocModel, SanitizerSet, SplitDebuginfo, TlsModel};
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
use crate::back::lto::ThinBuffer;
|
use crate::back::lto::ThinBuffer;
|
||||||
|
@ -181,6 +181,14 @@ pub(crate) fn to_llvm_code_model(code_model: Option<CodeModel>) -> llvm::CodeMod
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn to_llvm_float_abi(float_abi: Option<FloatAbi>) -> llvm::FloatAbi {
|
||||||
|
match float_abi {
|
||||||
|
None => llvm::FloatAbi::Default,
|
||||||
|
Some(FloatAbi::Soft) => llvm::FloatAbi::Soft,
|
||||||
|
Some(FloatAbi::Hard) => llvm::FloatAbi::Hard,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn target_machine_factory(
|
pub(crate) fn target_machine_factory(
|
||||||
sess: &Session,
|
sess: &Session,
|
||||||
optlvl: config::OptLevel,
|
optlvl: config::OptLevel,
|
||||||
|
@ -189,12 +197,12 @@ pub(crate) fn target_machine_factory(
|
||||||
let reloc_model = to_llvm_relocation_model(sess.relocation_model());
|
let reloc_model = to_llvm_relocation_model(sess.relocation_model());
|
||||||
|
|
||||||
let (opt_level, _) = to_llvm_opt_settings(optlvl);
|
let (opt_level, _) = to_llvm_opt_settings(optlvl);
|
||||||
let use_softfp = if sess.target.arch == "arm" {
|
let float_abi = if sess.target.arch == "arm" && sess.opts.cg.soft_float {
|
||||||
sess.opts.cg.soft_float
|
llvm::FloatAbi::Soft
|
||||||
} else {
|
} else {
|
||||||
// `validate_commandline_args_with_session_available` has already warned about this being
|
// `validate_commandline_args_with_session_available` has already warned about this being
|
||||||
// ignored. Let's make sure LLVM doesn't suddenly start using this flag on more targets.
|
// ignored. Let's make sure LLVM doesn't suddenly start using this flag on more targets.
|
||||||
false
|
to_llvm_float_abi(sess.target.llvm_floatabi)
|
||||||
};
|
};
|
||||||
|
|
||||||
let ffunction_sections =
|
let ffunction_sections =
|
||||||
|
@ -290,7 +298,7 @@ pub(crate) fn target_machine_factory(
|
||||||
code_model,
|
code_model,
|
||||||
reloc_model,
|
reloc_model,
|
||||||
opt_level,
|
opt_level,
|
||||||
use_softfp,
|
float_abi,
|
||||||
ffunction_sections,
|
ffunction_sections,
|
||||||
fdata_sections,
|
fdata_sections,
|
||||||
funique_section_names,
|
funique_section_names,
|
||||||
|
|
|
@ -526,7 +526,7 @@ pub struct SanitizerOptions {
|
||||||
pub sanitize_kernel_address_recover: bool,
|
pub sanitize_kernel_address_recover: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// LLVMRelocMode
|
/// LLVMRustRelocModel
|
||||||
#[derive(Copy, Clone, PartialEq)]
|
#[derive(Copy, Clone, PartialEq)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
pub enum RelocModel {
|
pub enum RelocModel {
|
||||||
|
@ -538,6 +538,15 @@ pub enum RelocModel {
|
||||||
ROPI_RWPI,
|
ROPI_RWPI,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// LLVMRustFloatABI
|
||||||
|
#[derive(Copy, Clone, PartialEq)]
|
||||||
|
#[repr(C)]
|
||||||
|
pub enum FloatAbi {
|
||||||
|
Default,
|
||||||
|
Soft,
|
||||||
|
Hard,
|
||||||
|
}
|
||||||
|
|
||||||
/// LLVMRustCodeModel
|
/// LLVMRustCodeModel
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
|
@ -2192,7 +2201,7 @@ unsafe extern "C" {
|
||||||
Model: CodeModel,
|
Model: CodeModel,
|
||||||
Reloc: RelocModel,
|
Reloc: RelocModel,
|
||||||
Level: CodeGenOptLevel,
|
Level: CodeGenOptLevel,
|
||||||
UseSoftFP: bool,
|
FloatABIType: FloatAbi,
|
||||||
FunctionSections: bool,
|
FunctionSections: bool,
|
||||||
DataSections: bool,
|
DataSections: bool,
|
||||||
UniqueSectionNames: bool,
|
UniqueSectionNames: bool,
|
||||||
|
|
|
@ -308,6 +308,24 @@ static Reloc::Model fromRust(LLVMRustRelocModel RustReloc) {
|
||||||
report_fatal_error("Bad RelocModel.");
|
report_fatal_error("Bad RelocModel.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class LLVMRustFloatABI {
|
||||||
|
Default,
|
||||||
|
Soft,
|
||||||
|
Hard,
|
||||||
|
};
|
||||||
|
|
||||||
|
static FloatABI::ABIType fromRust(LLVMRustFloatABI RustFloatAbi) {
|
||||||
|
switch (RustFloatAbi) {
|
||||||
|
case LLVMRustFloatABI::Default:
|
||||||
|
return FloatABI::Default;
|
||||||
|
case LLVMRustFloatABI::Soft:
|
||||||
|
return FloatABI::Soft;
|
||||||
|
case LLVMRustFloatABI::Hard:
|
||||||
|
return FloatABI::Hard;
|
||||||
|
}
|
||||||
|
report_fatal_error("Bad FloatABI.");
|
||||||
|
}
|
||||||
|
|
||||||
/// getLongestEntryLength - Return the length of the longest entry in the table.
|
/// getLongestEntryLength - Return the length of the longest entry in the table.
|
||||||
template <typename KV> static size_t getLongestEntryLength(ArrayRef<KV> Table) {
|
template <typename KV> static size_t getLongestEntryLength(ArrayRef<KV> Table) {
|
||||||
size_t MaxLen = 0;
|
size_t MaxLen = 0;
|
||||||
|
@ -358,7 +376,7 @@ extern "C" const char *LLVMRustGetHostCPUName(size_t *OutLen) {
|
||||||
extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
|
extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
|
||||||
const char *TripleStr, const char *CPU, const char *Feature,
|
const char *TripleStr, const char *CPU, const char *Feature,
|
||||||
const char *ABIStr, LLVMRustCodeModel RustCM, LLVMRustRelocModel RustReloc,
|
const char *ABIStr, LLVMRustCodeModel RustCM, LLVMRustRelocModel RustReloc,
|
||||||
LLVMRustCodeGenOptLevel RustOptLevel, bool UseSoftFloat,
|
LLVMRustCodeGenOptLevel RustOptLevel, LLVMRustFloatABI RustFloatABIType,
|
||||||
bool FunctionSections, bool DataSections, bool UniqueSectionNames,
|
bool FunctionSections, bool DataSections, bool UniqueSectionNames,
|
||||||
bool TrapUnreachable, bool Singlethread, bool VerboseAsm,
|
bool TrapUnreachable, bool Singlethread, bool VerboseAsm,
|
||||||
bool EmitStackSizeSection, bool RelaxELFRelocations, bool UseInitArray,
|
bool EmitStackSizeSection, bool RelaxELFRelocations, bool UseInitArray,
|
||||||
|
@ -369,6 +387,7 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
|
||||||
auto OptLevel = fromRust(RustOptLevel);
|
auto OptLevel = fromRust(RustOptLevel);
|
||||||
auto RM = fromRust(RustReloc);
|
auto RM = fromRust(RustReloc);
|
||||||
auto CM = fromRust(RustCM);
|
auto CM = fromRust(RustCM);
|
||||||
|
auto FloatABIType = fromRust(RustFloatABIType);
|
||||||
|
|
||||||
std::string Error;
|
std::string Error;
|
||||||
auto Trip = Triple(Triple::normalize(TripleStr));
|
auto Trip = Triple(Triple::normalize(TripleStr));
|
||||||
|
@ -381,10 +400,7 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
|
||||||
|
|
||||||
TargetOptions Options = codegen::InitTargetOptionsFromCodeGenFlags(Trip);
|
TargetOptions Options = codegen::InitTargetOptionsFromCodeGenFlags(Trip);
|
||||||
|
|
||||||
Options.FloatABIType = FloatABI::Default;
|
Options.FloatABIType = FloatABIType;
|
||||||
if (UseSoftFloat) {
|
|
||||||
Options.FloatABIType = FloatABI::Soft;
|
|
||||||
}
|
|
||||||
Options.DataSections = DataSections;
|
Options.DataSections = DataSections;
|
||||||
Options.FunctionSections = FunctionSections;
|
Options.FunctionSections = FunctionSections;
|
||||||
Options.UniqueSectionNames = UniqueSectionNames;
|
Options.UniqueSectionNames = UniqueSectionNames;
|
||||||
|
|
|
@ -2,8 +2,8 @@ use std::borrow::Cow;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
use crate::spec::{
|
use crate::spec::{
|
||||||
Cc, DebuginfoKind, FramePointer, LinkerFlavor, Lld, SplitDebuginfo, StackProbeType, StaticCow,
|
Cc, DebuginfoKind, FloatAbi, FramePointer, LinkerFlavor, Lld, SplitDebuginfo, StackProbeType,
|
||||||
TargetOptions, cvs,
|
StaticCow, TargetOptions, cvs,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -105,6 +105,7 @@ pub(crate) fn base(
|
||||||
) -> (TargetOptions, StaticCow<str>, StaticCow<str>) {
|
) -> (TargetOptions, StaticCow<str>, StaticCow<str>) {
|
||||||
let opts = TargetOptions {
|
let opts = TargetOptions {
|
||||||
abi: abi.target_abi().into(),
|
abi: abi.target_abi().into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
os: os.into(),
|
os: os.into(),
|
||||||
cpu: arch.target_cpu(abi).into(),
|
cpu: arch.target_cpu(abi).into(),
|
||||||
link_env_remove: link_env_remove(os),
|
link_env_remove: link_env_remove(os),
|
||||||
|
|
|
@ -116,6 +116,18 @@ impl Target {
|
||||||
Some(Ok(()))
|
Some(Ok(()))
|
||||||
})).unwrap_or(Ok(()))
|
})).unwrap_or(Ok(()))
|
||||||
} );
|
} );
|
||||||
|
($key_name:ident, FloatAbi) => ( {
|
||||||
|
let name = (stringify!($key_name)).replace("_", "-");
|
||||||
|
obj.remove(&name).and_then(|o| o.as_str().and_then(|s| {
|
||||||
|
match s.parse::<super::FloatAbi>() {
|
||||||
|
Ok(float_abi) => base.$key_name = Some(float_abi),
|
||||||
|
_ => return Some(Err(format!("'{}' is not a valid value for \
|
||||||
|
llvm-floatabi. Use 'soft' or 'hard'.",
|
||||||
|
s))),
|
||||||
|
}
|
||||||
|
Some(Ok(()))
|
||||||
|
})).unwrap_or(Ok(()))
|
||||||
|
} );
|
||||||
($key_name:ident, RelocModel) => ( {
|
($key_name:ident, RelocModel) => ( {
|
||||||
let name = (stringify!($key_name)).replace("_", "-");
|
let name = (stringify!($key_name)).replace("_", "-");
|
||||||
obj.remove(&name).and_then(|o| o.as_str().and_then(|s| {
|
obj.remove(&name).and_then(|o| o.as_str().and_then(|s| {
|
||||||
|
@ -598,6 +610,7 @@ impl Target {
|
||||||
key!(mcount = "target-mcount");
|
key!(mcount = "target-mcount");
|
||||||
key!(llvm_mcount_intrinsic, optional);
|
key!(llvm_mcount_intrinsic, optional);
|
||||||
key!(llvm_abiname);
|
key!(llvm_abiname);
|
||||||
|
key!(llvm_floatabi, FloatAbi)?;
|
||||||
key!(relax_elf_relocations, bool);
|
key!(relax_elf_relocations, bool);
|
||||||
key!(llvm_args, list);
|
key!(llvm_args, list);
|
||||||
key!(use_ctors_section, bool);
|
key!(use_ctors_section, bool);
|
||||||
|
@ -772,6 +785,7 @@ impl ToJson for Target {
|
||||||
target_option_val!(mcount, "target-mcount");
|
target_option_val!(mcount, "target-mcount");
|
||||||
target_option_val!(llvm_mcount_intrinsic);
|
target_option_val!(llvm_mcount_intrinsic);
|
||||||
target_option_val!(llvm_abiname);
|
target_option_val!(llvm_abiname);
|
||||||
|
target_option_val!(llvm_floatabi);
|
||||||
target_option_val!(relax_elf_relocations);
|
target_option_val!(relax_elf_relocations);
|
||||||
target_option_val!(llvm_args);
|
target_option_val!(llvm_args);
|
||||||
target_option_val!(use_ctors_section);
|
target_option_val!(use_ctors_section);
|
||||||
|
|
|
@ -1085,6 +1085,35 @@ impl ToJson for CodeModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The float ABI setting to be configured in the LLVM target machine.
|
||||||
|
#[derive(Clone, Copy, PartialEq, Hash, Debug)]
|
||||||
|
pub enum FloatAbi {
|
||||||
|
Soft,
|
||||||
|
Hard,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromStr for FloatAbi {
|
||||||
|
type Err = ();
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<FloatAbi, ()> {
|
||||||
|
Ok(match s {
|
||||||
|
"soft" => FloatAbi::Soft,
|
||||||
|
"hard" => FloatAbi::Hard,
|
||||||
|
_ => return Err(()),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ToJson for FloatAbi {
|
||||||
|
fn to_json(&self) -> Json {
|
||||||
|
match *self {
|
||||||
|
FloatAbi::Soft => "soft",
|
||||||
|
FloatAbi::Hard => "hard",
|
||||||
|
}
|
||||||
|
.to_json()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, PartialEq, Hash, Debug)]
|
#[derive(Clone, Copy, PartialEq, Hash, Debug)]
|
||||||
pub enum TlsModel {
|
pub enum TlsModel {
|
||||||
GeneralDynamic,
|
GeneralDynamic,
|
||||||
|
@ -2150,6 +2179,8 @@ pub struct TargetOptions {
|
||||||
pub env: StaticCow<str>,
|
pub env: StaticCow<str>,
|
||||||
/// ABI name to distinguish multiple ABIs on the same OS and architecture. For instance, `"eabi"`
|
/// ABI name to distinguish multiple ABIs on the same OS and architecture. For instance, `"eabi"`
|
||||||
/// or `"eabihf"`. Defaults to "".
|
/// or `"eabihf"`. Defaults to "".
|
||||||
|
/// This field is *not* forwarded directly to LLVM; its primary purpose is `cfg(target_abi)`.
|
||||||
|
/// However, parts of the backend do check this field for specific values to enable special behavior.
|
||||||
pub abi: StaticCow<str>,
|
pub abi: StaticCow<str>,
|
||||||
/// Vendor name to use for conditional compilation (`target_vendor`). Defaults to "unknown".
|
/// Vendor name to use for conditional compilation (`target_vendor`). Defaults to "unknown".
|
||||||
pub vendor: StaticCow<str>,
|
pub vendor: StaticCow<str>,
|
||||||
|
@ -2446,8 +2477,17 @@ pub struct TargetOptions {
|
||||||
pub llvm_mcount_intrinsic: Option<StaticCow<str>>,
|
pub llvm_mcount_intrinsic: Option<StaticCow<str>>,
|
||||||
|
|
||||||
/// LLVM ABI name, corresponds to the '-mabi' parameter available in multilib C compilers
|
/// 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: StaticCow<str>,
|
||||||
|
|
||||||
|
/// 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
|
||||||
|
/// this is `FloatABIType`. (clang's `-mfloat-abi` is similar but more complicated since it
|
||||||
|
/// can also affect the `soft-float` target feature.)
|
||||||
|
///
|
||||||
|
/// If not provided, LLVM will infer the float ABI from the target triple (`llvm_target`).
|
||||||
|
pub llvm_floatabi: Option<FloatAbi>,
|
||||||
|
|
||||||
/// Whether or not RelaxElfRelocation flag will be passed to the linker
|
/// Whether or not RelaxElfRelocation flag will be passed to the linker
|
||||||
pub relax_elf_relocations: bool,
|
pub relax_elf_relocations: bool,
|
||||||
|
|
||||||
|
@ -2719,6 +2759,7 @@ impl Default for TargetOptions {
|
||||||
mcount: "mcount".into(),
|
mcount: "mcount".into(),
|
||||||
llvm_mcount_intrinsic: None,
|
llvm_mcount_intrinsic: None,
|
||||||
llvm_abiname: "".into(),
|
llvm_abiname: "".into(),
|
||||||
|
llvm_floatabi: None,
|
||||||
relax_elf_relocations: false,
|
relax_elf_relocations: false,
|
||||||
llvm_args: cvs![],
|
llvm_args: cvs![],
|
||||||
use_ctors_section: false,
|
use_ctors_section: false,
|
||||||
|
@ -3153,7 +3194,8 @@ impl Target {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that RISC-V targets always specify which ABI they use.
|
// Check that RISC-V targets always specify which ABI they use,
|
||||||
|
// and that ARM targets specify their float ABI.
|
||||||
match &*self.arch {
|
match &*self.arch {
|
||||||
"riscv32" => {
|
"riscv32" => {
|
||||||
check_matches!(
|
check_matches!(
|
||||||
|
@ -3170,6 +3212,9 @@ impl Target {
|
||||||
"invalid RISC-V ABI name"
|
"invalid RISC-V ABI name"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
"arm" => {
|
||||||
|
check!(self.llvm_floatabi.is_some(), "ARM targets must specify their float ABI",)
|
||||||
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{SanitizerSet, Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, SanitizerSet, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
// https://developer.android.com/ndk/guides/abis.html#armeabi
|
// https://developer.android.com/ndk/guides/abis.html#armeabi
|
||||||
features: "+strict-align,+v5te".into(),
|
features: "+strict-align,+v5te".into(),
|
||||||
supported_sanitizers: SanitizerSet::ADDRESS,
|
supported_sanitizers: SanitizerSet::ADDRESS,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+strict-align,+v6".into(),
|
features: "+strict-align,+v6".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "\u{1}__gnu_mcount_nc".into(),
|
mcount: "\u{1}__gnu_mcount_nc".into(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
features: "+strict-align,+v6,+vfp2,-d32".into(),
|
features: "+strict-align,+v6,+vfp2,-d32".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "\u{1}__gnu_mcount_nc".into(),
|
mcount: "\u{1}__gnu_mcount_nc".into(),
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
// It's important we use "gnueabi" and not "musleabi" here. LLVM uses it
|
llvm_target: "arm-unknown-linux-musleabi".into(),
|
||||||
// to determine the calling convention and float ABI, and it doesn't
|
|
||||||
// support the "musleabi" value.
|
|
||||||
llvm_target: "arm-unknown-linux-gnueabi".into(),
|
|
||||||
metadata: crate::spec::TargetMetadata {
|
metadata: crate::spec::TargetMetadata {
|
||||||
description: Some("Armv6 Linux with musl 1.2.3".into()),
|
description: Some("Armv6 Linux with musl 1.2.3".into()),
|
||||||
tier: Some(2),
|
tier: Some(2),
|
||||||
|
@ -17,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
// Most of these settings are copied from the arm_unknown_linux_gnueabi
|
// Most of these settings are copied from the arm_unknown_linux_gnueabi
|
||||||
// target.
|
// target.
|
||||||
features: "+strict-align,+v6".into(),
|
features: "+strict-align,+v6".into(),
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
// It's important we use "gnueabihf" and not "musleabihf" here. LLVM
|
llvm_target: "arm-unknown-linux-musleabihf".into(),
|
||||||
// uses it to determine the calling convention and float ABI, and it
|
|
||||||
// doesn't support the "musleabihf" value.
|
|
||||||
llvm_target: "arm-unknown-linux-gnueabihf".into(),
|
|
||||||
metadata: crate::spec::TargetMetadata {
|
metadata: crate::spec::TargetMetadata {
|
||||||
description: Some("Armv6 Linux with musl 1.2.3, hardfloat".into()),
|
description: Some("Armv6 Linux with musl 1.2.3, hardfloat".into()),
|
||||||
tier: Some(2),
|
tier: Some(2),
|
||||||
|
@ -17,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
// Most of these settings are copied from the arm_unknown_linux_gnueabihf
|
// Most of these settings are copied from the arm_unknown_linux_gnueabihf
|
||||||
// target.
|
// target.
|
||||||
features: "+strict-align,+v6,+vfp2,-d32".into(),
|
features: "+strict-align,+v6,+vfp2,-d32".into(),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::abi::Endian;
|
use crate::abi::Endian;
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -15,6 +15,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+strict-align,+v8,+crc".into(),
|
features: "+strict-align,+v8,+crc".into(),
|
||||||
endian: Endian::Big,
|
endian: Endian::Big,
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
// Targets the Big endian Cortex-R4/R5 processor (ARMv7-R)
|
// Targets the Big endian Cortex-R4/R5 processor (ARMv7-R)
|
||||||
|
|
||||||
use crate::abi::Endian;
|
use crate::abi::Endian;
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
use crate::spec::{
|
||||||
|
Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -17,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
endian: Endian::Big,
|
endian: Endian::Big,
|
||||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||||
linker: Some("rust-lld".into()),
|
linker: Some("rust-lld".into()),
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
// Targets the Cortex-R4F/R5F processor (ARMv7-R)
|
// Targets the Cortex-R4F/R5F processor (ARMv7-R)
|
||||||
|
|
||||||
use crate::abi::Endian;
|
use crate::abi::Endian;
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
use crate::spec::{
|
||||||
|
Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -17,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
endian: Endian::Big,
|
endian: Endian::Big,
|
||||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||||
linker: Some("rust-lld".into()),
|
linker: Some("rust-lld".into()),
|
||||||
|
|
|
@ -9,7 +9,9 @@
|
||||||
//! The default link script is very likely wrong, so you should use
|
//! 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.
|
//! `-Clink-arg=-Tmy_script.ld` to override that with a correct linker script.
|
||||||
|
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions, cvs};
|
use crate::spec::{
|
||||||
|
Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions, cvs,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -34,6 +36,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(),
|
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||||
linker: Some("rust-lld".into()),
|
linker: Some("rust-lld".into()),
|
||||||
asm_args: cvs!["-mthumb-interwork", "-march=armv4t", "-mlittle-endian",],
|
asm_args: cvs!["-mthumb-interwork", "-march=armv4t", "-mlittle-endian",],
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+soft-float,+strict-align".into(),
|
features: "+soft-float,+strict-align".into(),
|
||||||
// Atomic operations provided by compiler-builtins
|
// Atomic operations provided by compiler-builtins
|
||||||
max_atomic_width: Some(32),
|
max_atomic_width: Some(32),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//! Targets the ARMv5TE, with code as `a32` code by default.
|
//! Targets the ARMv5TE, with code as `a32` code by default.
|
||||||
|
|
||||||
use crate::spec::{FramePointer, Target, TargetOptions, base, cvs};
|
use crate::spec::{FloatAbi, FramePointer, Target, TargetOptions, base, cvs};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -26,6 +26,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
// extra args passed to the external assembler (assuming `arm-none-eabi-as`):
|
// extra args passed to the external assembler (assuming `arm-none-eabi-as`):
|
||||||
// * activate t32/a32 interworking
|
// * activate t32/a32 interworking
|
||||||
// * use arch ARMv5TE
|
// * use arch ARMv5TE
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+soft-float,+strict-align".into(),
|
features: "+soft-float,+strict-align".into(),
|
||||||
// Atomic operations provided by compiler-builtins
|
// Atomic operations provided by compiler-builtins
|
||||||
max_atomic_width: Some(32),
|
max_atomic_width: Some(32),
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
// FIXME: this comment below does not seem applicable?
|
llvm_target: "armv5te-unknown-linux-musleabi".into(),
|
||||||
// It's important we use "gnueabihf" and not "musleabihf" here. LLVM
|
|
||||||
// uses it to determine the calling convention and float ABI, and LLVM
|
|
||||||
// doesn't support the "musleabihf" value.
|
|
||||||
llvm_target: "armv5te-unknown-linux-gnueabi".into(),
|
|
||||||
metadata: crate::spec::TargetMetadata {
|
metadata: crate::spec::TargetMetadata {
|
||||||
description: Some("Armv5TE Linux with musl 1.2.3".into()),
|
description: Some("Armv5TE Linux with musl 1.2.3".into()),
|
||||||
tier: Some(2),
|
tier: Some(2),
|
||||||
|
@ -18,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+soft-float,+strict-align".into(),
|
features: "+soft-float,+strict-align".into(),
|
||||||
// Atomic operations provided by compiler-builtins
|
// Atomic operations provided by compiler-builtins
|
||||||
max_atomic_width: Some(32),
|
max_atomic_width: Some(32),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+soft-float,+strict-align".into(),
|
features: "+soft-float,+strict-align".into(),
|
||||||
// Atomic operations provided by compiler-builtins
|
// Atomic operations provided by compiler-builtins
|
||||||
max_atomic_width: Some(32),
|
max_atomic_width: Some(32),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
features: "+v6,+vfp2,-d32".into(),
|
features: "+v6,+vfp2,-d32".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "\u{1}__gnu_mcount_nc".into(),
|
mcount: "\u{1}__gnu_mcount_nc".into(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
features: "+v6,+vfp2,-d32".into(),
|
features: "+v6,+vfp2,-d32".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "__mcount".into(),
|
mcount: "__mcount".into(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, RelocModel, Target, TargetOptions, cvs};
|
use crate::spec::{Cc, FloatAbi, LinkerFlavor, Lld, RelocModel, Target, TargetOptions, cvs};
|
||||||
|
|
||||||
/// A base target for Nintendo 3DS devices using the devkitARM toolchain.
|
/// A base target for Nintendo 3DS devices using the devkitARM toolchain.
|
||||||
///
|
///
|
||||||
|
@ -28,8 +28,9 @@ pub(crate) fn target() -> Target {
|
||||||
os: "horizon".into(),
|
os: "horizon".into(),
|
||||||
env: "newlib".into(),
|
env: "newlib".into(),
|
||||||
vendor: "nintendo".into(),
|
vendor: "nintendo".into(),
|
||||||
abi: "eabihf".into(),
|
|
||||||
cpu: "mpcore".into(),
|
cpu: "mpcore".into(),
|
||||||
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
families: cvs!["unix"],
|
families: cvs!["unix"],
|
||||||
linker: Some("arm-none-eabi-gcc".into()),
|
linker: Some("arm-none-eabi-gcc".into()),
|
||||||
relocation_model: RelocModel::Static,
|
relocation_model: RelocModel::Static,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, SanitizerSet, Target, TargetOptions, base};
|
use crate::spec::{Cc, FloatAbi, LinkerFlavor, Lld, SanitizerSet, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target if is for the baseline of the Android v7a ABI
|
// This target if is for the baseline of the Android v7a ABI
|
||||||
// in thumb mode. It's named armv7-* instead of thumbv7-*
|
// in thumb mode. It's named armv7-* instead of thumbv7-*
|
||||||
|
@ -24,6 +24,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+v7,+thumb-mode,+thumb2,+vfp3,-d32,-neon".into(),
|
features: "+v7,+thumb-mode,+thumb2,+vfp3,-d32,-neon".into(),
|
||||||
supported_sanitizers: SanitizerSet::ADDRESS,
|
supported_sanitizers: SanitizerSet::ADDRESS,
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions, cvs};
|
use crate::spec::{
|
||||||
|
Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions, cvs,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -17,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
os: "rtems".into(),
|
os: "rtems".into(),
|
||||||
families: cvs!["unix"],
|
families: cvs!["unix"],
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
linker_flavor: LinkerFlavor::Gnu(Cc::Yes, Lld::No),
|
linker_flavor: LinkerFlavor::Gnu(Cc::Yes, Lld::No),
|
||||||
linker: None,
|
linker: None,
|
||||||
relocation_model: RelocModel::Static,
|
relocation_model: RelocModel::Static,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::abi::Endian;
|
use crate::abi::Endian;
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, RelocModel, Target, TargetOptions, cvs};
|
use crate::spec::{Cc, FloatAbi, LinkerFlavor, Lld, RelocModel, Target, TargetOptions, cvs};
|
||||||
|
|
||||||
/// A base target for PlayStation Vita devices using the VITASDK toolchain (using newlib).
|
/// A base target for PlayStation Vita devices using the VITASDK toolchain (using newlib).
|
||||||
///
|
///
|
||||||
|
@ -32,6 +32,7 @@ pub(crate) fn target() -> Target {
|
||||||
env: "newlib".into(),
|
env: "newlib".into(),
|
||||||
vendor: "sony".into(),
|
vendor: "sony".into(),
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
linker_flavor: LinkerFlavor::Gnu(Cc::Yes, Lld::No),
|
linker_flavor: LinkerFlavor::Gnu(Cc::Yes, Lld::No),
|
||||||
no_default_libraries: false,
|
no_default_libraries: false,
|
||||||
cpu: "cortex-a9".into(),
|
cpu: "cortex-a9".into(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "\u{1}__gnu_mcount_nc".into(),
|
mcount: "\u{1}__gnu_mcount_nc".into(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target is for glibc Linux on ARMv7 without thumb-mode, NEON or
|
// This target is for glibc Linux on ARMv7 without thumb-mode, NEON or
|
||||||
// hardfloat.
|
// hardfloat.
|
||||||
|
@ -17,6 +17,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "\u{1}__gnu_mcount_nc".into(),
|
mcount: "\u{1}__gnu_mcount_nc".into(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target is for glibc Linux on ARMv7 without NEON or
|
// This target is for glibc Linux on ARMv7 without NEON or
|
||||||
// thumb-mode. See the thumbv7neon variant for enabling both.
|
// thumb-mode. See the thumbv7neon variant for enabling both.
|
||||||
|
@ -17,6 +17,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
// Info about features at https://wiki.debian.org/ArmHardFloatPort
|
// Info about features at https://wiki.debian.org/ArmHardFloatPort
|
||||||
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target is for musl Linux on ARMv7 without thumb-mode, NEON or
|
// This target is for musl Linux on ARMv7 without thumb-mode, NEON or
|
||||||
// hardfloat.
|
// hardfloat.
|
||||||
|
@ -7,10 +7,7 @@ pub(crate) fn target() -> Target {
|
||||||
// Most of these settings are copied from the armv7_unknown_linux_gnueabi
|
// Most of these settings are copied from the armv7_unknown_linux_gnueabi
|
||||||
// target.
|
// target.
|
||||||
Target {
|
Target {
|
||||||
// It's important we use "gnueabi" and not "musleabi" here. LLVM uses it
|
llvm_target: "armv7-unknown-linux-musleabi".into(),
|
||||||
// to determine the calling convention and float ABI, and it doesn't
|
|
||||||
// support the "musleabi" value.
|
|
||||||
llvm_target: "armv7-unknown-linux-gnueabi".into(),
|
|
||||||
metadata: crate::spec::TargetMetadata {
|
metadata: crate::spec::TargetMetadata {
|
||||||
description: Some("Armv7-A Linux with musl 1.2.3".into()),
|
description: Some("Armv7-A Linux with musl 1.2.3".into()),
|
||||||
tier: Some(2),
|
tier: Some(2),
|
||||||
|
@ -23,6 +20,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "\u{1}mcount".into(),
|
mcount: "\u{1}mcount".into(),
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target is for musl Linux on ARMv7 without thumb-mode or NEON.
|
// This target is for musl Linux on ARMv7 without thumb-mode or NEON.
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
// It's important we use "gnueabihf" and not "musleabihf" here. LLVM
|
llvm_target: "armv7-unknown-linux-musleabihf".into(),
|
||||||
// uses it to determine the calling convention and float ABI, and LLVM
|
|
||||||
// doesn't support the "musleabihf" value.
|
|
||||||
llvm_target: "armv7-unknown-linux-gnueabihf".into(),
|
|
||||||
metadata: crate::spec::TargetMetadata {
|
metadata: crate::spec::TargetMetadata {
|
||||||
description: Some("Armv7-A Linux with musl 1.2.3, hardfloat".into()),
|
description: Some("Armv7-A Linux with musl 1.2.3, hardfloat".into()),
|
||||||
tier: Some(2),
|
tier: Some(2),
|
||||||
|
@ -22,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
// target.
|
// target.
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "\u{1}mcount".into(),
|
mcount: "\u{1}mcount".into(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target is for OpenHarmony on ARMv7 Linux with thumb-mode, but no NEON or
|
// This target is for OpenHarmony on ARMv7 Linux with thumb-mode, but no NEON or
|
||||||
// hardfloat.
|
// hardfloat.
|
||||||
|
@ -20,6 +20,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "\u{1}mcount".into(),
|
mcount: "\u{1}mcount".into(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target is for uclibc Linux on ARMv7 without NEON,
|
// This target is for uclibc Linux on ARMv7 without NEON,
|
||||||
// thumb-mode or hardfloat.
|
// thumb-mode or hardfloat.
|
||||||
|
@ -18,11 +18,12 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||||
cpu: "generic".into(),
|
cpu: "generic".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "_mcount".into(),
|
mcount: "_mcount".into(),
|
||||||
abi: "eabi".into(),
|
|
||||||
..base
|
..base
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target is for uclibc Linux on ARMv7 without NEON or
|
// This target is for uclibc Linux on ARMv7 without NEON or
|
||||||
// thumb-mode. See the thumbv7neon variant for enabling both.
|
// thumb-mode. See the thumbv7neon variant for enabling both.
|
||||||
|
@ -24,6 +24,7 @@ pub(crate) fn target() -> Target {
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "_mcount".into(),
|
mcount: "_mcount".into(),
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
..base
|
..base
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "__mcount".into(),
|
mcount: "__mcount".into(),
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
use crate::spec::{LinkSelfContainedDefault, PanicStrategy, RelroLevel, Target, TargetOptions};
|
use crate::spec::{
|
||||||
|
FloatAbi, LinkSelfContainedDefault, PanicStrategy, RelroLevel, Target, TargetOptions,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -17,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
features: "+v7,+thumb2,+soft-float,-neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "\u{1}mcount".into(),
|
mcount: "\u{1}mcount".into(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -14,6 +14,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
// Info about features at https://wiki.debian.org/ArmHardFloatPort
|
// Info about features at https://wiki.debian.org/ArmHardFloatPort
|
||||||
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{RelocModel, Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, RelocModel, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
let base = base::solid::opts("asp3");
|
let base = base::solid::opts("asp3");
|
||||||
|
@ -15,6 +15,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
linker: Some("arm-kmc-eabi-gcc".into()),
|
linker: Some("arm-kmc-eabi-gcc".into()),
|
||||||
features: "+v7,+soft-float,+thumb2,-neon".into(),
|
features: "+v7,+soft-float,+thumb2,-neon".into(),
|
||||||
relocation_model: RelocModel::Static,
|
relocation_model: RelocModel::Static,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{RelocModel, Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, RelocModel, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
let base = base::solid::opts("asp3");
|
let base = base::solid::opts("asp3");
|
||||||
|
@ -15,6 +15,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
linker: Some("arm-kmc-eabi-gcc".into()),
|
linker: Some("arm-kmc-eabi-gcc".into()),
|
||||||
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
features: "+v7,+vfp3,-d32,+thumb2,-neon".into(),
|
||||||
relocation_model: RelocModel::Static,
|
relocation_model: RelocModel::Static,
|
||||||
|
|
|
@ -14,11 +14,14 @@
|
||||||
// - `relocation-model` set to `static`; also no PIE, no relro and no dynamic
|
// - `relocation-model` set to `static`; also no PIE, no relro and no dynamic
|
||||||
// linking. rationale: matches `thumb` targets
|
// linking. rationale: matches `thumb` targets
|
||||||
|
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
use crate::spec::{
|
||||||
|
Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
let opts = TargetOptions {
|
let opts = TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||||
linker: Some("rust-lld".into()),
|
linker: Some("rust-lld".into()),
|
||||||
features: "+v7,+thumb2,+soft-float,-neon,+strict-align".into(),
|
features: "+v7,+thumb2,+soft-float,-neon,+strict-align".into(),
|
||||||
|
|
|
@ -5,11 +5,14 @@
|
||||||
// changes (list in `armv7a_none_eabi.rs`) to bring it closer to the bare-metal
|
// changes (list in `armv7a_none_eabi.rs`) to bring it closer to the bare-metal
|
||||||
// `thumb` & `aarch64` targets.
|
// `thumb` & `aarch64` targets.
|
||||||
|
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
use crate::spec::{
|
||||||
|
Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
let opts = TargetOptions {
|
let opts = TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||||
linker: Some("rust-lld".into()),
|
linker: Some("rust-lld".into()),
|
||||||
features: "+v7,+vfp3,-d32,+thumb2,-neon,+strict-align".into(),
|
features: "+v7,+vfp3,-d32,+thumb2,-neon,+strict-align".into(),
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
// Targets the Little-endian Cortex-R4/R5 processor (ARMv7-R)
|
// Targets the Little-endian Cortex-R4/R5 processor (ARMv7-R)
|
||||||
|
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
use crate::spec::{
|
||||||
|
Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -17,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||||
linker: Some("rust-lld".into()),
|
linker: Some("rust-lld".into()),
|
||||||
relocation_model: RelocModel::Static,
|
relocation_model: RelocModel::Static,
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
// Targets the Little-endian Cortex-R4F/R5F processor (ARMv7-R)
|
// Targets the Little-endian Cortex-R4F/R5F processor (ARMv7-R)
|
||||||
|
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
use crate::spec::{
|
||||||
|
Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -17,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||||
linker: Some("rust-lld".into()),
|
linker: Some("rust-lld".into()),
|
||||||
relocation_model: RelocModel::Static,
|
relocation_model: RelocModel::Static,
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
// Targets the Little-endian Cortex-R52 processor (ARMv8-R)
|
// Targets the Little-endian Cortex-R52 processor (ARMv8-R)
|
||||||
|
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
use crate::spec::{
|
||||||
|
Cc, FloatAbi, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -17,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||||
linker: Some("rust-lld".into()),
|
linker: Some("rust-lld".into()),
|
||||||
relocation_model: RelocModel::Static,
|
relocation_model: RelocModel::Static,
|
||||||
|
|
|
@ -9,7 +9,9 @@
|
||||||
//! The default link script is very likely wrong, so you should use
|
//! 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.
|
//! `-Clink-arg=-Tmy_script.ld` to override that with a correct linker script.
|
||||||
|
|
||||||
use crate::spec::{FramePointer, PanicStrategy, RelocModel, Target, TargetOptions, base, cvs};
|
use crate::spec::{
|
||||||
|
FloatAbi, FramePointer, PanicStrategy, RelocModel, Target, TargetOptions, base, cvs,
|
||||||
|
};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -34,6 +36,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(),
|
data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
|
|
||||||
// extra args passed to the external assembler (assuming `arm-none-eabi-as`):
|
// extra args passed to the external assembler (assuming `arm-none-eabi-as`):
|
||||||
// * activate t32/a32 interworking
|
// * activate t32/a32 interworking
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//! Targets the ARMv5TE, with code as `t32` code by default.
|
//! Targets the ARMv5TE, with code as `t32` code by default.
|
||||||
|
|
||||||
use crate::spec::{FramePointer, Target, TargetOptions, base, cvs};
|
use crate::spec::{FloatAbi, FramePointer, Target, TargetOptions, base, cvs};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -26,6 +26,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
// extra args passed to the external assembler (assuming `arm-none-eabi-as`):
|
// extra args passed to the external assembler (assuming `arm-none-eabi-as`):
|
||||||
// * activate t32/a32 interworking
|
// * activate t32/a32 interworking
|
||||||
// * use arch ARMv5TE
|
// * use arch ARMv5TE
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Targets the Cortex-M0, Cortex-M0+ and Cortex-M1 processors (ARMv6-M architecture)
|
// Targets the Cortex-M0, Cortex-M0+ and Cortex-M1 processors (ARMv6-M architecture)
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -17,6 +17,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
// The ARMv6-M architecture doesn't support unaligned loads/stores so we disable them
|
// The ARMv6-M architecture doesn't support unaligned loads/stores so we disable them
|
||||||
// with +strict-align.
|
// with +strict-align.
|
||||||
// Also force-enable 32-bit atomics, which allows the use of atomic load/store only.
|
// Also force-enable 32-bit atomics, which allows the use of atomic load/store only.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Targets the Cortex-M0, Cortex-M0+ and Cortex-M1 processors (ARMv6-M architecture)
|
// Targets the Cortex-M0, Cortex-M0+ and Cortex-M1 processors (ARMv6-M architecture)
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base, cvs};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base, cvs};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -19,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
families: cvs!["unix"],
|
families: cvs!["unix"],
|
||||||
os: "nuttx".into(),
|
os: "nuttx".into(),
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
// The ARMv6-M architecture doesn't support unaligned loads/stores so we disable them
|
// The ARMv6-M architecture doesn't support unaligned loads/stores so we disable them
|
||||||
// with +strict-align.
|
// with +strict-align.
|
||||||
// Also force-enable 32-bit atomics, which allows the use of atomic load/store only.
|
// Also force-enable 32-bit atomics, which allows the use of atomic load/store only.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{LinkerFlavor, Lld, PanicStrategy, Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, LinkerFlavor, Lld, PanicStrategy, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
let mut base = base::windows_msvc::opts();
|
let mut base = base::windows_msvc::opts();
|
||||||
|
@ -23,6 +23,7 @@ pub(crate) fn target() -> Target {
|
||||||
data_layout: "e-m:w-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
data_layout: "e-m:w-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
features: "+vfp3,+neon".into(),
|
features: "+vfp3,+neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
// FIXME(jordanrh): use PanicStrategy::Unwind when SEH is
|
// FIXME(jordanrh): use PanicStrategy::Unwind when SEH is
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{PanicStrategy, Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, PanicStrategy, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -13,6 +13,7 @@ pub(crate) fn target() -> Target {
|
||||||
data_layout: "e-m:w-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
data_layout: "e-m:w-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
features: "+vfp3,+neon".into(),
|
features: "+vfp3,+neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
// FIXME(jordanrh): use PanicStrategy::Unwind when SEH is
|
// FIXME(jordanrh): use PanicStrategy::Unwind when SEH is
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
// To opt-in to hardware accelerated floating point operations, you can use, for example,
|
// To opt-in to hardware accelerated floating point operations, you can use, for example,
|
||||||
// `-C target-feature=+vfp4` or `-C target-cpu=cortex-m4`.
|
// `-C target-feature=+vfp4` or `-C target-cpu=cortex-m4`.
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -26,6 +26,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
max_atomic_width: Some(32),
|
max_atomic_width: Some(32),
|
||||||
..base::thumb::opts()
|
..base::thumb::opts()
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
//
|
//
|
||||||
// To opt into double precision hardware support, use the `-C target-feature=+fp64` flag.
|
// To opt into double precision hardware support, use the `-C target-feature=+fp64` flag.
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -25,6 +25,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
// vfp4 is the lowest common denominator between the Cortex-M4F (vfp4) and the
|
// vfp4 is the lowest common denominator between the Cortex-M4F (vfp4) and the
|
||||||
// Cortex-M7 (vfp5).
|
// Cortex-M7 (vfp5).
|
||||||
// Both the Cortex-M4 and the Cortex-M7 only have 16 double-precision registers
|
// Both the Cortex-M4 and the Cortex-M7 only have 16 double-precision registers
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
// To opt-in to hardware accelerated floating point operations, you can use, for example,
|
// To opt-in to hardware accelerated floating point operations, you can use, for example,
|
||||||
// `-C target-feature=+vfp4` or `-C target-cpu=cortex-m4`.
|
// `-C target-feature=+vfp4` or `-C target-cpu=cortex-m4`.
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base, cvs};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base, cvs};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -28,6 +28,7 @@ pub(crate) fn target() -> Target {
|
||||||
families: cvs!["unix"],
|
families: cvs!["unix"],
|
||||||
os: "nuttx".into(),
|
os: "nuttx".into(),
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
max_atomic_width: Some(32),
|
max_atomic_width: Some(32),
|
||||||
..base::thumb::opts()
|
..base::thumb::opts()
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
//
|
//
|
||||||
// To opt into double precision hardware support, use the `-C target-feature=+fp64` flag.
|
// To opt into double precision hardware support, use the `-C target-feature=+fp64` flag.
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base, cvs};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base, cvs};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -27,6 +27,7 @@ pub(crate) fn target() -> Target {
|
||||||
families: cvs!["unix"],
|
families: cvs!["unix"],
|
||||||
os: "nuttx".into(),
|
os: "nuttx".into(),
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
// vfp4 is the lowest common denominator between the Cortex-M4F (vfp4) and the
|
// vfp4 is the lowest common denominator between the Cortex-M4F (vfp4) and the
|
||||||
// Cortex-M7 (vfp5).
|
// Cortex-M7 (vfp5).
|
||||||
// Both the Cortex-M4 and the Cortex-M7 only have 16 double-precision registers
|
// Both the Cortex-M4 and the Cortex-M7 only have 16 double-precision registers
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Targets the Cortex-M3 processor (ARMv7-M)
|
// Targets the Cortex-M3 processor (ARMv7-M)
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -17,6 +17,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
max_atomic_width: Some(32),
|
max_atomic_width: Some(32),
|
||||||
..base::thumb::opts()
|
..base::thumb::opts()
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Targets the Cortex-M3 processor (ARMv7-M)
|
// Targets the Cortex-M3 processor (ARMv7-M)
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base, cvs};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base, cvs};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -19,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
families: cvs!["unix"],
|
families: cvs!["unix"],
|
||||||
os: "nuttx".into(),
|
os: "nuttx".into(),
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
max_atomic_width: Some(32),
|
max_atomic_width: Some(32),
|
||||||
..base::thumb::opts()
|
..base::thumb::opts()
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Cc, LinkerFlavor, Lld, Target, TargetOptions, base};
|
use crate::spec::{Cc, FloatAbi, LinkerFlavor, Lld, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target if is for the Android v7a ABI in thumb mode with
|
// This target if is for the Android v7a ABI in thumb mode with
|
||||||
// NEON unconditionally enabled and, therefore, with 32 FPU registers
|
// NEON unconditionally enabled and, therefore, with 32 FPU registers
|
||||||
|
@ -24,6 +24,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
features: "+v7,+thumb-mode,+thumb2,+vfp3,+neon".into(),
|
features: "+v7,+thumb-mode,+thumb2,+vfp3,+neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
..base
|
..base
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target is for glibc Linux on ARMv7 with thumb mode enabled
|
// This target is for glibc Linux on ARMv7 with thumb mode enabled
|
||||||
// (for consistency with Android and Debian-based distributions)
|
// (for consistency with Android and Debian-based distributions)
|
||||||
|
@ -22,6 +22,7 @@ pub(crate) fn target() -> Target {
|
||||||
arch: "arm".into(),
|
arch: "arm".into(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
// Info about features at https://wiki.debian.org/ArmHardFloatPort
|
// Info about features at https://wiki.debian.org/ArmHardFloatPort
|
||||||
features: "+v7,+thumb-mode,+thumb2,+vfp3,+neon".into(),
|
features: "+v7,+thumb-mode,+thumb2,+vfp3,+neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
// This target is for musl Linux on ARMv7 with thumb mode enabled
|
// This target is for musl Linux on ARMv7 with thumb mode enabled
|
||||||
// (for consistency with Android and Debian-based distributions)
|
// (for consistency with Android and Debian-based distributions)
|
||||||
|
@ -8,10 +8,7 @@ use crate::spec::{Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
// It's important we use "gnueabihf" and not "musleabihf" here. LLVM
|
llvm_target: "armv7-unknown-linux-musleabihf".into(),
|
||||||
// uses it to determine the calling convention and float ABI, and LLVM
|
|
||||||
// doesn't support the "musleabihf" value.
|
|
||||||
llvm_target: "armv7-unknown-linux-gnueabihf".into(),
|
|
||||||
metadata: crate::spec::TargetMetadata {
|
metadata: crate::spec::TargetMetadata {
|
||||||
description: Some("Thumb2-mode ARMv7-A Linux with NEON, musl 1.2.3".into()),
|
description: Some("Thumb2-mode ARMv7-A Linux with NEON, musl 1.2.3".into()),
|
||||||
tier: Some(3),
|
tier: Some(3),
|
||||||
|
@ -26,6 +23,7 @@ pub(crate) fn target() -> Target {
|
||||||
// target.
|
// target.
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
features: "+v7,+thumb-mode,+thumb2,+vfp3,+neon".into(),
|
features: "+v7,+thumb-mode,+thumb2,+vfp3,+neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
mcount: "\u{1}mcount".into(),
|
mcount: "\u{1}mcount".into(),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Targets the Cortex-M23 processor (Baseline ARMv8-M)
|
// Targets the Cortex-M23 processor (Baseline ARMv8-M)
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -17,6 +17,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
// ARMv8-M baseline doesn't support unaligned loads/stores so we disable them
|
// ARMv8-M baseline doesn't support unaligned loads/stores so we disable them
|
||||||
// with +strict-align.
|
// with +strict-align.
|
||||||
features: "+strict-align".into(),
|
features: "+strict-align".into(),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Targets the Cortex-M23 processor (Baseline ARMv8-M)
|
// Targets the Cortex-M23 processor (Baseline ARMv8-M)
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base, cvs};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base, cvs};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -19,6 +19,7 @@ pub(crate) fn target() -> Target {
|
||||||
families: cvs!["unix"],
|
families: cvs!["unix"],
|
||||||
os: "nuttx".into(),
|
os: "nuttx".into(),
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
// ARMv8-M baseline doesn't support unaligned loads/stores so we disable them
|
// ARMv8-M baseline doesn't support unaligned loads/stores so we disable them
|
||||||
// with +strict-align.
|
// with +strict-align.
|
||||||
features: "+strict-align".into(),
|
features: "+strict-align".into(),
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// Targets the Cortex-M33 processor (Armv8-M Mainline architecture profile),
|
// Targets the Cortex-M33 processor (Armv8-M Mainline architecture profile),
|
||||||
// without the Floating Point extension.
|
// without the Floating Point extension.
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -18,6 +18,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
max_atomic_width: Some(32),
|
max_atomic_width: Some(32),
|
||||||
..base::thumb::opts()
|
..base::thumb::opts()
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// Targets the Cortex-M33 processor (Armv8-M Mainline architecture profile),
|
// Targets the Cortex-M33 processor (Armv8-M Mainline architecture profile),
|
||||||
// with the Floating Point extension.
|
// with the Floating Point extension.
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -18,6 +18,7 @@ pub(crate) fn target() -> Target {
|
||||||
|
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
// If the Floating Point extension is implemented in the Cortex-M33
|
// If the Floating Point extension is implemented in the Cortex-M33
|
||||||
// processor, the Cortex-M33 Technical Reference Manual states that
|
// processor, the Cortex-M33 Technical Reference Manual states that
|
||||||
// the FPU uses the FPv5 architecture, single-precision instructions
|
// the FPU uses the FPv5 architecture, single-precision instructions
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// Targets the Cortex-M33 processor (Armv8-M Mainline architecture profile),
|
// Targets the Cortex-M33 processor (Armv8-M Mainline architecture profile),
|
||||||
// without the Floating Point extension.
|
// without the Floating Point extension.
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base, cvs};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base, cvs};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -20,6 +20,7 @@ pub(crate) fn target() -> Target {
|
||||||
families: cvs!["unix"],
|
families: cvs!["unix"],
|
||||||
os: "nuttx".into(),
|
os: "nuttx".into(),
|
||||||
abi: "eabi".into(),
|
abi: "eabi".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Soft),
|
||||||
max_atomic_width: Some(32),
|
max_atomic_width: Some(32),
|
||||||
..base::thumb::opts()
|
..base::thumb::opts()
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// Targets the Cortex-M33 processor (Armv8-M Mainline architecture profile),
|
// Targets the Cortex-M33 processor (Armv8-M Mainline architecture profile),
|
||||||
// with the Floating Point extension.
|
// with the Floating Point extension.
|
||||||
|
|
||||||
use crate::spec::{Target, TargetOptions, base, cvs};
|
use crate::spec::{FloatAbi, Target, TargetOptions, base, cvs};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
Target {
|
Target {
|
||||||
|
@ -20,6 +20,7 @@ pub(crate) fn target() -> Target {
|
||||||
families: cvs!["unix"],
|
families: cvs!["unix"],
|
||||||
os: "nuttx".into(),
|
os: "nuttx".into(),
|
||||||
abi: "eabihf".into(),
|
abi: "eabihf".into(),
|
||||||
|
llvm_floatabi: Some(FloatAbi::Hard),
|
||||||
// If the Floating Point extension is implemented in the Cortex-M33
|
// If the Floating Point extension is implemented in the Cortex-M33
|
||||||
// processor, the Cortex-M33 Technical Reference Manual states that
|
// processor, the Cortex-M33 Technical Reference Manual states that
|
||||||
// the FPU uses the FPv5 architecture, single-precision instructions
|
// the FPU uses the FPv5 architecture, single-precision instructions
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue