mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Fix linkage for large binaries on mips64 platforms ...
... by enabling xgot feature Co-Authored-By: Zixing Liu <zixing.liu@canonical.com>
This commit is contained in:
@@ -12,7 +12,7 @@ pub fn target() -> Target {
|
||||
endian: Endian::Big,
|
||||
// NOTE(mips64r2) matches C toolchain
|
||||
cpu: "mips64r2".into(),
|
||||
features: "+mips64r2".into(),
|
||||
features: "+mips64r2,+xgot".into(),
|
||||
max_atomic_width: Some(64),
|
||||
mcount: "_mcount".into(),
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ pub fn target() -> Target {
|
||||
abi: "abi64".into(),
|
||||
// NOTE(mips64r2) matches C toolchain
|
||||
cpu: "mips64r2".into(),
|
||||
features: "+mips64r2".into(),
|
||||
features: "+mips64r2,+xgot".into(),
|
||||
max_atomic_width: Some(64),
|
||||
mcount: "_mcount".into(),
|
||||
|
||||
|
||||
@@ -877,6 +877,12 @@ class RustBuild(object):
|
||||
|
||||
# preserve existing RUSTFLAGS
|
||||
env.setdefault("RUSTFLAGS", "")
|
||||
# we need to explicitly add +xgot here so that we can successfully bootstrap
|
||||
# a usable stage1 compiler
|
||||
# FIXME: remove this if condition on the next bootstrap bump
|
||||
# cfg(bootstrap)
|
||||
if self.build_triple().startswith('mips'):
|
||||
env["RUSTFLAGS"] += " -Ctarget-feature=+xgot"
|
||||
target_features = []
|
||||
if self.get_toml("crt-static", build_section) == "true":
|
||||
target_features += ["+crt-static"]
|
||||
|
||||
@@ -72,7 +72,7 @@ pub unsafe fn $func(x: $ty) -> $ty {
|
||||
|
||||
// mips32-LABEL: sym_static_32:
|
||||
// mips32: #APP
|
||||
// mips32: lw $3, %got(extern_static)
|
||||
// mips32: lw $3, %got(extern_static)($gp)
|
||||
// mips32: #NO_APP
|
||||
#[cfg(mips32)]
|
||||
#[no_mangle]
|
||||
@@ -82,7 +82,7 @@ pub unsafe fn sym_static_32() {
|
||||
|
||||
// mips32-LABEL: sym_fn_32:
|
||||
// mips32: #APP
|
||||
// mips32: lw $3, %got(extern_func)
|
||||
// mips32: lw $3, %got(extern_func)($gp)
|
||||
// mips32: #NO_APP
|
||||
#[cfg(mips32)]
|
||||
#[no_mangle]
|
||||
@@ -92,7 +92,9 @@ pub unsafe fn sym_fn_32() {
|
||||
|
||||
// mips64-LABEL: sym_static_64:
|
||||
// mips64: #APP
|
||||
// mips64: ld $3, %got_disp(extern_static)
|
||||
// mips64: lui $3, %got_hi(extern_static)
|
||||
// mips64: daddu $3, $3, $gp
|
||||
// mips64: ld $3, %got_lo(extern_static)($3)
|
||||
// mips64: #NO_APP
|
||||
#[cfg(mips64)]
|
||||
#[no_mangle]
|
||||
@@ -102,7 +104,9 @@ pub unsafe fn sym_static_64() {
|
||||
|
||||
// mips64-LABEL: sym_fn_64:
|
||||
// mips64: #APP
|
||||
// mips64: ld $3, %got_disp(extern_func)
|
||||
// mips64: lui $3, %got_hi(extern_func)
|
||||
// mips64: daddu $3, $3, $gp
|
||||
// mips64: ld $3, %got_lo(extern_func)($3)
|
||||
// mips64: #NO_APP
|
||||
#[cfg(mips64)]
|
||||
#[no_mangle]
|
||||
|
||||
Reference in New Issue
Block a user