Author: renodr Date: Mon Dec 30 08:09:09 2019 New Revision: 4045 Log: Add rustc patch
Added: trunk/rustc/ trunk/rustc/rustc-1.37.0-llvm9_fixes-1.patch Added: trunk/rustc/rustc-1.37.0-llvm9_fixes-1.patch ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/rustc/rustc-1.37.0-llvm9_fixes-1.patch Mon Dec 30 08:09:09 2019 (r4045) @@ -0,0 +1,911 @@ +Submitted By: Douglas R. Reno <renodr at linuxfromscratch dot org> +Date: 2019-12-30 +Initial Package Version: 1.37.0 +Upstream Status: Applied +Origin: Upstream + Self +Description: Fixes rustc to build and run correctly with LLVM-9.0.1. + +diff -Naurp rustc-1.37.0-src.orig/src/librustc_codegen_llvm/abi.rs rustc-1.37.0-src/src/librustc_codegen_llvm/abi.rs +--- rustc-1.37.0-src.orig/src/librustc_codegen_llvm/abi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_codegen_llvm/abi.rs 2019-12-28 16:00:28.268466077 -0600 +@@ -34,17 +34,17 @@ trait ArgAttributeExt { + impl ArgAttributeExt for ArgAttribute { + fn for_each_kind<F>(&self, mut f: F) where F: FnMut(llvm::Attribute) { + for_each_kind!(self, f, +- ByVal, NoAlias, NoCapture, NonNull, ReadOnly, SExt, StructRet, ZExt, InReg) ++ NoAlias, NoCapture, NonNull, ReadOnly, SExt, StructRet, ZExt, InReg) + } + } + + pub trait ArgAttributesExt { +- fn apply_llfn(&self, idx: AttributePlace, llfn: &Value); +- fn apply_callsite(&self, idx: AttributePlace, callsite: &Value); ++ fn apply_llfn(&self, idx: AttributePlace, llfn: &Value, ty: Option<&Type>); ++ fn apply_callsite(&self, idx: AttributePlace, callsite: &Value, ty: Option<&Type>); + } + + impl ArgAttributesExt for ArgAttributes { +- fn apply_llfn(&self, idx: AttributePlace, llfn: &Value) { ++ fn apply_llfn(&self, idx: AttributePlace, llfn: &Value, ty: Option<&Type>) { + let mut regular = self.regular; + unsafe { + let deref = self.pointee_size.bytes(); +@@ -65,11 +65,14 @@ impl ArgAttributesExt for ArgAttributes + idx.as_uint(), + align.bytes() as u32); + } ++ if regular.contains(ArgAttribute::ByVal) { ++ llvm::LLVMRustAddByValAttr(llfn, idx.as_uint(), ty.unwrap()); ++ } + regular.for_each_kind(|attr| attr.apply_llfn(idx, llfn)); + } + } + +- fn apply_callsite(&self, idx: AttributePlace, callsite: &Value) { ++ fn apply_callsite(&self, idx: AttributePlace, callsite: &Value, ty: Option<&Type>) { + let mut regular = self.regular; + unsafe { + let deref = self.pointee_size.bytes(); +@@ -90,6 +93,9 @@ impl ArgAttributesExt for ArgAttributes + idx.as_uint(), + align.bytes() as u32); + } ++ if regular.contains(ArgAttribute::ByVal) { ++ llvm::LLVMRustAddByValCallSiteAttr(callsite, idx.as_uint(), ty.unwrap()); ++ } + regular.for_each_kind(|attr| attr.apply_callsite(idx, callsite)); + } + } +@@ -298,7 +304,7 @@ pub trait FnTypeLlvmExt<'tcx> { + fn llvm_type(&self, cx: &CodegenCx<'ll, 'tcx>) -> &'ll Type; + fn ptr_to_llvm_type(&self, cx: &CodegenCx<'ll, 'tcx>) -> &'ll Type; + fn llvm_cconv(&self) -> llvm::CallConv; +- fn apply_attrs_llfn(&self, llfn: &'ll Value); ++ fn apply_attrs_llfn(&self, cx: &CodegenCx<'ll, 'tcx>, llfn: &'ll Value); + fn apply_attrs_callsite(&self, bx: &mut Builder<'a, 'll, 'tcx>, callsite: &'ll Value); + } + +@@ -384,51 +390,51 @@ impl<'tcx> FnTypeLlvmExt<'tcx> for FnTyp + } + } + +- fn apply_attrs_llfn(&self, llfn: &'ll Value) { ++ fn apply_attrs_llfn(&self, cx: &CodegenCx<'ll, 'tcx>, llfn: &'ll Value) { + let mut i = 0; +- let mut apply = |attrs: &ArgAttributes| { +- attrs.apply_llfn(llvm::AttributePlace::Argument(i), llfn); ++ let mut apply = |attrs: &ArgAttributes, ty: Option<&Type>| { ++ attrs.apply_llfn(llvm::AttributePlace::Argument(i), llfn, ty); + i += 1; + }; + match self.ret.mode { + PassMode::Direct(ref attrs) => { +- attrs.apply_llfn(llvm::AttributePlace::ReturnValue, llfn); ++ attrs.apply_llfn(llvm::AttributePlace::ReturnValue, llfn, None); + } +- PassMode::Indirect(ref attrs, _) => apply(attrs), ++ PassMode::Indirect(ref attrs, _) => apply(attrs, Some(self.ret.layout.llvm_type(cx))), + _ => {} + } + for arg in &self.args { + if arg.pad.is_some() { +- apply(&ArgAttributes::new()); ++ apply(&ArgAttributes::new(), None); + } + match arg.mode { + PassMode::Ignore(_) => {} + PassMode::Direct(ref attrs) | +- PassMode::Indirect(ref attrs, None) => apply(attrs), ++ PassMode::Indirect(ref attrs, None) => apply(attrs, Some(arg.layout.llvm_type(cx))), + PassMode::Indirect(ref attrs, Some(ref extra_attrs)) => { +- apply(attrs); +- apply(extra_attrs); ++ apply(attrs, None); ++ apply(extra_attrs, None); + } + PassMode::Pair(ref a, ref b) => { +- apply(a); +- apply(b); ++ apply(a, None); ++ apply(b, None); + } +- PassMode::Cast(_) => apply(&ArgAttributes::new()), ++ PassMode::Cast(_) => apply(&ArgAttributes::new(), None), + } + } + } + + fn apply_attrs_callsite(&self, bx: &mut Builder<'a, 'll, 'tcx>, callsite: &'ll Value) { + let mut i = 0; +- let mut apply = |attrs: &ArgAttributes| { +- attrs.apply_callsite(llvm::AttributePlace::Argument(i), callsite); ++ let mut apply = |attrs: &ArgAttributes, ty: Option<&Type>| { ++ attrs.apply_callsite(llvm::AttributePlace::Argument(i), callsite, ty); + i += 1; + }; + match self.ret.mode { + PassMode::Direct(ref attrs) => { +- attrs.apply_callsite(llvm::AttributePlace::ReturnValue, callsite); ++ attrs.apply_callsite(llvm::AttributePlace::ReturnValue, callsite, None); + } +- PassMode::Indirect(ref attrs, _) => apply(attrs), ++ PassMode::Indirect(ref attrs, _) => apply(attrs, Some(self.ret.layout.llvm_type(bx))), + _ => {} + } + if let layout::Abi::Scalar(ref scalar) = self.ret.layout.abi { +@@ -446,21 +452,21 @@ impl<'tcx> FnTypeLlvmExt<'tcx> for FnTyp + } + for arg in &self.args { + if arg.pad.is_some() { +- apply(&ArgAttributes::new()); ++ apply(&ArgAttributes::new(), None); + } + match arg.mode { + PassMode::Ignore(_) => {} + PassMode::Direct(ref attrs) | +- PassMode::Indirect(ref attrs, None) => apply(attrs), ++ PassMode::Indirect(ref attrs, None) => apply(attrs, Some(arg.layout.llvm_type(bx))), + PassMode::Indirect(ref attrs, Some(ref extra_attrs)) => { +- apply(attrs); +- apply(extra_attrs); ++ apply(attrs, None); ++ apply(extra_attrs, None); + } + PassMode::Pair(ref a, ref b) => { +- apply(a); +- apply(b); ++ apply(a, None); ++ apply(b, None); + } +- PassMode::Cast(_) => apply(&ArgAttributes::new()), ++ PassMode::Cast(_) => apply(&ArgAttributes::new(), None), + } + } + +diff -Naurp rustc-1.37.0-src.orig/src/librustc_codegen_llvm/attributes.rs rustc-1.37.0-src/src/librustc_codegen_llvm/attributes.rs +--- rustc-1.37.0-src.orig/src/librustc_codegen_llvm/attributes.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_codegen_llvm/attributes.rs 2019-12-28 15:51:57.992559192 -0600 +@@ -119,6 +119,29 @@ pub fn set_probestack(cx: &CodegenCx<'ll + const_cstr!("probe-stack"), const_cstr!("__rust_probestack")); + } + ++fn translate_obsolete_target_features(feature: &str) -> &str { ++ const LLVM9_FEATURE_CHANGES: &[(&str, &str)] = &[ ++ ("+fp-only-sp", "-fp64"), ++ ("-fp-only-sp", "+fp64"), ++ ("+d16", "-d32"), ++ ("-d16", "+d32"), ++ ]; ++ if llvm_util::get_major_version() >= 9 { ++ for &(old, new) in LLVM9_FEATURE_CHANGES { ++ if feature == old { ++ return new; ++ } ++ } ++ } else { ++ for &(old, new) in LLVM9_FEATURE_CHANGES { ++ if feature == new { ++ return old; ++ } ++ } ++ } ++ feature ++} ++ + pub fn llvm_target_features(sess: &Session) -> impl Iterator<Item = &str> { + const RUSTC_SPECIFIC_FEATURES: &[&str] = &[ + "crt-static", +@@ -129,6 +152,7 @@ pub fn llvm_target_features(sess: &Sessi + sess.target.target.options.features.split(',') + .chain(cmdline) + .filter(|l| !l.is_empty()) ++ .map(translate_obsolete_target_features) + } + + pub fn apply_target_cpu_attr(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) { +diff -Naurp rustc-1.37.0-src.orig/src/librustc_codegen_llvm/common.rs rustc-1.37.0-src/src/librustc_codegen_llvm/common.rs +--- rustc-1.37.0-src.orig/src/librustc_codegen_llvm/common.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_codegen_llvm/common.rs 2019-12-28 11:32:33.881902945 -0600 +@@ -249,6 +249,10 @@ impl ConstMethods<'tcx> for CodegenCx<'l + self.const_uint(self.type_i8(), i as u64) + } + ++ fn const_real(&self, t: &'ll Type, val: f64) -> &'ll Value { ++ unsafe { llvm::LLVMConstReal(t, val) } ++ } ++ + fn const_struct( + &self, + elts: &[&'ll Value], +diff -Naurp rustc-1.37.0-src.orig/src/librustc_codegen_llvm/context.rs rustc-1.37.0-src/src/librustc_codegen_llvm/context.rs +--- rustc-1.37.0-src.orig/src/librustc_codegen_llvm/context.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_codegen_llvm/context.rs 2019-12-28 16:08:15.590628080 -0600 +@@ -1,5 +1,6 @@ + use crate::attributes; + use crate::llvm; ++use crate::llvm_util; + use crate::debuginfo; + use crate::value::Value; + use rustc::dep_graph::DepGraphSafe; +@@ -140,6 +141,11 @@ pub fn is_pie_binary(sess: &Session) -> + !is_any_library(sess) && get_reloc_model(sess) == llvm::RelocMode::PIC + } + ++fn strip_function_ptr_alignment(data_layout: String) -> String { ++ // FIXME: Make this more general. ++ data_layout.replace("-Fi8-", "-") ++} ++ + pub unsafe fn create_module( + tcx: TyCtxt<'_>, + llcx: &'ll llvm::Context, +@@ -149,14 +155,19 @@ pub unsafe fn create_module( + let mod_name = SmallCStr::new(mod_name); + let llmod = llvm::LLVMModuleCreateWithNameInContext(mod_name.as_ptr(), llcx); + ++ let mut target_data_layout = sess.target.target.data_layout.clone(); ++ if llvm_util::get_major_version() < 9 { ++ target_data_layout = strip_function_ptr_alignment(target_data_layout); ++ } ++ + // Ensure the data-layout values hardcoded remain the defaults. + if sess.target.target.options.is_builtin { + let tm = crate::back::write::create_informational_target_machine(&tcx.sess, false); + llvm::LLVMRustSetDataLayoutFromTargetMachine(llmod, tm); + llvm::LLVMRustDisposeTargetMachine(tm); + +- let data_layout = llvm::LLVMGetDataLayout(llmod); +- let data_layout = str::from_utf8(CStr::from_ptr(data_layout).to_bytes()) ++ let llvm_data_layout = llvm::LLVMGetDataLayout(llmod); ++ let llvm_data_layout = str::from_utf8(CStr::from_ptr(llvm_data_layout).to_bytes()) + .ok().expect("got a non-UTF8 data-layout from LLVM"); + + // Unfortunately LLVM target specs change over time, and right now we +@@ -177,16 +188,16 @@ pub unsafe fn create_module( + let cfg_llvm_root = option_env!("CFG_LLVM_ROOT").unwrap_or(""); + let custom_llvm_used = cfg_llvm_root.trim() != ""; + +- if !custom_llvm_used && sess.target.target.data_layout != data_layout { ++ if !custom_llvm_used && target_data_layout != llvm_data_layout { + bug!("data-layout for builtin `{}` target, `{}`, \ + differs from LLVM default, `{}`", + sess.target.target.llvm_target, +- sess.target.target.data_layout, +- data_layout); ++ target_data_layout, ++ llvm_data_layout); + } + } + +- let data_layout = SmallCStr::new(&sess.target.target.data_layout); ++ let data_layout = SmallCStr::new(&target_data_layout); + llvm::LLVMSetDataLayout(llmod, data_layout.as_ptr()); + + let llvm_target = SmallCStr::new(&sess.target.target.llvm_target); +diff -Naurp rustc-1.37.0-src.orig/src/librustc_codegen_llvm/declare.rs rustc-1.37.0-src/src/librustc_codegen_llvm/declare.rs +--- rustc-1.37.0-src.orig/src/librustc_codegen_llvm/declare.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_codegen_llvm/declare.rs 2019-12-27 17:45:22.685818771 -0600 +@@ -107,7 +107,7 @@ impl DeclareMethods<'tcx> for CodegenCx< + llvm::Attribute::NoReturn.apply_llfn(Function, llfn); + } + +- fty.apply_attrs_llfn(llfn); ++ fty.apply_attrs_llfn(self, llfn); + + llfn + } +diff -Naurp rustc-1.37.0-src.orig/src/librustc_codegen_llvm/intrinsic.rs rustc-1.37.0-src/src/librustc_codegen_llvm/intrinsic.rs +--- rustc-1.37.0-src.orig/src/librustc_codegen_llvm/intrinsic.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_codegen_llvm/intrinsic.rs 2019-12-28 11:33:58.785281137 -0600 +@@ -1663,9 +1663,10 @@ fn generic_simd_intrinsic( + acc + } else { + // unordered arithmetic reductions do not: ++ let identity_acc = if $name.contains("mul") { 1.0 } else { 0.0 }; + match f.bit_width() { +- 32 => bx.const_undef(bx.type_f32()), +- 64 => bx.const_undef(bx.type_f64()), ++ 32 => bx.const_real(bx.type_f32(), identity_acc), ++ 64 => bx.const_real(bx.type_f64(), identity_acc), + v => { + return_error!(r#" + unsupported {} from `{}` with element `{}` of size `{}` to `{}`"#, +diff -Naurp rustc-1.37.0-src.orig/src/librustc_codegen_llvm/llvm/ffi.rs rustc-1.37.0-src/src/librustc_codegen_llvm/llvm/ffi.rs +--- rustc-1.37.0-src.orig/src/librustc_codegen_llvm/llvm/ffi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_codegen_llvm/llvm/ffi.rs 2019-12-28 11:34:51.608526137 -0600 +@@ -715,6 +715,7 @@ extern "C" { + // Operations on scalar constants + pub fn LLVMConstInt(IntTy: &Type, N: c_ulonglong, SignExtend: Bool) -> &Value; + pub fn LLVMConstIntOfArbitraryPrecision(IntTy: &Type, Wn: c_uint, Ws: *const u64) -> &Value; ++ pub fn LLVMConstReal(RealTy: &Type, N: f64) -> &Value; + pub fn LLVMConstIntGetZExtValue(ConstantVal: &Value) -> c_ulonglong; + pub fn LLVMRustConstInt128Get(ConstantVal: &Value, SExt: bool, + high: &mut u64, low: &mut u64) -> bool; +@@ -794,6 +795,7 @@ extern "C" { + pub fn LLVMRustAddAlignmentAttr(Fn: &Value, index: c_uint, bytes: u32); + pub fn LLVMRustAddDereferenceableAttr(Fn: &Value, index: c_uint, bytes: u64); + pub fn LLVMRustAddDereferenceableOrNullAttr(Fn: &Value, index: c_uint, bytes: u64); ++ pub fn LLVMRustAddByValAttr(Fn: &Value, index: c_uint, ty: &Type); + pub fn LLVMRustAddFunctionAttribute(Fn: &Value, index: c_uint, attr: Attribute); + pub fn LLVMRustAddFunctionAttrStringValue(Fn: &Value, + index: c_uint, +@@ -824,6 +826,7 @@ extern "C" { + pub fn LLVMRustAddDereferenceableOrNullCallSiteAttr(Instr: &Value, + index: c_uint, + bytes: u64); ++ pub fn LLVMRustAddByValCallSiteAttr(Instr: &Value, index: c_uint, ty: &Type); + + // Operations on load/store instructions (only) + pub fn LLVMSetVolatile(MemoryAccessInst: &Value, volatile: Bool); +diff -Naurp rustc-1.37.0-src.orig/src/librustc_codegen_ssa/traits/consts.rs rustc-1.37.0-src/src/librustc_codegen_ssa/traits/consts.rs +--- rustc-1.37.0-src.orig/src/librustc_codegen_ssa/traits/consts.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_codegen_ssa/traits/consts.rs 2019-12-28 11:35:35.503734751 -0600 +@@ -17,6 +17,7 @@ pub trait ConstMethods<'tcx>: BackendTyp + fn const_u64(&self, i: u64) -> Self::Value; + fn const_usize(&self, i: u64) -> Self::Value; + fn const_u8(&self, i: u8) -> Self::Value; ++ fn const_real(&self, t: Self::Type, val: f64) -> Self::Value; + + fn const_struct(&self, elts: &[Self::Value], packed: bool) -> Self::Value; + +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armebv7r_none_eabihf.rs rustc-1.37.0-src/src/librustc_target/spec/armebv7r_none_eabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armebv7r_none_eabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armebv7r_none_eabihf.rs 2019-12-27 18:23:34.564554281 -0600 +@@ -9,7 +9,7 @@ pub fn target() -> TargetResult { + target_endian: "big".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "E-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "E-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: String::new(), +@@ -21,7 +21,7 @@ pub fn target() -> TargetResult { + linker: Some("rust-lld".to_owned()), + relocation_model: "static".to_string(), + panic_strategy: PanicStrategy::Abort, +- features: "+vfp3,+d16,+fp-only-sp".to_string(), ++ features: "+vfp3,-d32,-fp16".to_string(), + max_atomic_width: Some(32), + abi_blacklist: super::arm_base::abi_blacklist(), + emit_debug_gdb_scripts: false, +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armebv7r_none_eabi.rs rustc-1.37.0-src/src/librustc_target/spec/armebv7r_none_eabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armebv7r_none_eabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armebv7r_none_eabi.rs 2019-12-27 18:22:31.007176457 -0600 +@@ -9,7 +9,7 @@ pub fn target() -> TargetResult { + target_endian: "big".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "E-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "E-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: "".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/arm_linux_androideabi.rs rustc-1.37.0-src/src/librustc_target/spec/arm_linux_androideabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/arm_linux_androideabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/arm_linux_androideabi.rs 2019-12-27 18:13:15.094825407 -0600 +@@ -11,7 +11,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "android".to_string(), + target_env: String::new(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs rustc-1.37.0-src/src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs 2019-12-27 18:17:38.152423998 -0600 +@@ -8,7 +8,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "linux".to_string(), + target_env: "gnu".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/arm_unknown_linux_gnueabi.rs rustc-1.37.0-src/src/librustc_target/spec/arm_unknown_linux_gnueabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/arm_unknown_linux_gnueabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/arm_unknown_linux_gnueabi.rs 2019-12-27 18:16:48.073121866 -0600 +@@ -8,7 +8,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "linux".to_string(), + target_env: "gnu".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/arm_unknown_linux_musleabihf.rs rustc-1.37.0-src/src/librustc_target/spec/arm_unknown_linux_musleabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/arm_unknown_linux_musleabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/arm_unknown_linux_musleabihf.rs 2019-12-27 18:20:52.617590015 -0600 +@@ -15,7 +15,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "linux".to_string(), + target_env: "musl".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/arm_unknown_linux_musleabi.rs rustc-1.37.0-src/src/librustc_target/spec/arm_unknown_linux_musleabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/arm_unknown_linux_musleabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/arm_unknown_linux_musleabi.rs 2019-12-27 18:18:38.341786028 -0600 +@@ -15,7 +15,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "linux".to_string(), + target_env: "musl".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs rustc-1.37.0-src/src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs 2019-12-27 18:24:36.099919453 -0600 +@@ -7,7 +7,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "linux".to_string(), + target_env: "gnu".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs rustc-1.37.0-src/src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs 2019-12-27 18:25:24.545206546 -0600 +@@ -7,7 +7,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32:S64".to_string(), + arch: "arm".to_string(), + target_os: "linux".to_string(), + target_env: "gnu".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs rustc-1.37.0-src/src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs 2019-12-27 18:26:33.663615607 -0600 +@@ -10,7 +10,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "linux".to_string(), + target_env: "musl".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv6_unknown_freebsd.rs rustc-1.37.0-src/src/librustc_target/spec/armv6_unknown_freebsd.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv6_unknown_freebsd.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv6_unknown_freebsd.rs 2019-12-27 18:29:17.706824516 -0600 +@@ -7,7 +7,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "freebsd".to_string(), + target_env: "gnueabihf".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs rustc-1.37.0-src/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs 2019-12-27 18:30:14.752922022 -0600 +@@ -8,7 +8,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "netbsd".to_string(), + target_env: "eabihf".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_apple_ios.rs rustc-1.37.0-src/src/librustc_target/spec/armv7_apple_ios.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_apple_ios.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv7_apple_ios.rs 2019-12-27 18:32:53.676298551 -0600 +@@ -8,7 +8,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32".to_string(), ++ data_layout: "e-m:o-p:32:32-Fi8-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32".to_string(), + arch: "arm".to_string(), + target_os: "ios".to_string(), + target_env: String::new(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_linux_androideabi.rs rustc-1.37.0-src/src/librustc_target/spec/armv7_linux_androideabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_linux_androideabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv7_linux_androideabi.rs 2019-12-27 19:40:04.520186183 -0600 +@@ -10,7 +10,7 @@ use crate::spec::{LinkerFlavor, Target, + + pub fn target() -> TargetResult { + let mut base = super::android_base::opts(); +- base.features = "+v7,+thumb-mode,+thumb2,+vfp3,+d16,-neon".to_string(); ++ base.features = "+v7,+thumb-mode,+thumb2,+vfp3,-d32,-neon".to_string(); + base.max_atomic_width = Some(64); + base.pre_link_args + .get_mut(&LinkerFlavor::Gcc).unwrap().push("-march=armv7-a".to_string()); +@@ -20,7 +20,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "android".to_string(), + target_env: String::new(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv7r_none_eabihf.rs rustc-1.37.0-src/src/librustc_target/spec/armv7r_none_eabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv7r_none_eabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv7r_none_eabihf.rs 2019-12-28 11:17:14.951381826 -0600 +@@ -9,7 +9,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: "".to_string(), +@@ -21,7 +21,7 @@ pub fn target() -> TargetResult { + linker: Some("rust-lld".to_owned()), + relocation_model: "static".to_string(), + panic_strategy: PanicStrategy::Abort, +- features: "+vfp3,+d16,+fp-only-sp".to_string(), ++ features: "+vfp3,-d32,-fp16".to_string(), + max_atomic_width: Some(32), + abi_blacklist: super::arm_base::abi_blacklist(), + emit_debug_gdb_scripts: false, +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv7r_none_eabi.rs rustc-1.37.0-src/src/librustc_target/spec/armv7r_none_eabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv7r_none_eabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv7r_none_eabi.rs 2019-12-28 11:16:10.504973399 -0600 +@@ -9,7 +9,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: "".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv7s_apple_ios.rs rustc-1.37.0-src/src/librustc_target/spec/armv7s_apple_ios.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv7s_apple_ios.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv7s_apple_ios.rs 2019-12-28 11:18:52.428996886 -0600 +@@ -8,7 +8,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32".to_string(), ++ data_layout: "e-m:o-p:32:32-Fi8-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32".to_string(), + arch: "arm".to_string(), + target_os: "ios".to_string(), + target_env: String::new(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs rustc-1.37.0-src/src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs 2019-12-28 11:11:27.634157914 -0600 +@@ -13,7 +13,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "cloudabi".to_string(), + target_env: String::new(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_unknown_freebsd.rs rustc-1.37.0-src/src/librustc_target/spec/armv7_unknown_freebsd.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_unknown_freebsd.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv7_unknown_freebsd.rs 2019-12-28 11:12:40.035626815 -0600 +@@ -7,7 +7,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "freebsd".to_string(), + target_env: "gnueabihf".to_string(), +@@ -15,7 +15,7 @@ pub fn target() -> TargetResult { + linker_flavor: LinkerFlavor::Gcc, + + options: TargetOptions { +- features: "+v7,+vfp3,+d16,+thumb2,-neon".to_string(), ++ features: "+v7,+vfp3,-d32,+thumb2,-neon".to_string(), + max_atomic_width: Some(64), + abi_blacklist: super::arm_base::abi_blacklist(), + target_mcount: "\u{1}__gnu_mcount_nc".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs rustc-1.37.0-src/src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs 2019-12-28 11:13:14.397848221 -0600 +@@ -10,7 +10,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "linux".to_string(), + target_env: "gnu".to_string(), +@@ -19,7 +19,7 @@ pub fn target() -> TargetResult { + + options: TargetOptions { + // Info about features at https://wiki.debian.org/ArmHardFloatPort +- features: "+v7,+vfp3,+d16,+thumb2,-neon".to_string(), ++ features: "+v7,+vfp3,-d32,+thumb2,-neon".to_string(), + cpu: "generic".to_string(), + max_atomic_width: Some(64), + abi_blacklist: super::arm_base::abi_blacklist(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs rustc-1.37.0-src/src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs 2019-12-28 11:14:02.671158142 -0600 +@@ -12,7 +12,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "linux".to_string(), + target_env: "musl".to_string(), +@@ -22,7 +22,7 @@ pub fn target() -> TargetResult { + // Most of these settings are copied from the armv7_unknown_linux_gnueabihf + // target. + options: TargetOptions { +- features: "+v7,+vfp3,+d16,+thumb2,-neon".to_string(), ++ features: "+v7,+vfp3,-d32,+thumb2,-neon".to_string(), + cpu: "generic".to_string(), + max_atomic_width: Some(64), + abi_blacklist: super::arm_base::abi_blacklist(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs rustc-1.37.0-src/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs 2019-12-28 11:15:11.938600805 -0600 +@@ -7,7 +7,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "netbsd".to_string(), + target_env: "eabihf".to_string(), +@@ -15,7 +15,7 @@ pub fn target() -> TargetResult { + linker_flavor: LinkerFlavor::Gcc, + + options: TargetOptions { +- features: "+v7,+vfp3,+d16,+thumb2,-neon".to_string(), ++ features: "+v7,+vfp3,-d32,+thumb2,-neon".to_string(), + cpu: "generic".to_string(), + max_atomic_width: Some(64), + abi_blacklist: super::arm_base::abi_blacklist(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv6m_none_eabi.rs rustc-1.37.0-src/src/librustc_target/spec/thumbv6m_none_eabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv6m_none_eabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/thumbv6m_none_eabi.rs 2019-12-28 11:19:27.888219910 -0600 +@@ -8,7 +8,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: String::new(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7a_pc_windows_msvc.rs rustc-1.37.0-src/src/librustc_target/spec/thumbv7a_pc_windows_msvc.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7a_pc_windows_msvc.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/thumbv7a_pc_windows_msvc.rs 2019-12-28 11:20:04.976452810 -0600 +@@ -22,7 +22,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:w-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:w-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "windows".to_string(), + target_env: "msvc".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7em_none_eabihf.rs rustc-1.37.0-src/src/librustc_target/spec/thumbv7em_none_eabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7em_none_eabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/thumbv7em_none_eabihf.rs 2019-12-28 11:21:38.722040005 -0600 +@@ -6,7 +6,7 @@ + // Additionally, this target uses the "hard" floating convention (ABI) where floating point values + // are passed to/from subroutines via FPU registers (S0, S1, D0, D1, etc.). + // +-// To opt into double precision hardware support, use the `-C target-feature=-fp-only-sp` flag. ++// To opt into double precision hardware support, use the `-C target-feature=+fp64` flag. + + use crate::spec::{LinkerFlavor, LldFlavor, Target, TargetOptions, TargetResult}; + +@@ -16,7 +16,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: String::new(), +@@ -26,14 +26,14 @@ pub fn target() -> TargetResult { + options: TargetOptions { + // `+vfp4` is the lowest common denominator between the Cortex-M4 (vfp4-16) and the + // Cortex-M7 (vfp5) +- // `+d16` both the Cortex-M4 and the Cortex-M7 only have 16 double-precision registers ++ // `-d32` both the Cortex-M4 and the Cortex-M7 only have 16 double-precision registers + // available +- // `+fp-only-sp` The Cortex-M4 only supports single precision floating point operations ++ // `-fp64` The Cortex-M4 only supports single precision floating point operations + // whereas in the Cortex-M7 double precision is optional + // + // Reference: + // ARMv7-M Architecture Reference Manual - A2.5 The optional floating-point extension +- features: "+vfp4,+d16,+fp-only-sp".to_string(), ++ features: "+vfp4,-d32,-fp64".to_string(), + max_atomic_width: Some(32), + .. super::thumb_base::opts() + } +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7em_none_eabi.rs rustc-1.37.0-src/src/librustc_target/spec/thumbv7em_none_eabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7em_none_eabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/thumbv7em_none_eabi.rs 2019-12-28 11:20:52.873753079 -0600 +@@ -17,7 +17,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: String::new(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7m_none_eabi.rs rustc-1.37.0-src/src/librustc_target/spec/thumbv7m_none_eabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7m_none_eabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/thumbv7m_none_eabi.rs 2019-12-28 11:22:40.339424933 -0600 +@@ -8,7 +8,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: String::new(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7neon_linux_androideabi.rs rustc-1.37.0-src/src/librustc_target/spec/thumbv7neon_linux_androideabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7neon_linux_androideabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/thumbv7neon_linux_androideabi.rs 2019-12-28 11:23:29.462731298 -0600 +@@ -20,7 +20,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "android".to_string(), + target_env: "".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7neon_unknown_linux_gnueabihf.rs rustc-1.37.0-src/src/librustc_target/spec/thumbv7neon_unknown_linux_gnueabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv7neon_unknown_linux_gnueabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/thumbv7neon_unknown_linux_gnueabihf.rs 2019-12-28 11:24:05.184953819 -0600 +@@ -13,7 +13,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "linux".to_string(), + target_env: "gnu".to_string(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv8m_base_none_eabi.rs rustc-1.37.0-src/src/librustc_target/spec/thumbv8m_base_none_eabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv8m_base_none_eabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/thumbv8m_base_none_eabi.rs 2019-12-28 11:25:05.154326941 -0600 +@@ -8,7 +8,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: String::new(), +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv8m_main_none_eabihf.rs rustc-1.37.0-src/src/librustc_target/spec/thumbv8m_main_none_eabihf.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv8m_main_none_eabihf.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/thumbv8m_main_none_eabihf.rs 2019-12-28 11:26:01.488676998 -0600 +@@ -9,7 +9,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: String::new(), +@@ -22,7 +22,7 @@ pub fn target() -> TargetResult { + // the FPU uses the FPv5 architecture, single-precision instructions + // and 16 D registers. + // These parameters map to the following LLVM features. +- features: "+fp-armv8,+fp-only-sp,+d16".to_string(), ++ features: "+fp-armv8,-fp64,-d32".to_string(), + max_atomic_width: Some(32), + .. super::thumb_base::opts() + }, +diff -Naurp rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv8m_main_none_eabi.rs rustc-1.37.0-src/src/librustc_target/spec/thumbv8m_main_none_eabi.rs +--- rustc-1.37.0-src.orig/src/librustc_target/spec/thumbv8m_main_none_eabi.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/librustc_target/spec/thumbv8m_main_none_eabi.rs 2019-12-28 11:25:33.388502444 -0600 +@@ -9,7 +9,7 @@ pub fn target() -> TargetResult { + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), +- data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), ++ data_layout: "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "none".to_string(), + target_env: String::new(), +diff -Naurp rustc-1.37.0-src.orig/src/rustllvm/PassWrapper.cpp rustc-1.37.0-src/src/rustllvm/PassWrapper.cpp +--- rustc-1.37.0-src.orig/src/rustllvm/PassWrapper.cpp 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/rustllvm/PassWrapper.cpp 2019-12-28 14:35:34.501864029 -0600 +@@ -913,7 +913,10 @@ LLVMRustCreateThinLTOData(LLVMRustThinLT + GlobalValue::LinkageTypes NewLinkage) { + ResolvedODR[ModuleIdentifier][GUID] = NewLinkage; + }; +-#if LLVM_VERSION_GE(8, 0) ++#if LLVM_VERSION_GE(9, 0) ++ thinLTOResolvePrevailingInIndex(Ret->Index, isPrevailing, recordNewLinkage, ++ Ret->GUIDPreservedSymbols); ++#elif LLVM_VERSION_GE(8, 0) + thinLTOResolvePrevailingInIndex(Ret->Index, isPrevailing, recordNewLinkage); + #else + thinLTOResolveWeakForLinkerInIndex(Ret->Index, isPrevailing, recordNewLinkage); +diff -Naurp rustc-1.37.0-src.orig/src/rustllvm/RustWrapper.cpp rustc-1.37.0-src/src/rustllvm/RustWrapper.cpp +--- rustc-1.37.0-src.orig/src/rustllvm/RustWrapper.cpp 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/rustllvm/RustWrapper.cpp 2019-12-28 15:10:38.483657185 -0600 +@@ -237,6 +237,17 @@ extern "C" void LLVMRustAddDereferenceab + Call->getContext(), Index, B)); + } + ++extern "C" void LLVMRustAddByValCallSiteAttr(LLVMValueRef Instr, unsigned Index, ++ LLVMTypeRef Ty) { ++ CallSite Call = CallSite(unwrap<Instruction>(Instr)); ++#if LLVM_VERSION_GE(9, 0) ++ Attribute Attr = Attribute::getWithByValType(Call->getContext(), unwrap(Ty)); ++#else ++ Attribute Attr = Attribute::get(Call->getContext(), Attribute::ByVal); ++#endif ++ Call.addAttribute(Index, Attr); ++} ++ + extern "C" void LLVMRustAddFunctionAttribute(LLVMValueRef Fn, unsigned Index, + LLVMRustAttribute RustAttr) { + Function *A = unwrap<Function>(Fn); +@@ -271,6 +282,17 @@ extern "C" void LLVMRustAddDereferenceab + A->addAttributes(Index, B); + } + ++extern "C" void LLVMRustAddByValAttr(LLVMValueRef Fn, unsigned Index, ++ LLVMTypeRef Ty) { ++ Function *F = unwrap<Function>(Fn); ++#if LLVM_VERSION_GE(9, 0) ++ Attribute Attr = Attribute::getWithByValType(F->getContext(), unwrap(Ty)); ++#else ++ Attribute Attr = Attribute::get(F->getContext(), Attribute::ByVal); ++#endif ++ F->addAttribute(Index, Attr); ++} ++ + extern "C" void LLVMRustAddFunctionAttrStringValue(LLVMValueRef Fn, + unsigned Index, + const char *Name, +diff -Naurp rustc-1.37.0-src.orig/src/test/codegen/mainsubprogram.rs rustc-1.37.0-src/src/test/codegen/mainsubprogram.rs +--- rustc-1.37.0-src.orig/src/test/codegen/mainsubprogram.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/test/codegen/mainsubprogram.rs 2019-12-28 11:36:56.213128959 -0600 +@@ -7,7 +7,7 @@ + // compile-flags: -g -C no-prepopulate-passes + + // CHECK-LABEL: @main +-// CHECK: {{.*}}DISubprogram{{.*}}name: "main",{{.*}}DIFlagMainSubprogram{{.*}} ++// CHECK: {{.*}}DISubprogram{{.*}}name: "main",{{.*}}DI{{(SP)?}}FlagMainSubprogram{{.*}} + + pub fn main() { + } +diff -Naurp rustc-1.37.0-src.orig/src/test/codegen/mainsubprogramstart.rs rustc-1.37.0-src/src/test/codegen/mainsubprogramstart.rs +--- rustc-1.37.0-src.orig/src/test/codegen/mainsubprogramstart.rs 2019-08-13 01:27:22.000000000 -0500 ++++ rustc-1.37.0-src/src/test/codegen/mainsubprogramstart.rs 2019-12-28 11:37:23.519265146 -0600 +@@ -6,7 +6,7 @@ + #![feature(start)] + + // CHECK-LABEL: @main +-// CHECK: {{.*}}DISubprogram{{.*}}name: "start",{{.*}}DIFlagMainSubprogram{{.*}} ++// CHECK: {{.*}}DISubprogram{{.*}}name: "start",{{.*}}DI{{(SP)?}}FlagMainSubprogram{{.*}} + + #[start] + fn start(_: isize, _: *const *const u8) -> isize { -- http://lists.linuxfromscratch.org/listinfo/patches FAQ: http://www.linuxfromscratch.org/blfs/faq.html Unsubscribe: See the above information page