Merge branch 'binutils-2.30' into staging

This commit is contained in:
Shea Levy 2018-03-22 07:28:10 -04:00
commit d0a8866622
No known key found for this signature in database
GPG Key ID: 5C0BD6957D86FE27
24 changed files with 287 additions and 765 deletions

View File

@ -61,7 +61,11 @@ stdenv.mkDerivation rec {
enableParallelBuilding = true; enableParallelBuilding = true;
patches = [ ./no-etc-install.patch ./statfs-flags.patch ] patches = [ ./no-etc-install.patch ./statfs-flags.patch (fetchpatch {
name = "glibc-2.27-memfd.patch";
url = "https://git.qemu.org/?p=qemu.git;a=patch;h=75e5b70e6b5dcc4f2219992d7cffa462aa406af0";
sha256 = "0gaz93kb33qc0jx6iphvny0yrd17i8zhcl3a9ky5ylc2idz0wiwa";
}) ]
++ optional nixosTestRunner ./force-uid0-on-9p.patch ++ optional nixosTestRunner ./force-uid0-on-9p.patch
++ optional pulseSupport ./fix-hda-recording.patch; ++ optional pulseSupport ./fix-hda-recording.patch;

View File

@ -214,7 +214,12 @@ stdenv.mkDerivation ({
--replace "-install_name \\\$rpath/\\\$soname" "-install_name $lib/lib/\\\$soname" --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 if (hostPlatform.isHurd
|| (libcCross != null # e.g., building `gcc.crossDrv' || (libcCross != null # e.g., building `gcc.crossDrv'
&& libcCross ? crossConfig && libcCross ? crossConfig
@ -273,7 +278,7 @@ stdenv.mkDerivation ({
sed -i gcc/config/linux.h -e '1i#undef LOCAL_INCLUDE_DIR' 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, # TODO(@Ericson2314): Make passthru instead. Weird to avoid mass rebuild,
crossStageStatic = targetPlatform == hostPlatform || crossStageStatic; crossStageStatic = targetPlatform == hostPlatform || crossStageStatic;

View File

@ -1,4 +1,5 @@
{ stdenv, callPackage, recurseIntoAttrs, makeRustPlatform, llvm, fetchurl { stdenv, callPackage, recurseIntoAttrs, makeRustPlatform, llvm, fetchurl
, fetchpatch
, targets ? [] , targets ? []
, targetToolchains ? [] , targetToolchains ? []
, targetPatches ? [] , targetPatches ? []
@ -6,11 +7,11 @@
let let
rustPlatform = recurseIntoAttrs (makeRustPlatform (callPackage ./bootstrap.nix {})); rustPlatform = recurseIntoAttrs (makeRustPlatform (callPackage ./bootstrap.nix {}));
version = "1.24.0"; version = "1.24.1";
cargoVersion = "0.24.0"; cargoVersion = "0.24.0";
src = fetchurl { src = fetchurl {
url = "https://static.rust-lang.org/dist/rustc-${version}-src.tar.gz"; url = "https://static.rust-lang.org/dist/rustc-${version}-src.tar.gz";
sha256 = "17v3jpyky8vkkgai5yd2zr8zl87qpgj6dx99gx27x1sf0kv7d0mv"; sha256 = "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y";
}; };
in rec { in rec {
rustc = callPackage ./rustc.nix { rustc = callPackage ./rustc.nix {
@ -22,6 +23,11 @@ in rec {
patches = [ patches = [
./patches/0001-Disable-fragile-tests-libstd-net-tcp-on-Darwin-Linux.patch ./patches/0001-Disable-fragile-tests-libstd-net-tcp-on-Darwin-Linux.patch
# Adapted from https://github.com/rust-lang/rust/pull/47912
(fetchpatch {
url = "https://src.fedoraproject.org/rpms/rust/raw/1bb4d24c060915c304c9a9f86a438388e599f9c6/f/0002-Use-a-range-to-identify-SIGSEGV-in-stack-guards.patch";
sha256 = "16hc170qzzcb9lcabk0ln005zji2h1gq0knbr9avbbzlbg9jha2q";
})
] ++ stdenv.lib.optional stdenv.needsPax ./patches/grsec.patch ] ++ stdenv.lib.optional stdenv.needsPax ./patches/grsec.patch
# https://github.com/rust-lang/rust/issues/45410 # https://github.com/rust-lang/rust/issues/45410
++ stdenv.lib.optional stdenv.isAarch64 ./patches/aarch64-disable-test_loading_cosine.patch; ++ stdenv.lib.optional stdenv.isAarch64 ./patches/aarch64-disable-test_loading_cosine.patch;

View File

@ -18,6 +18,8 @@ stdenv.mkDerivation rec {
patchPhase = '' patchPhase = ''
echo "Removing C++-style comments from include/acl.h" echo "Removing C++-style comments from include/acl.h"
sed -e '/^\/\//d' -i include/acl.h sed -e '/^\/\//d' -i include/acl.h
patchShebangs .
''; '';
configureFlags = [ "MAKE=make" "MSGFMT=msgfmt" "MSGMERGE=msgmerge" "XGETTEXT=xgettext" "ZIP=gzip" "ECHO=echo" "SED=sed" "AWK=gawk" ]; configureFlags = [ "MAKE=make" "MSGFMT=msgfmt" "MSGMERGE=msgmerge" "XGETTEXT=xgettext" "ZIP=gzip" "ECHO=echo" "SED=sed" "AWK=gawk" ];

View File

@ -18,6 +18,12 @@ stdenv.mkDerivation rec {
patches = if (hostPlatform.libc == "musl") then [ ./fix-headers-musl.patch ] else null; patches = if (hostPlatform.libc == "musl") then [ ./fix-headers-musl.patch ] else null;
postPatch = ''
for script in install-sh include/install-sh; do
patchShebangs $script
done
'';
meta = with stdenv.lib; { meta = with stdenv.lib; {
homepage = "http://savannah.nongnu.org/projects/attr/"; homepage = "http://savannah.nongnu.org/projects/attr/";
description = "Library and tools for manipulating extended attributes"; description = "Library and tools for manipulating extended attributes";

View File

@ -1,101 +0,0 @@
{ stdenv, callPackage
, withLinuxHeaders ? true
, installLocales ? true
, profilingLibraries ? false
, withGd ? false
}:
assert stdenv.cc.isGNU;
callPackage ./common-2.27.nix { inherit stdenv; } {
name = "glibc" + stdenv.lib.optionalString withGd "-gd";
inherit withLinuxHeaders profilingLibraries installLocales withGd;
NIX_NO_SELF_RPATH = true;
postConfigure = ''
# Hack: get rid of the `-static' flag set by the bootstrap stdenv.
# This has to be done *after* `configure' because it builds some
# test binaries.
export NIX_CFLAGS_LINK=
export NIX_LDFLAGS_BEFORE=
export NIX_DONT_SET_RPATH=1
unset CFLAGS
# Apparently --bindir is not respected.
makeFlagsArray+=("bindir=$bin/bin" "sbindir=$bin/sbin" "rootsbindir=$bin/sbin")
'';
# The stackprotector and fortify hardening flags are autodetected by glibc
# and enabled by default if supported. Setting it for every gcc invocation
# does not work.
hardeningDisable = [ "stackprotector" "fortify" ];
# When building glibc from bootstrap-tools, we need libgcc_s at RPATH for
# any program we run, because the gcc will have been placed at a new
# store path than that determined when built (as a source for the
# bootstrap-tools tarball)
# Building from a proper gcc staying in the path where it was installed,
# libgcc_s will not be at {gcc}/lib, and gcc's libgcc will be found without
# any special hack.
preInstall = ''
if [ -f ${stdenv.cc.cc}/lib/libgcc_s.so.1 ]; then
mkdir -p $out/lib
cp ${stdenv.cc.cc}/lib/libgcc_s.so.1 $out/lib/libgcc_s.so.1
# the .so It used to be a symlink, but now it is a script
cp -a ${stdenv.cc.cc}/lib/libgcc_s.so $out/lib/libgcc_s.so
fi
'';
postInstall = ''
if test -n "$installLocales"; then
make -j''${NIX_BUILD_CORES:-1} -l''${NIX_BUILD_CORES:-1} localedata/install-locales
fi
test -f $out/etc/ld.so.cache && rm $out/etc/ld.so.cache
if test -n "$linuxHeaders"; then
# Include the Linux kernel headers in Glibc, except the `scsi'
# subdirectory, which Glibc provides itself.
(cd $dev/include && \
ln -sv $(ls -d $linuxHeaders/include/* | grep -v scsi\$) .)
fi
# Fix for NIXOS-54 (ldd not working on x86_64). Make a symlink
# "lib64" to "lib".
if test -n "$is64bit"; then
ln -s lib $out/lib64
fi
# Get rid of more unnecessary stuff.
rm -rf $out/var $bin/bin/sln
# For some reason these aren't stripped otherwise and retain reference
# to bootstrap-tools; on cross-arm this stripping would break objects.
if [ -z "$crossConfig" ]; then
for i in "$out"/lib/*.a; do
[ "$i" = "$out/lib/libm.a" ] || strip -S "$i"
done
fi
# Put libraries for static linking in a separate output. Note
# that libc_nonshared.a and libpthread_nonshared.a are required
# for dynamically-linked applications.
mkdir -p $static/lib
mv $out/lib/*.a $static/lib
mv $static/lib/lib*_nonshared.a $out/lib
# Some of *.a files are linker scripts where moving broke the paths.
sed "/^GROUP/s|$out/lib/lib|$static/lib/lib|g" \
-i "$static"/lib/*.a
# Work around a Nix bug: hard links across outputs cause a build failure.
cp $bin/bin/getconf $bin/bin/getconf_
mv $bin/bin/getconf_ $bin/bin/getconf
'';
separateDebugInfo = true;
meta.description = "The GNU C Library";
}

View File

@ -1,216 +0,0 @@
/* Build configuration used to build glibc, Info files, and locale
information. */
{ stdenv, lib
, buildPlatform, hostPlatform
, buildPackages
, fetchurl, fetchpatch ? null
, linuxHeaders ? null
, gd ? null, libpng ? null
, bison
}:
{ name
, withLinuxHeaders ? false
, profilingLibraries ? false
, installLocales ? false
, withGd ? false
, meta
, ...
} @ args:
let
version = "2.27";
patchSuffix = "";
sha256 = "0wpwq7gsm7sd6ysidv0z575ckqdg13cr2njyfgrbgh4f65adwwji";
cross = if buildPlatform != hostPlatform then hostPlatform else null;
in
assert withLinuxHeaders -> linuxHeaders != null;
assert withGd -> gd != null && libpng != null;
stdenv.mkDerivation ({
inherit installLocales;
linuxHeaders = if withLinuxHeaders then linuxHeaders else null;
# The host/target system.
crossConfig = if cross != null then cross.config else null;
inherit (stdenv) is64bit;
enableParallelBuilding = true;
patches =
[
/* Have rpcgen(1) look for cpp(1) in $PATH. */
./rpcgen-path.patch
/* Allow NixOS and Nix to handle the locale-archive. */
./nix-locale-archive-2.27.patch
/* Don't use /etc/ld.so.cache, for non-NixOS systems. */
./dont-use-system-ld-so-cache-2.27.patch
/* Don't use /etc/ld.so.preload, but /etc/ld-nix.so.preload. */
./dont-use-system-ld-so-preload.patch
/* The command "getconf CS_PATH" returns the default search path
"/bin:/usr/bin", which is inappropriate on NixOS machines. This
patch extends the search path by "/run/current-system/sw/bin". */
./fix_path_attribute_in_getconf.patch
/* Allow running with RHEL 6 -like kernels. The patch adds an exception
for glibc to accept 2.6.32 and to tag the ELFs as 2.6.32-compatible
(otherwise the loader would refuse libc).
Note that glibc will fully work only on their heavily patched kernels
and we lose early mismatch detection on 2.6.32.
On major glibc updates we should check that the patched kernel supports
all the required features. ATM it's verified up to glibc-2.26-131.
# HOWTO: check glibc sources for changes in kernel requirements
git log -p glibc-2.25.. sysdeps/unix/sysv/linux/x86_64/kernel-features.h sysdeps/unix/sysv/linux/kernel-features.h
# get kernel sources (update the URL)
mkdir tmp && cd tmp
curl http://vault.centos.org/6.9/os/Source/SPackages/kernel-2.6.32-696.el6.src.rpm | rpm2cpio - | cpio -idmv
tar xf linux-*.bz2
# check syscall presence, for example
less linux-*?/arch/x86/kernel/syscall_table_32.S
*/
./allow-kernel-2.6.32.patch
]
++ lib.optional stdenv.isx86_64 ./fix-x64-abi.patch
++ lib.optional stdenv.hostPlatform.isMusl
(fetchpatch {
name = "fix-with-musl.patch";
url = "https://sourceware.org/bugzilla/attachment.cgi?id=10151&action=diff&collapsed=&headers=1&format=raw";
sha256 = "18kk534k6da5bkbsy1ivbi77iin76lsna168mfcbwv4ik5vpziq2";
});
postPatch =
''
# Needed for glibc to build with the gnumake 3.82
# http://comments.gmane.org/gmane.linux.lfs.support/31227
sed -i 's/ot \$/ot:\n\ttouch $@\n$/' manual/Makefile
# nscd needs libgcc, and we don't want it dynamically linked
# because we don't want it to depend on bootstrap-tools libs.
echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile
'';
configureFlags =
[ "-C"
"--enable-add-ons"
"--enable-obsolete-nsl"
"--enable-obsolete-rpc"
"--sysconfdir=/etc"
"--enable-stackguard-randomization"
(if withLinuxHeaders
then "--with-headers=${linuxHeaders}/include"
else "--without-headers")
(if profilingLibraries
then "--enable-profile"
else "--disable-profile")
] ++ lib.optionals withLinuxHeaders [
"--enable-kernel=3.2.0" # can't get below with glibc >= 2.26
] ++ lib.optionals (cross != null) [
(if cross ? float && cross.float == "soft" then "--without-fp" else "--with-fp")
] ++ lib.optionals (cross != null) [
"--with-__thread"
] ++ lib.optionals (cross == null && stdenv.isArm) [
"--host=arm-linux-gnueabi"
"--build=arm-linux-gnueabi"
# To avoid linking with -lgcc_s (dynamic link)
# so the glibc does not depend on its compiler store path
"libc_cv_as_needed=no"
] ++ lib.optional withGd "--with-gd";
installFlags = [ "sysconfdir=$(out)/etc" ];
outputs = [ "out" "bin" "dev" "static" ];
depsBuildBuild = [ buildPackages.stdenv.cc ];
nativeBuildInputs = [ bison ];
buildInputs = lib.optionals withGd [ gd libpng ];
# Needed to install share/zoneinfo/zone.tab. Set to impure /bin/sh to
# prevent a retained dependency on the bootstrap tools in the stdenv-linux
# bootstrap.
BASH_SHELL = "/bin/sh";
}
// (removeAttrs args [ "withLinuxHeaders" "withGd" ]) //
{
name = name + "-${version}${patchSuffix}";
src = fetchurl {
url = "mirror://gnu/glibc/glibc-${version}.tar.xz";
inherit sha256;
};
# Remove absolute paths from `configure' & co.; build out-of-tree.
preConfigure = ''
export PWD_P=$(type -tP pwd)
for i in configure io/ftwtest-sh; do
# Can't use substituteInPlace here because replace hasn't been
# built yet in the bootstrap.
sed -i "$i" -e "s^/bin/pwd^$PWD_P^g"
done
mkdir ../build
cd ../build
configureScript="`pwd`/../$sourceRoot/configure"
${lib.optionalString (stdenv.cc.libc != null)
''makeFlags="$makeFlags BUILD_LDFLAGS=-Wl,-rpath,${stdenv.cc.libc}/lib"''
}
'' + lib.optionalString (cross != null) ''
sed -i s/-lgcc_eh//g "../$sourceRoot/Makeconfig"
cat > config.cache << "EOF"
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_gnu89_inline=yes
EOF
'';
preBuild = lib.optionalString withGd "unset NIX_DONT_SET_RPATH";
meta = {
homepage = http://www.gnu.org/software/libc/;
description = "The GNU C Library";
longDescription =
'' Any Unix-like operating system needs a C library: the library which
defines the "system calls" and other basic facilities such as
open, malloc, printf, exit...
The GNU C library is used as the C library in the GNU system and
most systems with the Linux kernel.
'';
license = lib.licenses.lgpl2Plus;
maintainers = [ lib.maintainers.eelco ];
platforms = lib.platforms.linux;
} // meta;
passthru = { inherit version; };
}
// lib.optionalAttrs (cross != null) {
preInstall = null; # clobber the native hook
dontStrip = true;
separateDebugInfo = false; # this is currently broken for crossDrv
# To avoid a dependency on the build system 'bash'.
preFixup = ''
rm -f $bin/bin/{ldd,tzselect,catchsegv,xtrace}
'';
})

View File

@ -7,6 +7,7 @@
, fetchurl, fetchpatch ? null , fetchurl, fetchpatch ? null
, linuxHeaders ? null , linuxHeaders ? null
, gd ? null, libpng ? null , gd ? null, libpng ? null
, bison
}: }:
{ name { name
@ -19,9 +20,9 @@
} @ args: } @ args:
let let
version = "2.26"; version = "2.27";
patchSuffix = "-131"; patchSuffix = "";
sha256 = "1ggnj1hzjym7sn93rbwydcqd562q73lsb7g7kd199g6j9j9hlkp5"; sha256 = "0wpwq7gsm7sd6ysidv0z575ckqdg13cr2njyfgrbgh4f65adwwji";
cross = if buildPlatform != hostPlatform then hostPlatform else null; cross = if buildPlatform != hostPlatform then hostPlatform else null;
in in
@ -29,7 +30,7 @@ assert withLinuxHeaders -> linuxHeaders != null;
assert withGd -> gd != null && libpng != null; assert withGd -> gd != null && libpng != null;
stdenv.mkDerivation ({ stdenv.mkDerivation ({
inherit installLocales; inherit version installLocales;
linuxHeaders = if withLinuxHeaders then linuxHeaders else null; linuxHeaders = if withLinuxHeaders then linuxHeaders else null;
# The host/target system. # The host/target system.
@ -41,17 +42,6 @@ stdenv.mkDerivation ({
patches = patches =
[ [
/* No tarballs for stable upstream branch, only https://sourceware.org/git/?p=glibc.git
$ git co release/2.25/master; git describe
glibc-2.25-49-gbc5ace67fe
$ git show --reverse glibc-2.25..release/2.25/master | gzip -n -9 --rsyncable - > 2.25-49.patch.gz
*/
./2.26-75.patch.gz
./2.26-75to115.diff.gz
# contains fix for CVE-2018-1000001 as the last commit:
# https://sourceware.org/git/?p=glibc.git;a=commit;h=fabef2edbc
./2.26-115to131.diff.gz
/* Have rpcgen(1) look for cpp(1) in $PATH. */ /* Have rpcgen(1) look for cpp(1) in $PATH. */
./rpcgen-path.patch ./rpcgen-path.patch
@ -97,24 +87,14 @@ stdenv.mkDerivation ({
}); });
postPatch = postPatch =
''
# Needed for glibc to build with the gnumake 3.82 # Needed for glibc to build with the gnumake 3.82
# http://comments.gmane.org/gmane.linux.lfs.support/31227 # http://comments.gmane.org/gmane.linux.lfs.support/31227
''
sed -i 's/ot \$/ot:\n\ttouch $@\n$/' manual/Makefile sed -i 's/ot \$/ot:\n\ttouch $@\n$/' manual/Makefile
''
# nscd needs libgcc, and we don't want it dynamically linked # nscd needs libgcc, and we don't want it dynamically linked
# because we don't want it to depend on bootstrap-tools libs. # because we don't want it to depend on bootstrap-tools libs.
+ ''
echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile
''
# Replace the date and time in nscd by a prefix of $out.
# It is used as a protocol compatibility check.
# Note: the size of the struct changes, but using only a part
# would break hash-rewriting. When receiving stats it does check
# that the struct sizes match and can't cause overflow or something.
+ ''
cat ${./glibc-remove-datetime-from-nscd.patch} \
| sed "s,@out@,$out," | patch -p1
''; '';
configureFlags = configureFlags =
@ -150,6 +130,7 @@ stdenv.mkDerivation ({
outputs = [ "out" "bin" "dev" "static" ]; outputs = [ "out" "bin" "dev" "static" ];
depsBuildBuild = [ buildPackages.stdenv.cc ]; depsBuildBuild = [ buildPackages.stdenv.cc ];
nativeBuildInputs = [ bison ];
buildInputs = lib.optionals withGd [ gd libpng ]; buildInputs = lib.optionals withGd [ gd libpng ];
# Needed to install share/zoneinfo/zone.tab. Set to impure /bin/sh to # Needed to install share/zoneinfo/zone.tab. Set to impure /bin/sh to

View File

@ -1,46 +0,0 @@
diff -Naur glibc-2.27-orig/elf/ldconfig.c glibc-2.27/elf/ldconfig.c
--- glibc-2.27-orig/elf/ldconfig.c 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.27/elf/ldconfig.c 2018-02-17 22:43:17.232175182 -0500
@@ -51,7 +51,7 @@
#endif
#ifndef LD_SO_CONF
-# define LD_SO_CONF SYSCONFDIR "/ld.so.conf"
+# define LD_SO_CONF PREFIX "/etc/ld.so.conf"
#endif
/* Get libc version number. */
diff -Naur glibc-2.27-orig/elf/Makefile glibc-2.27/elf/Makefile
--- glibc-2.27-orig/elf/Makefile 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.27/elf/Makefile 2018-02-17 22:44:50.334006750 -0500
@@ -559,13 +559,13 @@
$(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
-SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"'
-CFLAGS-ldconfig.c += $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
+PREFIX-FLAGS := -D'PREFIX="$(prefix)"'
+CFLAGS-ldconfig.c += $(PREFIX-FLAGS) -D'LIBDIR="$(libdir)"' \
-D'SLIBDIR="$(slibdir)"'
libof-ldconfig = ldconfig
-CFLAGS-dl-cache.c += $(SYSCONF-FLAGS)
-CFLAGS-cache.c += $(SYSCONF-FLAGS)
-CFLAGS-rtld.c += $(SYSCONF-FLAGS)
+CFLAGS-dl-cache.c += $(PREFIX-FLAGS)
+CFLAGS-cache.c += $(PREFIX-FLAGS)
+CFLAGS-rtld.c += $(PREFIX-FLAGS)
cpp-srcs-left := $(all-rtld-routines:=.os)
lib := rtld
diff -Naur glibc-2.27-orig/sysdeps/generic/dl-cache.h glibc-2.27/sysdeps/generic/dl-cache.h
--- glibc-2.27-orig/sysdeps/generic/dl-cache.h 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.27/sysdeps/generic/dl-cache.h 2018-02-17 22:45:20.471598816 -0500
@@ -28,7 +28,7 @@
#endif
#ifndef LD_SO_CACHE
-# define LD_SO_CACHE SYSCONFDIR "/ld.so.cache"
+# define LD_SO_CACHE PREFIX "/etc/ld.so.cache"
#endif
#ifndef add_system_dir

View File

@ -1,7 +1,7 @@
diff -ru glibc-2.16.0-orig/elf/ldconfig.c glibc-2.16.0/elf/ldconfig.c diff -Naur glibc-2.27-orig/elf/ldconfig.c glibc-2.27/elf/ldconfig.c
--- glibc-2.16.0-orig/elf/ldconfig.c 2012-06-30 15:12:34.000000000 -0400 --- glibc-2.27-orig/elf/ldconfig.c 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.16.0/elf/ldconfig.c 2012-09-18 11:59:27.463284814 -0400 +++ glibc-2.27/elf/ldconfig.c 2018-02-17 22:43:17.232175182 -0500
@@ -50,7 +50,7 @@ @@ -51,7 +51,7 @@
#endif #endif
#ifndef LD_SO_CONF #ifndef LD_SO_CONF
@ -10,31 +10,31 @@ diff -ru glibc-2.16.0-orig/elf/ldconfig.c glibc-2.16.0/elf/ldconfig.c
#endif #endif
/* Get libc version number. */ /* Get libc version number. */
diff -ru glibc-2.16.0-orig/elf/Makefile glibc-2.16.0/elf/Makefile diff -Naur glibc-2.27-orig/elf/Makefile glibc-2.27/elf/Makefile
--- glibc-2.16.0-orig/elf/Makefile 2012-06-30 15:12:34.000000000 -0400 --- glibc-2.27-orig/elf/Makefile 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.16.0/elf/Makefile 2012-09-18 12:03:30.031955196 -0400 +++ glibc-2.27/elf/Makefile 2018-02-17 22:44:50.334006750 -0500
@@ -415,12 +415,12 @@ @@ -559,13 +559,13 @@
$(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o) $(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
-SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"' -SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"'
-CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \ -CFLAGS-ldconfig.c += $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
+PREFIX-FLAGS := -D'PREFIX="$(prefix)"' +PREFIX-FLAGS := -D'PREFIX="$(prefix)"'
+CFLAGS-ldconfig.c = $(PREFIX-FLAGS) -D'LIBDIR="$(libdir)"' \ +CFLAGS-ldconfig.c += $(PREFIX-FLAGS) -D'LIBDIR="$(libdir)"' \
-D'SLIBDIR="$(slibdir)"' -D'SLIBDIR="$(slibdir)"'
libof-ldconfig = ldconfig libof-ldconfig = ldconfig
-CFLAGS-dl-cache.c = $(SYSCONF-FLAGS) -CFLAGS-dl-cache.c += $(SYSCONF-FLAGS)
-CFLAGS-cache.c = $(SYSCONF-FLAGS) -CFLAGS-cache.c += $(SYSCONF-FLAGS)
-CFLAGS-rtld.c = $(SYSCONF-FLAGS) -CFLAGS-rtld.c += $(SYSCONF-FLAGS)
+CFLAGS-dl-cache.c = $(PREFIX-FLAGS) +CFLAGS-dl-cache.c += $(PREFIX-FLAGS)
+CFLAGS-cache.c = $(PREFIX-FLAGS) +CFLAGS-cache.c += $(PREFIX-FLAGS)
+CFLAGS-rtld.c = $(PREFIX-FLAGS) +CFLAGS-rtld.c += $(PREFIX-FLAGS)
cpp-srcs-left := $(all-rtld-routines:=.os) cpp-srcs-left := $(all-rtld-routines:=.os)
lib := rtld lib := rtld
diff -ru glibc-2.16.0-orig/sysdeps/generic/dl-cache.h glibc-2.16.0/sysdeps/generic/dl-cache.h diff -Naur glibc-2.27-orig/sysdeps/generic/dl-cache.h glibc-2.27/sysdeps/generic/dl-cache.h
--- glibc-2.16.0-orig/sysdeps/generic/dl-cache.h 2012-06-30 15:12:34.000000000 -0400 --- glibc-2.27-orig/sysdeps/generic/dl-cache.h 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.16.0/sysdeps/generic/dl-cache.h 2012-09-18 11:59:27.465284809 -0400 +++ glibc-2.27/sysdeps/generic/dl-cache.h 2018-02-17 22:45:20.471598816 -0500
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
#endif #endif

View File

@ -1,118 +0,0 @@
diff -Naur glibc-2.27-orig/locale/loadarchive.c glibc-2.27/locale/loadarchive.c
--- glibc-2.27-orig/locale/loadarchive.c 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.27/locale/loadarchive.c 2018-02-17 22:32:25.680169462 -0500
@@ -123,6 +123,23 @@
return MAX (namehash_end, MAX (string_end, locrectab_end));
}
+static int
+open_locale_archive (void)
+{
+ int fd = -1;
+ char *versioned_path = getenv ("LOCALE_ARCHIVE_2_27");
+ char *path = getenv ("LOCALE_ARCHIVE");
+ if (versioned_path)
+ fd = __open_nocancel (versioned_path, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ if (path && fd < 0)
+ fd = __open_nocancel (path, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ if (fd < 0)
+ fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ if (fd < 0)
+ fd = __open_nocancel ("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ return fd;
+}
+
/* Find the locale *NAMEP in the locale archive, and return the
internalized data structure for its CATEGORY data. If this locale has
@@ -202,7 +219,7 @@
archmapped = &headmap;
/* The archive has never been opened. */
- fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ fd = open_locale_archive ();
if (fd < 0)
/* Cannot open the archive, for whatever reason. */
return NULL;
@@ -397,8 +414,7 @@
if (fd == -1)
{
struct stat64 st;
- fd = __open_nocancel (archfname,
- O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ fd = open_locale_archive ();
if (fd == -1)
/* Cannot open the archive, for whatever reason. */
return NULL;
diff -Naur glibc-2.27-orig/locale/programs/locale.c glibc-2.27/locale/programs/locale.c
--- glibc-2.27-orig/locale/programs/locale.c 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.27/locale/programs/locale.c 2018-02-17 22:36:39.726293213 -0500
@@ -633,6 +633,24 @@
static int
+open_locale_archive (void)
+{
+ int fd = -1;
+ char *versioned_path = getenv ("LOCALE_ARCHIVE_2_27");
+ char *path = getenv ("LOCALE_ARCHIVE");
+ if (versioned_path)
+ fd = open64 (versioned_path, O_RDONLY);
+ if (path && fd < 0)
+ fd = open64 (path, O_RDONLY);
+ if (fd < 0)
+ fd = open64 (ARCHIVE_NAME, O_RDONLY);
+ if (fd < 0)
+ fd = open64 ("/usr/lib/locale/locale-archive", O_RDONLY);
+ return fd;
+}
+
+
+static int
write_archive_locales (void **all_datap, char *linebuf)
{
struct stat64 st;
@@ -644,7 +662,7 @@
int fd, ret = 0;
uint32_t cnt;
- fd = open64 (ARCHIVE_NAME, O_RDONLY);
+ fd = open_locale_archive ();
if (fd < 0)
return 0;
diff -Naur glibc-2.27-orig/locale/programs/locarchive.c glibc-2.27/locale/programs/locarchive.c
--- glibc-2.27-orig/locale/programs/locarchive.c 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.27/locale/programs/locarchive.c 2018-02-17 22:40:51.245293975 -0500
@@ -117,6 +117,22 @@
}
+static int
+open_locale_archive (const char * archivefname, int flags)
+{
+ int fd = -1;
+ char *versioned_path = getenv ("LOCALE_ARCHIVE_2_27");
+ char *path = getenv ("LOCALE_ARCHIVE");
+ if (versioned_path)
+ fd = open64 (versioned_path, flags);
+ if (path && fd < 0)
+ fd = open64 (path, flags);
+ if (fd < 0)
+ fd = open64 (archivefname, flags);
+ return fd;
+}
+
+
static void
create_archive (const char *archivefname, struct locarhandle *ah)
{
@@ -578,7 +594,7 @@
while (1)
{
/* Open the archive. We must have exclusive write access. */
- fd = open64 (archivefname, readonly ? O_RDONLY : O_RDWR);
+ fd = open_locale_archive (archivefname, readonly ? O_RDONLY : O_RDWR);
if (fd == -1)
{
/* Maybe the file does not yet exist? If we are opening

View File

@ -1,114 +1,118 @@
diff -ru glibc-2.16.0-orig/locale/loadarchive.c glibc-2.16.0/locale/loadarchive.c diff -Naur glibc-2.27-orig/locale/loadarchive.c glibc-2.27/locale/loadarchive.c
--- glibc-2.16.0-orig/locale/loadarchive.c 2012-06-30 15:12:34.000000000 -0400 --- glibc-2.27-orig/locale/loadarchive.c 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.16.0/locale/loadarchive.c 2012-09-18 11:57:57.277515212 -0400 +++ glibc-2.27/locale/loadarchive.c 2018-02-17 22:32:25.680169462 -0500
@@ -123,6 +123,25 @@ @@ -123,6 +123,23 @@
return MAX (namehash_end, MAX (string_end, locrectab_end));
} }
+static int +static int
+open_locale_archive (void) +open_locale_archive (void)
+{ +{
+ int fd = -1; + int fd = -1;
+ char *path = getenv ("LOCALE_ARCHIVE_2_11"); + char *versioned_path = getenv ("LOCALE_ARCHIVE_2_27");
+ char *path2 = getenv ("LOCALE_ARCHIVE"); + char *path = getenv ("LOCALE_ARCHIVE");
+ const char *usualpath = "/usr/lib/locale/locale-archive"; + if (versioned_path)
+ if (path) + fd = __open_nocancel (versioned_path, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ fd = open_not_cancel_2 (path, O_RDONLY|O_LARGEFILE|O_CLOEXEC); + if (path && fd < 0)
+ if (path2 && fd < 0) + fd = __open_nocancel (path, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ fd = open_not_cancel_2 (path2, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ if (fd < 0) + if (fd < 0)
+ fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC); + fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ if (fd < 0) + if (fd < 0)
+ fd = open_not_cancel_2 (usualpath, O_RDONLY|O_LARGEFILE|O_CLOEXEC); + fd = __open_nocancel ("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ return fd; + return fd;
+} +}
+ +
+
/* Find the locale *NAMEP in the locale archive, and return the /* Find the locale *NAMEP in the locale archive, and return the
internalized data structure for its CATEGORY data. If this locale has internalized data structure for its CATEGORY data. If this locale has
already been loaded from the archive, just returns the existing data @@ -202,7 +219,7 @@
@@ -202,7 +221,7 @@
archmapped = &headmap; archmapped = &headmap;
/* The archive has never been opened. */ /* The archive has never been opened. */
- fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC); - fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ fd = open_locale_archive (); + fd = open_locale_archive ();
if (fd < 0) if (fd < 0)
/* Cannot open the archive, for whatever reason. */ /* Cannot open the archive, for whatever reason. */
return NULL; return NULL;
@@ -393,8 +412,7 @@ @@ -397,8 +414,7 @@
if (fd == -1) if (fd == -1)
{ {
struct stat64 st; struct stat64 st;
- fd = open_not_cancel_2 (archfname, - fd = __open_nocancel (archfname,
- O_RDONLY|O_LARGEFILE|O_CLOEXEC); - O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ fd = open_locale_archive (); + fd = open_locale_archive ();
if (fd == -1) if (fd == -1)
/* Cannot open the archive, for whatever reason. */ /* Cannot open the archive, for whatever reason. */
return NULL; return NULL;
diff -ru glibc-2.16.0-orig/locale/programs/locale.c glibc-2.16.0/locale/programs/locale.c diff -Naur glibc-2.27-orig/locale/programs/locale.c glibc-2.27/locale/programs/locale.c
--- glibc-2.16.0-orig/locale/programs/locale.c 2012-06-30 15:12:34.000000000 -0400 --- glibc-2.27-orig/locale/programs/locale.c 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.16.0/locale/programs/locale.c 2012-09-18 11:53:03.719920947 -0400 +++ glibc-2.27/locale/programs/locale.c 2018-02-17 22:36:39.726293213 -0500
@@ -628,6 +628,20 @@ @@ -633,6 +633,24 @@
((const struct nameent *) b)->name);
}
+static int
+open_nix_locale_archive (const char * fname, int access)
+{
+ int fd = -1;
+ char *path = getenv ("LOCALE_ARCHIVE_2_11");
+ char *path2 = getenv ("LOCALE_ARCHIVE");
+ if (path)
+ fd = open64 (path, access);
+ if (path2 && fd < 0)
+ fd = open64 (path2, access);
+ if (fd < 0)
+ fd = open64 (fname, access);
+ return fd;
+}
static int static int
+open_locale_archive (void)
+{
+ int fd = -1;
+ char *versioned_path = getenv ("LOCALE_ARCHIVE_2_27");
+ char *path = getenv ("LOCALE_ARCHIVE");
+ if (versioned_path)
+ fd = open64 (versioned_path, O_RDONLY);
+ if (path && fd < 0)
+ fd = open64 (path, O_RDONLY);
+ if (fd < 0)
+ fd = open64 (ARCHIVE_NAME, O_RDONLY);
+ if (fd < 0)
+ fd = open64 ("/usr/lib/locale/locale-archive", O_RDONLY);
+ return fd;
+}
+
+
+static int
write_archive_locales (void **all_datap, char *linebuf) write_archive_locales (void **all_datap, char *linebuf)
@@ -641,7 +655,7 @@ {
struct stat64 st;
@@ -644,7 +662,7 @@
int fd, ret = 0; int fd, ret = 0;
uint32_t cnt; uint32_t cnt;
- fd = open64 (ARCHIVE_NAME, O_RDONLY); - fd = open64 (ARCHIVE_NAME, O_RDONLY);
+ fd = open_nix_locale_archive (ARCHIVE_NAME, O_RDONLY); + fd = open_locale_archive ();
if (fd < 0) if (fd < 0)
return 0; return 0;
diff -ru glibc-2.16.0-orig/locale/programs/locarchive.c glibc-2.16.0/locale/programs/locarchive.c diff -Naur glibc-2.27-orig/locale/programs/locarchive.c glibc-2.27/locale/programs/locarchive.c
--- glibc-2.16.0-orig/locale/programs/locarchive.c 2012-06-30 15:12:34.000000000 -0400 --- glibc-2.27-orig/locale/programs/locarchive.c 2018-02-01 11:17:18.000000000 -0500
+++ glibc-2.16.0/locale/programs/locarchive.c 2012-09-18 11:53:03.720920942 -0400 +++ glibc-2.27/locale/programs/locarchive.c 2018-02-17 22:40:51.245293975 -0500
@@ -509,6 +509,20 @@ @@ -117,6 +117,22 @@
*ah = new_ah;
} }
+static int +static int
+open_nix_locale_archive (const char * fname, int access) +open_locale_archive (const char * archivefname, int flags)
+{ +{
+ int fd = -1; + int fd = -1;
+ char *path = getenv ("LOCALE_ARCHIVE_2_11"); + char *versioned_path = getenv ("LOCALE_ARCHIVE_2_27");
+ char *path2 = getenv ("LOCALE_ARCHIVE"); + char *path = getenv ("LOCALE_ARCHIVE");
+ if (path) + if (versioned_path)
+ fd = open64 (path, access); + fd = open64 (versioned_path, flags);
+ if (path2 && fd < 0) + if (path && fd < 0)
+ fd = open64 (path2, access); + fd = open64 (path, flags);
+ if (fd < 0) + if (fd < 0)
+ fd = open64 (fname, access); + fd = open64 (archivefname, flags);
+ return fd; + return fd;
+} +}
+
void +
open_archive (struct locarhandle *ah, bool readonly) static void
@@ -528,7 +542,7 @@ create_archive (const char *archivefname, struct locarhandle *ah)
{
@@ -578,7 +594,7 @@
while (1) while (1)
{ {
/* Open the archive. We must have exclusive write access. */ /* Open the archive. We must have exclusive write access. */
- fd = open64 (archivefname, readonly ? O_RDONLY : O_RDWR); - fd = open64 (archivefname, readonly ? O_RDONLY : O_RDWR);
+ fd = open_nix_locale_archive (archivefname, readonly ? O_RDONLY : O_RDWR); + fd = open_locale_archive (archivefname, readonly ? O_RDONLY : O_RDWR);
if (fd == -1) if (fd == -1)
{ {
/* Maybe the file does not yet exist. */ /* Maybe the file does not yet exist? If we are opening

View File

@ -35,6 +35,10 @@ in stdenv.mkDerivation rec {
# https://bugs.exim.org/show_bug.cgi?id=2173 # https://bugs.exim.org/show_bug.cgi?id=2173
patches = [ ./stacksize-detection.patch ]; patches = [ ./stacksize-detection.patch ];
preCheck = ''
patchShebangs RunGrepTest
'';
doCheck = !(with hostPlatform; isCygwin || isFreeBSD) && hostPlatform == buildPlatform; doCheck = !(with hostPlatform; isCygwin || isFreeBSD) && hostPlatform == buildPlatform;
# XXX: test failure on Cygwin # XXX: test failure on Cygwin
# we are running out of stack on both freeBSDs on Hydra # we are running out of stack on both freeBSDs on Hydra

View File

@ -45,7 +45,9 @@
let let
inherit (stdenv.lib) optional optionalString; inherit (stdenv.lib) optional optionalString;
version = "3.10.3"; # Don't upgrade until https://github.com/math-atlas/math-atlas/issues/44
# is resolved.
version = "3.10.2";
in in
stdenv.mkDerivation { stdenv.mkDerivation {
@ -53,7 +55,7 @@ stdenv.mkDerivation {
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/math-atlas/atlas${version}.tar.bz2"; url = "mirror://sourceforge/math-atlas/atlas${version}.tar.bz2";
sha256 = "1dyjlq3fiparvm8ypwk6rsmjzmnwk81l88gkishphpvc79ryp216"; sha256 = "0bqh4bdnjdyww4mcpg6kn0x7338mfqbdgysn97dzrwwb26di7ars";
}; };
buildInputs = [ gfortran ]; buildInputs = [ gfortran ];

View File

@ -1,131 +0,0 @@
{ stdenv, buildPackages
, fetchurl, zlib
, buildPlatform, hostPlatform, targetPlatform
, noSysDirs, gold ? true, bison ? null
}:
let
version = "2.30";
basename = "binutils-${version}";
inherit (stdenv.lib) optional optionals optionalString;
# The targetPrefix prepended to binary names to allow multiple binuntils on the
# PATH to both be usable.
targetPrefix = optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-";
in
stdenv.mkDerivation rec {
name = targetPrefix + basename;
src = fetchurl {
url = "mirror://gnu/binutils/${basename}.tar.bz2";
sha256 = "028cklfqaab24glva1ks2aqa1zxa6w6xmc8q34zs1sb7h22dxspg";
};
patches = [
# Turn on --enable-new-dtags by default to make the linker set
# RUNPATH instead of RPATH on binaries. This is important because
# RUNPATH can be overriden using LD_LIBRARY_PATH at runtime.
./new-dtags.patch
# Since binutils 2.22, DT_NEEDED flags aren't copied for dynamic outputs.
# That requires upstream changes for things to work. So we can patch it to
# get the old behaviour by now.
./dtneeded.patch
# Make binutils output deterministic by default.
./deterministic.patch
# Always add PaX flags section to ELF files.
# This is needed, for instance, so that running "ldd" on a binary that is
# PaX-marked to disable mprotect doesn't fail with permission denied.
./pt-pax-flags.patch
# Bfd looks in BINDIR/../lib for some plugins that don't
# exist. This is pointless (since users can't install plugins
# there) and causes a cycle between the lib and bin outputs, so
# get rid of it.
./no-plugins.patch
# Help bfd choose between elf32-littlearm, elf32-littlearm-symbian, and
# elf32-littlearm-vxworks in favor of the first.
# https://github.com/NixOS/nixpkgs/pull/30484#issuecomment-345472766
./disambiguate-arm-targets.patch
# For some reason bfd ld doesn't search DT_RPATH when cross-compiling. It's
# not clear why this behavior was decided upon but it has the unfortunate
# consequence that the linker will fail to find transitive dependencies of
# shared objects when cross-compiling. Consequently, we are forced to
# override this behavior, forcing ld to search DT_RPATH even when
# cross-compiling.
./always-search-rpath.patch
];
outputs = [ "out" "info" "man" ];
depsBuildBuild = [ buildPackages.stdenv.cc ];
nativeBuildInputs = [ bison ];
buildInputs = [ zlib ];
inherit noSysDirs;
preConfigure = ''
# Clear the default library search path.
if test "$noSysDirs" = "1"; then
echo 'NATIVE_LIB_DIRS=' >> ld/configure.tgt
fi
# Use symlinks instead of hard links to save space ("strip" in the
# fixup phase strips each hard link separately).
for i in binutils/Makefile.in gas/Makefile.in ld/Makefile.in gold/Makefile.in; do
sed -i "$i" -e 's|ln |ln -s |'
done
'';
# As binutils takes part in the stdenv building, we don't want references
# to the bootstrap-tools libgcc (as uses to happen on arm/mips)
NIX_CFLAGS_COMPILE = if hostPlatform.isDarwin
then "-Wno-string-plus-int -Wno-deprecated-declarations"
else "-static-libgcc";
# TODO(@Ericson2314): Always pass "--target" and always targetPrefix.
configurePlatforms =
# TODO(@Ericson2314): Figure out what's going wrong with Arm
if buildPlatform == hostPlatform && hostPlatform == targetPlatform && targetPlatform.isArm
then []
else [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
configureFlags = [
"--enable-targets=all" "--enable-64-bit-bfd"
"--disable-install-libbfd"
"--disable-shared" "--enable-static"
"--with-system-zlib"
"--enable-deterministic-archives"
"--disable-werror"
"--enable-fix-loongson2f-nop"
] ++ optionals gold [ "--enable-gold" "--enable-plugins" ];
enableParallelBuilding = true;
passthru = {
inherit targetPrefix version;
};
meta = with stdenv.lib; {
description = "Tools for manipulating binaries (linker, assembler, etc.)";
longDescription = ''
The GNU Binutils are a collection of binary tools. The main
ones are `ld' (the GNU linker) and `as' (the GNU assembler).
They also include the BFD (Binary File Descriptor) library,
`gprof', `nm', `strip', etc.
'';
homepage = http://www.gnu.org/software/binutils/;
license = licenses.gpl3Plus;
maintainers = with maintainers; [ ericson2314 ];
platforms = platforms.unix;
/* Give binutils a lower priority than gcc-wrapper to prevent a
collision due to the ld/as wrappers/symlinks in the latter. */
priority = 10;
};
}

View File

@ -5,10 +5,7 @@
}: }:
let let
# Note to whoever is upgrading this: 2.29 is broken. version = "2.30";
# ('nix-build pkgs/stdenv/linux/make-bootstrap-tools.nix -A test' segfaults on aarch64)
# Also glibc might need patching, see commit 733e20fee4a6700510f71fbe1a58ac23ea202f6a.
version = "2.28.1";
basename = "binutils-${version}"; basename = "binutils-${version}";
inherit (stdenv.lib) optional optionals optionalString; inherit (stdenv.lib) optional optionals optionalString;
# The targetPrefix prepended to binary names to allow multiple binuntils on the # The targetPrefix prepended to binary names to allow multiple binuntils on the
@ -21,7 +18,7 @@ stdenv.mkDerivation rec {
src = fetchurl { src = fetchurl {
url = "mirror://gnu/binutils/${basename}.tar.bz2"; url = "mirror://gnu/binutils/${basename}.tar.bz2";
sha256 = "1sj234nd05cdgga1r36zalvvdkvpfbr12g5mir2n8i1dwsdrj939"; sha256 = "028cklfqaab24glva1ks2aqa1zxa6w6xmc8q34zs1sb7h22dxspg";
}; };
patches = [ patches = [
@ -61,6 +58,9 @@ stdenv.mkDerivation rec {
# override this behavior, forcing ld to search DT_RPATH even when # override this behavior, forcing ld to search DT_RPATH even when
# cross-compiling. # cross-compiling.
./always-search-rpath.patch ./always-search-rpath.patch
# https://sourceware.org/bugzilla/show_bug.cgi?id=22868
./gold-symbol-visibility.patch
]; ];
outputs = [ "out" "info" "man" ]; outputs = [ "out" "info" "man" ];

View File

@ -0,0 +1,79 @@
commit 8564af037f5c4c6d2744a89497691359205b2bbc
Author: Shea Levy <shea@shealevy.com>
Date: Mon Mar 19 10:52:40 2018 -0400
Revert "Allow multiply-defined absolute symbols when they have the same value."
This reverts commit 5dc824ed42cd173c1525f5abc76f4091f11a4dbc.
diff --git a/gold/ChangeLog-2017 b/gold/ChangeLog-2017
index b2a47710b5..d7ca1b48c0 100644
--- a/gold/ChangeLog-2017
+++ b/gold/ChangeLog-2017
@@ -114,11 +114,6 @@
(localedir): Define as @localedir@.
(gnulocaledir, gettextsrcdir): Use @datarootdir@.
-2017-11-28 Cary Coutant <ccoutant@gmail.com>
-
- * resolve.cc (Symbol_table::resolve): Allow multiply-defined absolute
- symbols when they have the same value.
-
2017-11-28 Cary Coutant <ccoutant@gmail.com>
* object.h (class Sized_relobj_file): Remove discarded_eh_frame_shndx_.
diff --git a/gold/resolve.cc b/gold/resolve.cc
index 4a5784cf8b..803576bfed 100644
--- a/gold/resolve.cc
+++ b/gold/resolve.cc
@@ -247,28 +247,18 @@ Symbol_table::resolve(Sized_symbol<size>* to,
Object* object, const char* version,
bool is_default_version)
{
- bool to_is_ordinary;
- const unsigned int to_shndx = to->shndx(&to_is_ordinary);
-
// It's possible for a symbol to be defined in an object file
// using .symver to give it a version, and for there to also be
// a linker script giving that symbol the same version. We
// don't want to give a multiple-definition error for this
// harmless redefinition.
+ bool to_is_ordinary;
if (to->source() == Symbol::FROM_OBJECT
&& to->object() == object
- && to->is_defined()
&& is_ordinary
+ && to->is_defined()
+ && to->shndx(&to_is_ordinary) == st_shndx
&& to_is_ordinary
- && to_shndx == st_shndx
- && to->value() == sym.get_st_value())
- return;
-
- // Likewise for an absolute symbol defined twice with the same value.
- if (!is_ordinary
- && st_shndx == elfcpp::SHN_ABS
- && !to_is_ordinary
- && to_shndx == elfcpp::SHN_ABS
&& to->value() == sym.get_st_value())
return;
@@ -360,8 +350,8 @@ Symbol_table::resolve(Sized_symbol<size>* to,
&& (sym.get_st_bind() == elfcpp::STB_WEAK
|| to->binding() == elfcpp::STB_WEAK)
&& orig_st_shndx != elfcpp::SHN_UNDEF
+ && to->shndx(&to_is_ordinary) != elfcpp::SHN_UNDEF
&& to_is_ordinary
- && to_shndx != elfcpp::SHN_UNDEF
&& sym.get_st_size() != 0 // Ignore weird 0-sized symbols.
&& to->symsize() != 0
&& (sym.get_st_type() != to->type()
@@ -372,7 +362,7 @@ Symbol_table::resolve(Sized_symbol<size>* to,
{
Symbol_location fromloc
= { object, orig_st_shndx, static_cast<off_t>(sym.get_st_value()) };
- Symbol_location toloc = { to->object(), to_shndx,
+ Symbol_location toloc = { to->object(), to->shndx(&to_is_ordinary),
static_cast<off_t>(to->value()) };
this->candidate_odr_violations_[to->name()].insert(fromloc);
this->candidate_odr_violations_[to->name()].insert(toloc);

View File

@ -1,4 +1,4 @@
{ stdenv, hostPlatform, fetchurl, perl, gettext, LocaleGettext, makeWrapper }: { stdenv, hostPlatform, fetchurl, perl, gettext, LocaleGettext }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "help2man-1.47.6"; name = "help2man-1.47.6";
@ -8,20 +8,28 @@ stdenv.mkDerivation rec {
sha256 = "0vz4dlrvy4vc6l7w0a7n668pfa0rdm73wr2gar58wqranyah46yr"; sha256 = "0vz4dlrvy4vc6l7w0a7n668pfa0rdm73wr2gar58wqranyah46yr";
}; };
nativeBuildInputs = [ makeWrapper gettext LocaleGettext ]; nativeBuildInputs = [ gettext LocaleGettext ];
buildInputs = [ perl LocaleGettext ]; buildInputs = [ perl LocaleGettext ];
doCheck = false; # target `check' is missing doCheck = false; # target `check' is missing
patches = if hostPlatform.isCygwin then [ ./1.40.4-cygwin-nls.patch ] else null; patches = if hostPlatform.isCygwin then [ ./1.40.4-cygwin-nls.patch ] else null;
postInstall = # We don't use makeWrapper here because it uses substitutions our
'' wrapProgram "$out/bin/help2man" \ # bootstrap shell can't handle.
--prefix PERL5LIB : "$(echo ${LocaleGettext}/lib/perl*/site_perl)" \ postInstall = ''
${stdenv.lib.optionalString hostPlatform.isCygwin "--prefix PATH : ${gettext}/bin"} gettext_perl="$(echo ${LocaleGettext}/lib/perl*/site_perl)"
mv $out/bin/help2man $out/bin/.help2man-wrapped
cat > $out/bin/help2man <<EOF
#! $SHELL -e
export PERL5LIB=\''${PERL5LIB:+:}$gettext_perl
${stdenv.lib.optionalString hostPlatform.isCygwin
"export PATH=\''${PATH:+:}${gettext}/bin"}
exec -a \$0 $out/bin/.help2man-wrapped "\$@"
EOF
chmod +x $out/bin/help2man
''; '';
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Generate man pages from `--help' output"; description = "Generate man pages from `--help' output";

View File

@ -43,7 +43,11 @@ stdenv.mkDerivation rec {
sha256 = "17ndr6kc7hpv4ih4gygwlcpviqifbkvnk4fbwf4n25kpb991qlpj"; sha256 = "17ndr6kc7hpv4ih4gygwlcpviqifbkvnk4fbwf4n25kpb991qlpj";
}; };
patches = [ ./caps-fix.patch ] patches = [ ./caps-fix.patch (fetchpatch {
name = "glibc-2.27.patch";
url = "https://cgit.freedesktop.org/pulseaudio/pulseaudio/patch/?id=dfb0460fb4743aec047cdf755a660a9ac2d0f3fb";
sha256 = "1bi6rbfdjyl6wn0jql4k18xa4hm5l2lpf1sc5j77f8l6jw956afv";
}) ]
++ stdenv.lib.optional stdenv.hostPlatform.isMusl (fetchpatch { ++ stdenv.lib.optional stdenv.hostPlatform.isMusl (fetchpatch {
name = "padsp-fix.patch"; name = "padsp-fix.patch";
url = "https://git.alpinelinux.org/cgit/aports/plain/testing/pulseaudio/0001-padsp-Make-it-compile-on-musl.patch?id=167be02bf4618a90328e2b234f6a63a5dc05f244"; url = "https://git.alpinelinux.org/cgit/aports/plain/testing/pulseaudio/0001-padsp-Make-it-compile-on-musl.patch?id=167be02bf4618a90328e2b234f6a63a5dc05f244";

View File

@ -271,6 +271,11 @@ in
}; };
libxshmfence = attrs: attrs // { libxshmfence = attrs: attrs // {
name = "libxshmfence-1.3";
src = args.fetchurl {
url = mirror://xorg/individual/lib/libxshmfence-1.3.tar.bz2;
sha256 = "1ir0j92mnd1nk37mrv9bz5swnccqldicgszvfsh62jd14q6k115q";
};
outputs = [ "out" "dev" ]; # mainly to avoid propagation outputs = [ "out" "dev" ]; # mainly to avoid propagation
}; };

View File

@ -12,6 +12,11 @@ stdenv.mkDerivation rec {
doCheck = true; doCheck = true;
preCheck = ''
# Tests have a /bin/sh dependency...
patchShebangs tests
'';
# In stdenv-linux, prevent a dependency on bootstrap-tools. # In stdenv-linux, prevent a dependency on bootstrap-tools.
preConfigure = "CONFIG_SHELL=/bin/sh"; preConfigure = "CONFIG_SHELL=/bin/sh";

View File

@ -30,6 +30,7 @@ stdenv.mkDerivation rec {
(gentooPatch "xfsprogs-4.12.0-sharedlibs.patch" "1i081749x91jvlrw84l4a3r081vqcvn6myqhnqbnfcfhd64h12bq") (gentooPatch "xfsprogs-4.12.0-sharedlibs.patch" "1i081749x91jvlrw84l4a3r081vqcvn6myqhnqbnfcfhd64h12bq")
(gentooPatch "xfsprogs-4.7.0-libxcmd-link.patch" "1lvy1ajzml39a631a7jqficnzsd40bzkca7hkxv1ybiqyp8sf55s") (gentooPatch "xfsprogs-4.7.0-libxcmd-link.patch" "1lvy1ajzml39a631a7jqficnzsd40bzkca7hkxv1ybiqyp8sf55s")
(gentooPatch "xfsprogs-4.9.0-underlinking.patch" "1r7l8jphspy14i43zbfnjrnyrdm4cpgyfchblascxylmans0gci7") (gentooPatch "xfsprogs-4.9.0-underlinking.patch" "1r7l8jphspy14i43zbfnjrnyrdm4cpgyfchblascxylmans0gci7")
./glibc-2.27.patch
]; ];
preConfigure = '' preConfigure = ''

View File

@ -0,0 +1,37 @@
diff -Naur a/io/copy_file_range.c b/io/copy_file_range.c
--- a/io/copy_file_range.c 1969-12-31 19:00:01.000000000 -0500
+++ b/io/copy_file_range.c 2018-02-26 07:39:21.533535821 -0500
@@ -42,24 +42,6 @@
"));
}
-static loff_t
-copy_file_range(int fd, loff_t *src, loff_t *dst, size_t len)
-{
- loff_t ret;
-
- do {
- ret = syscall(__NR_copy_file_range, fd, src, file->fd, dst, len, 0);
- if (ret == -1) {
- perror("copy_range");
- return errno;
- } else if (ret == 0)
- break;
- len -= ret;
- } while (len > 0);
-
- return 0;
-}
-
static off64_t
copy_src_filesize(int fd)
{
@@ -130,7 +112,7 @@
copy_dst_truncate();
}
- ret = copy_file_range(fd, &src, &dst, len);
+ ret = copy_file_range(fd, &src, file->fd, &dst, len, 0);
close(fd);
return ret;
}

View File

@ -7462,8 +7462,6 @@ with pkgs;
binutils = binutils =
if targetPlatform.isDarwin if targetPlatform.isDarwin
then darwin.binutils then darwin.binutils
else if targetPlatform.isRiscV
then binutils_2_30
else binutils-raw; else binutils-raw;
binutils-unwrapped = callPackage ../development/tools/misc/binutils { binutils-unwrapped = callPackage ../development/tools/misc/binutils {
@ -7474,15 +7472,6 @@ with pkgs;
libc = if targetPlatform != hostPlatform then libcCross else stdenv.cc.libc; libc = if targetPlatform != hostPlatform then libcCross else stdenv.cc.libc;
bintools = binutils-unwrapped; bintools = binutils-unwrapped;
}; };
binutils-unwrapped_2_30 = callPackage ../development/tools/misc/binutils/2.30.nix {
# FHS sys dirs presumably only have stuff for the build platform
noSysDirs = (targetPlatform != buildPlatform) || noSysDirs;
};
binutils-raw_2_30 = wrapBintoolsWith {
libc = if targetPlatform != hostPlatform then libcCross else stdenv.cc.libc;
bintools = binutils-unwrapped_2_30;
};
binutils_2_30 = binutils-raw_2_30;
binutils_nogold = lowPrio (binutils-raw.override { binutils_nogold = lowPrio (binutils-raw.override {
bintools = binutils-raw.bintools.override { bintools = binutils-raw.bintools.override {
@ -8926,13 +8915,9 @@ with pkgs;
glfw2 = callPackage ../development/libraries/glfw/2.x.nix { }; glfw2 = callPackage ../development/libraries/glfw/2.x.nix { };
glfw3 = callPackage ../development/libraries/glfw/3.x.nix { }; glfw3 = callPackage ../development/libraries/glfw/3.x.nix { };
glibc_2_26 = callPackage ../development/libraries/glibc { glibc = callPackage ../development/libraries/glibc {
installLocales = config.glibc.locales or false; installLocales = config.glibc.locales or false;
}; };
glibc_2_27 = callPackage ../development/libraries/glibc/2.27.nix {
installLocales = config.glibc.locales or false;
};
glibc = if hostPlatform.isRiscV then glibc_2_27 else glibc_2_26;
glibc_memusage = callPackage ../development/libraries/glibc { glibc_memusage = callPackage ../development/libraries/glibc {
installLocales = false; installLocales = false;
@ -8940,11 +8925,7 @@ with pkgs;
}; };
# Being redundant to avoid cycles on boot. TODO: find a better way # Being redundant to avoid cycles on boot. TODO: find a better way
glibcCross = let glibcCross = callPackage ../development/libraries/glibc {
expr = if hostPlatform.isRiscV
then ../development/libraries/glibc/2.27.nix
else ../development/libraries/glibc;
in callPackage expr {
installLocales = config.glibc.locales or false; installLocales = config.glibc.locales or false;
stdenv = crossLibcStdenv; stdenv = crossLibcStdenv;
}; };