Merge branch 'binutils-2.30' into staging
This commit is contained in:
commit
d0a8866622
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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" ];
|
||||||
|
@ -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";
|
||||||
|
@ -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";
|
|
||||||
}
|
|
@ -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}
|
|
||||||
'';
|
|
||||||
})
|
|
@ -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
|
|
||||||
# http://comments.gmane.org/gmane.linux.lfs.support/31227
|
|
||||||
''
|
''
|
||||||
|
# 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
|
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
|
||||||
|
@ -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
|
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 ];
|
||||||
|
@ -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;
|
|
||||||
};
|
|
||||||
}
|
|
@ -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" ];
|
||||||
|
@ -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);
|
@ -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,19 +8,27 @@ 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";
|
||||||
|
@ -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";
|
||||||
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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 = ''
|
||||||
|
37
pkgs/tools/filesystems/xfsprogs/glibc-2.27.patch
Normal file
37
pkgs/tools/filesystems/xfsprogs/glibc-2.27.patch
Normal 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;
|
||||||
|
}
|
@ -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;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user