Merge remote-tracking branch 'upstream/master' into lib-float
This commit is contained in:
@@ -3,8 +3,6 @@
|
||||
, langObjC ? targetPlatform.isDarwin
|
||||
, langObjCpp ? targetPlatform.isDarwin
|
||||
, langJava ? false
|
||||
, langAda ? false
|
||||
, langVhdl ? false
|
||||
, langGo ? false
|
||||
, profiledCompiler ? false
|
||||
, staticCompiler ? false
|
||||
@@ -21,13 +19,11 @@
|
||||
, libXrender ? null, xproto ? null, renderproto ? null, xextproto ? null
|
||||
, libXrandr ? null, libXi ? null, inputproto ? null, randrproto ? null
|
||||
, x11Support ? langJava
|
||||
, gnatboot ? null
|
||||
, enableMultilib ? false
|
||||
, enablePlugin ? hostPlatform == buildPlatform # Whether to support user-supplied plug-ins
|
||||
, name ? "gcc"
|
||||
, libcCross ? null
|
||||
, crossStageStatic ? false
|
||||
, gnat ? null
|
||||
, libpthread ? null, libpthreadCross ? null # required for GNU/Hurd
|
||||
, stripped ? true
|
||||
, gnused ? null
|
||||
@@ -40,8 +36,6 @@
|
||||
assert langJava -> zip != null && unzip != null
|
||||
&& zlib != null && boehmgc != null
|
||||
&& perl != null; # for `--enable-java-home'
|
||||
assert langAda -> gnatboot != null;
|
||||
assert langVhdl -> gnat != null;
|
||||
|
||||
# LTO needs libelf and zlib.
|
||||
assert libelf != null -> zlib != null;
|
||||
@@ -63,16 +57,17 @@ let version = "7.3.0";
|
||||
enableParallelBuilding = true;
|
||||
|
||||
patches =
|
||||
[ ]
|
||||
[ # https://gcc.gnu.org/ml/gcc-patches/2018-02/msg00633.html
|
||||
./riscv-pthread-reentrant.patch
|
||||
# https://gcc.gnu.org/ml/gcc-patches/2018-03/msg00297.html
|
||||
./riscv-no-relax.patch
|
||||
]
|
||||
++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
++ optional noSysDirs ../no-sys-dirs.patch
|
||||
++ optional (hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied
|
||||
url = "https://git.busybox.net/buildroot/plain/package/gcc/7.1.0/0900-remove-selftests.patch?id=11271540bfe6adafbc133caf6b5b902a816f5f02";
|
||||
sha256 = "0mrvxsdwip2p3l17dscpc1x8vhdsciqw1z5q9i6p5g9yg1cqnmgs";
|
||||
})
|
||||
# The GNAT Makefiles did not pay attention to CFLAGS_FOR_TARGET for its
|
||||
# target libraries and tools.
|
||||
++ optional langAda ../gnat-cflags.patch
|
||||
++ optional langFortran ../gfortran-driving.patch;
|
||||
|
||||
javaEcj = fetchurl {
|
||||
@@ -203,7 +198,12 @@ stdenv.mkDerivation ({
|
||||
--replace "-install_name \\\$rpath/\\\$soname" "-install_name $lib/lib/\\\$soname"
|
||||
'';
|
||||
|
||||
postPatch =
|
||||
postPatch = ''
|
||||
configureScripts=$(find . -name configure)
|
||||
for configureScript in $configureScripts; do
|
||||
patchShebangs $configureScript
|
||||
done
|
||||
'' + (
|
||||
if (hostPlatform.isHurd
|
||||
|| (libcCross != null # e.g., building `gcc.crossDrv'
|
||||
&& libcCross ? crossConfig
|
||||
@@ -262,7 +262,7 @@ stdenv.mkDerivation ({
|
||||
sed -i gcc/config/linux.h -e '1i#undef LOCAL_INCLUDE_DIR'
|
||||
''
|
||||
)
|
||||
else null;
|
||||
else "");
|
||||
|
||||
# TODO(@Ericson2314): Make passthru instead. Weird to avoid mass rebuild,
|
||||
crossStageStatic = targetPlatform == hostPlatform || crossStageStatic;
|
||||
@@ -290,8 +290,6 @@ stdenv.mkDerivation ({
|
||||
++ (optionals langJava [ boehmgc zip unzip ])
|
||||
++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs))
|
||||
++ (optionals (targetPlatform != hostPlatform) [targetPackages.stdenv.cc.bintools])
|
||||
++ (optionals langAda [gnatboot])
|
||||
++ (optionals langVhdl [gnat])
|
||||
|
||||
# The builder relies on GNU sed (for instance, Darwin's `sed' fails with
|
||||
# "-i may not be used with stdin"), and `stdenvNative' doesn't provide it.
|
||||
@@ -343,8 +341,6 @@ stdenv.mkDerivation ({
|
||||
++ optional langCC "c++"
|
||||
++ optional langFortran "fortran"
|
||||
++ optional langJava "java"
|
||||
++ optional langAda "ada"
|
||||
++ optional langVhdl "vhdl"
|
||||
++ optional langGo "go"
|
||||
++ optional langObjC "objc"
|
||||
++ optional langObjCpp "obj-c++"
|
||||
@@ -377,9 +373,6 @@ stdenv.mkDerivation ({
|
||||
optional javaAwtGtk "--enable-java-awt=gtk" ++
|
||||
optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" ++
|
||||
|
||||
# Ada
|
||||
optional langAda "--enable-libada" ++
|
||||
|
||||
(import ../common/platform-flags.nix { inherit (stdenv) lib targetPlatform; }) ++
|
||||
optional (targetPlatform != hostPlatform) crossConfigureFlags ++
|
||||
optional (!bootstrap) "--disable-bootstrap" ++
|
||||
@@ -472,7 +465,7 @@ stdenv.mkDerivation ({
|
||||
]);
|
||||
|
||||
passthru =
|
||||
{ inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; };
|
||||
{ inherit langC langCC langObjC langObjCpp langFortran langGo version; isGNU = true; };
|
||||
|
||||
inherit enableParallelBuilding enableMultilib;
|
||||
|
||||
@@ -495,12 +488,10 @@ stdenv.mkDerivation ({
|
||||
|
||||
maintainers = with stdenv.lib.maintainers; [ ];
|
||||
|
||||
# gnatboot is not available out of linux platforms, so we disable the darwin build
|
||||
# for the gnat (ada compiler).
|
||||
platforms =
|
||||
stdenv.lib.platforms.linux ++
|
||||
stdenv.lib.platforms.freebsd ++
|
||||
optionals (langAda == false) stdenv.lib.platforms.darwin;
|
||||
stdenv.lib.platforms.darwin;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
commit e7c570f37384d824cb9725f237920e9691e57269
|
||||
gpg: Signature made Tue 06 Mar 2018 04:52:46 PM PST
|
||||
gpg: using RSA key 00CE76D1834960DFCE886DF8EF4CA1502CCBAB41
|
||||
gpg: issuer "palmer@dabbelt.com"
|
||||
gpg: Good signature from "Palmer Dabbelt <palmer@dabbelt.com>" [ultimate]
|
||||
gpg: aka "Palmer Dabbelt <palmer@sifive.com>" [ultimate]
|
||||
Author: Palmer Dabbelt <palmer@sifive.com>
|
||||
Date: Thu Mar 1 12:01:06 2018 -0800
|
||||
|
||||
RISC-V: Add and document the "-mno-relax" option
|
||||
|
||||
RISC-V relies on aggressive linker relaxation to get good code size. As
|
||||
a result no text symbol addresses can be known until link time, which
|
||||
means that alignment must be handled during the link. This alignment
|
||||
pass is essentially just another linker relaxation, so this has the
|
||||
unfortunate side effect that linker relaxation is required for
|
||||
correctness on many RISC-V targets.
|
||||
|
||||
The RISC-V assembler has supported an ".option norelax" for a long time
|
||||
because there are situations in which linker relaxation is a bad idea --
|
||||
the canonical example is when trying to materialize the initial value of
|
||||
the global pointer into a register, which would otherwise be relaxed to
|
||||
a NOP. We've been relying on users who want to disable relaxation for
|
||||
an entire link to pass "-Wl,--no-relax", but that still relies on the
|
||||
linker relaxing R_RISCV_ALIGN to handle alignment despite it not being
|
||||
strictly necessary.
|
||||
|
||||
This patch adds a GCC option, "-mno-relax", that disable linker
|
||||
relaxation by adding ".option norelax" to the top of every generated
|
||||
assembly file. The assembler is smart enough to handle alignment at
|
||||
assemble time for files that have never emitted a relaxable relocation,
|
||||
so this is sufficient to really disable all relaxations in the linker,
|
||||
which results in significantly faster link times for large objects.
|
||||
|
||||
This also has the side effect of allowing toolchains that don't support
|
||||
linker relaxation (LLVM and the Linux module loader) to function
|
||||
correctly. Toolchains that don't support linker relaxation should
|
||||
default to "-mno-relax" and error when presented with any R_RISCV_ALIGN
|
||||
relocation as those need to be handled for correctness.
|
||||
|
||||
gcc/ChangeLog
|
||||
|
||||
2018-03-01 Palmer Dabbelt <palmer@sifive.com>
|
||||
|
||||
* config/riscv/riscv.opt (mrelax): New option.
|
||||
* config/riscv/riscv.c (riscv_file_start): Emit ".option
|
||||
"norelax" when riscv_mrelax is disabled.
|
||||
* doc/invoke.texi (RISC-V): Document "-mrelax" and "-mno-relax".
|
||||
|
||||
diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c
|
||||
index c38f6c394d54..3e81874de232 100644
|
||||
--- a/gcc/config/riscv/riscv.c
|
||||
+++ b/gcc/config/riscv/riscv.c
|
||||
@@ -3979,6 +3979,11 @@ riscv_file_start (void)
|
||||
|
||||
/* Instruct GAS to generate position-[in]dependent code. */
|
||||
fprintf (asm_out_file, "\t.option %spic\n", (flag_pic ? "" : "no"));
|
||||
+
|
||||
+ /* If the user specifies "-mno-relax" on the command line then disable linker
|
||||
+ relaxation in the assembler. */
|
||||
+ if (! riscv_mrelax)
|
||||
+ fprintf (asm_out_file, "\t.option norelax\n");
|
||||
}
|
||||
|
||||
/* Implement TARGET_ASM_OUTPUT_MI_THUNK. Generate rtl rather than asm text
|
||||
diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt
|
||||
index 581a26bb5c1e..b37ac75d9bb4 100644
|
||||
--- a/gcc/config/riscv/riscv.opt
|
||||
+++ b/gcc/config/riscv/riscv.opt
|
||||
@@ -106,6 +106,11 @@ mexplicit-relocs
|
||||
Target Report Mask(EXPLICIT_RELOCS)
|
||||
Use %reloc() operators, rather than assembly macros, to load addresses.
|
||||
|
||||
+mrelax
|
||||
+Target Bool Var(riscv_mrelax) Init(1)
|
||||
+Take advantage of linker relaxations to reduce the number of instructions
|
||||
+required to materialize symbol addresses.
|
||||
+
|
||||
Mask(64BIT)
|
||||
|
||||
Mask(MUL)
|
||||
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
||||
index 8d366c626bae..deb48af2ecad 100644
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -1042,7 +1042,8 @@ See RS/6000 and PowerPC Options.
|
||||
-msave-restore -mno-save-restore @gol
|
||||
-mstrict-align -mno-strict-align @gol
|
||||
-mcmodel=medlow -mcmodel=medany @gol
|
||||
--mexplicit-relocs -mno-explicit-relocs @gol}
|
||||
+-mexplicit-relocs -mno-explicit-relocs @gol
|
||||
+-mrelax -mno-relax @gol}
|
||||
|
||||
@emph{RL78 Options}
|
||||
@gccoptlist{-msim -mmul=none -mmul=g13 -mmul=g14 -mallregs @gol
|
||||
@@ -23102,6 +23103,12 @@ Use or do not use assembler relocation operators when dealing with symbolic
|
||||
addresses. The alternative is to use assembler macros instead, which may
|
||||
limit optimization.
|
||||
|
||||
+@item -mrelax
|
||||
+@itemx -mno-relax
|
||||
+Take advantage of linker relaxations to reduce the number of instructions
|
||||
+required to materialize symbol addresses. The default is to take advantage of
|
||||
+linker relaxations.
|
||||
+
|
||||
@end table
|
||||
|
||||
@node RL78 Options
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
Index: gcc/config/riscv/linux.h
|
||||
===================================================================
|
||||
--- a/gcc/config/riscv/linux.h (revision 257620)
|
||||
+++ b/gcc/config/riscv/linux.h (revision 257621)
|
||||
@@ -47,6 +47,8 @@
|
||||
|
||||
#define ICACHE_FLUSH_FUNC "__riscv_flush_icache"
|
||||
|
||||
+#define CPP_SPEC "%{pthread:-D_REENTRANT}"
|
||||
+
|
||||
#define LINK_SPEC "\
|
||||
-melf" XLEN_SPEC "lriscv \
|
||||
%{shared} \
|
||||
Reference in New Issue
Block a user