3
0
Fork 0
forked from mirrors/nixpkgs

* Glibc updated to 2.3.3 (which requires some patches for gcc 3.4 compatibility).

svn path=/nixpkgs/trunk/; revision=1441
This commit is contained in:
Eelco Dolstra 2004-09-18 17:11:16 +00:00
parent 54c7304dbe
commit ca6d6323ad
4 changed files with 181 additions and 15 deletions

View file

@ -7,6 +7,7 @@ export NIX_NO_SELF_RPATH=1
postUnpack() {
cd $sourceRoot
unpackFile $linuxthreadsSrc
rm -rf nptl
cd ..
}
@ -17,15 +18,23 @@ preConfigure() {
mkdir ../build
cd ../build
configureScript=../$sourceRoot/configure
# `--with-tls --without-__thread' is required when for
# linuxthreads. See
# http://sources.redhat.com/bugzilla/show_bug.cgi?id=317. Be sure
# to read Drepper's comment for another classic example of glibc's
# release management strategy.
configureFlags="--enable-add-ons --disable-profile \
--with-headers=$kernelHeaders/include"
--with-headers=$kernelHeaders/include \
--with-tls --without-__thread"
}
preConfigure=preConfigure
postInstall() {
make localedata/install-locales
if test -n "$installLocales"; then
make localedata/install-locales
fi
rm $out/etc/ld.so.cache
(cd $out/include && ln -s $kernelHeaders/include/* .) || exit 1
# `glibcbug' causes a retained dependency on the C compiler.

View file

@ -1,24 +1,38 @@
{stdenv, fetchurl, kernelHeaders, patch}:
assert patch != null;
{stdenv, fetchurl, kernelHeaders, installLocales ? true}:
stdenv.mkDerivation {
name = "glibc-2.3.2";
name = "glibc-2.3.3";
builder = ./builder.sh;
src = fetchurl {
url = ftp://ftp.nl.net/pub/gnu/glibc/glibc-2.3.2.tar.bz2;
md5 = "ede969aad568f48083e413384f20753c";
url = http://ftp.gnu.org/pub/gnu/glibc/glibc-2.3.3.tar.bz2;
md5 = "e825807b98042f807799ccc9dd96d31b";
};
linuxthreadsSrc = fetchurl {
url = ftp://ftp.nl.net/pub/gnu/glibc/glibc-linuxthreads-2.3.2.tar.bz2;
md5 = "894b8969cfbdf787c73e139782167607";
url = http://ftp.gnu.org/pub/gnu/glibc/glibc-linuxthreads-2.3.3.tar.bz2;
md5 = "8149ea62922e75bd692bc3b92e5e766b";
};
# This is a patch to make glibc compile under GCC 3.3. Presumably
# later releases of glibc won't need this.
patches = [./glibc-2.3.2-sscanf-1.patch];
patches = [
# This patch fixes the bug
# http://sources.redhat.com/bugzilla/show_bug.cgi?id=312. Note
# that this bug was marked as `WORKSFORME' with the comment to
# just use glibc from CVS. This and the unholy Linuxthreads/NPTL
# mess proves that glibc, together with the Linux kernel,
# constitutes an AXIS OF EVIL wrt release management. Patch
# obtained from
# http://www.pengutronix.de/software/ptxdist/patches-cvs/glibc-2.3.2/generic/fixup.patch.
./fixup.patch
buildInputs = [patch];
inherit kernelHeaders;
# Likewise, this fixes the bug reported in
# http://sources.redhat.com/ml/libc-alpha/2003-07/msg00117.html.
# Die, glibc, die.
./no-unit-at-a-time.patch
# This is a patch to make glibc compile under GCC 3.3. Presumably
# later releases of glibc won't need this.
# ./glibc-2.3.2-sscanf-1.patch
];
inherit kernelHeaders installLocales;
}

View file

@ -0,0 +1,74 @@
Fixes
dl-runtime.c:56: error: conflicting types for 'fixup'
../sysdeps/i386/dl-machine.h:158: error: previous declaration of 'fixup' was here
when building with gcc-3.4.0
First hunk:
Define ARCH_FIXUP_ATTRIBUTE and use it in the fixup function declarations.
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/i386/dl-machine.h.diff?r1=1.124&r2=1.125&cvsroot=glibc
Second hunk:
If ARCH_FIXUP_ATTRIBUTE is not defined, provide dummy definition.
Use macro in fixup function definitions.
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/elf/dl-runtime.c.diff?r1=1.64&r2=1.65&cvsroot=glibc
[rediffed against glibc-2.3.2]
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/i386/dl-machine.h,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -r1.124 -r1.125
--- libc/sysdeps/i386/dl-machine.h 2004/03/05 10:14:49 1.124
+++ libc/sysdeps/i386/dl-machine.h 2004/03/09 07:42:29 1.125
@@ -154,11 +154,14 @@
destroys the passed register information. */
/* GKM FIXME: Fix trampoline to pass bounds so we can do
without the `__unbounded' qualifier. */
-static ElfW(Addr) fixup (struct link_map *__unbounded l, ElfW(Word) reloc_offset)
- __attribute__ ((regparm (2), unused));
+#define ARCH_FIXUP_ATTRIBUTE __attribute__ ((regparm (3), unused))
+
+static ElfW(Addr) fixup (struct link_map *__unbounded l,
+ ElfW(Word) reloc_offset)
+ ARCH_FIXUP_ATTRIBUTE;
static ElfW(Addr) profile_fixup (struct link_map *l, ElfW(Word) reloc_offset,
ElfW(Addr) retaddr)
- __attribute__ ((regparm (3), unused));
+ ARCH_FIXUP_ATTRIBUTE;
# endif
/* This code is used in dl-runtime.c to call the `fixup' function
===================================================================
--- /home/dank/downloads/glibc-2.3.2/elf/dl-runtime.c Fri Feb 7 11:41:12 2003
+++ glibc-2.3.2/elf/dl-runtime.c Thu Apr 8 22:24:26 2004
@@ -36,6 +36,12 @@
# define VERSYMIDX(sym) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (sym))
#endif
+/* The fixup functions might have need special attributes. If none
+ are provided define the macro as empty. */
+#ifndef ARCH_FIXUP_ATTRIBUTE
+# define ARCH_FIXUP_ATTRIBUTE
+#endif
+
/* This function is called through a special trampoline from the PLT the
first time each PLT entry is called. We must perform the relocation
@@ -45,7 +51,7 @@
function. */
#ifndef ELF_MACHINE_NO_PLT
-static ElfW(Addr) __attribute_used__
+static ElfW(Addr) __attribute_used__ ARCH_FIXUP_ATTRIBUTE
fixup (
# ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
ELF_MACHINE_RUNTIME_FIXUP_ARGS,
@@ -132,7 +138,7 @@
#if !defined PROF && !defined ELF_MACHINE_NO_PLT && !__BOUNDED_POINTERS__
-static ElfW(Addr) __attribute_used__
+static ElfW(Addr) __attribute_used__ ARCH_FIXUP_ATTRIBUTE
profile_fixup (
#ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
ELF_MACHINE_RUNTIME_FIXUP_ARGS,

View file

@ -0,0 +1,69 @@
diff -rc glibc-orig/csu/Makefile glibc-2.3.3/csu/Makefile
*** glibc-orig/csu/Makefile 2003-09-25 22:29:39.000000000 +0200
--- glibc-2.3.3/csu/Makefile 2004-09-17 11:06:56.000000000 +0200
***************
*** 104,110 ****
$(crtstuff:%=$(objpfx)%.o): %.o: %.S $(objpfx)defs.h
$(compile.S) -g0 $(ASFLAGS-.os) -o $@
! CFLAGS-initfini.s = -g0 -fPIC -fno-inline-functions
vpath initfini.c $(full_config_sysdirs)
--- 104,110 ----
$(crtstuff:%=$(objpfx)%.o): %.o: %.S $(objpfx)defs.h
$(compile.S) -g0 $(ASFLAGS-.os) -o $@
! CFLAGS-initfini.s = -g0 -fPIC -fno-inline-functions -fno-unit-at-a-time
vpath initfini.c $(full_config_sysdirs)
diff -rc glibc-orig/linuxthreads/Makefile glibc-2.3.3/linuxthreads/Makefile
*** glibc-orig/linuxthreads/Makefile 2003-10-02 20:48:48.000000000 +0200
--- glibc-2.3.3/linuxthreads/Makefile 2004-09-17 13:06:20.000000000 +0200
***************
*** 68,74 ****
vpath %.c Examples
tst-cancel-ARGS = "$(objpfx)"
! CFLAGS-tst-cancel.c = -fno-inline -fno-inline-functions
include ../Makeconfig
--- 68,74 ----
vpath %.c Examples
tst-cancel-ARGS = "$(objpfx)"
! CFLAGS-tst-cancel.c = -fno-inline -fno-inline-functions -fno-unit-at-a-time
include ../Makeconfig
***************
*** 101,107 ****
extra-objs += $(crti-objs) $(crtn-objs)
omit-deps += crti crtn
! CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions
endif
librt-tests = ex10 ex11
--- 101,107 ----
extra-objs += $(crti-objs) $(crtn-objs)
omit-deps += crti crtn
! CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions -fno-unit-at-a-time
endif
librt-tests = ex10 ex11
diff -rc glibc-orig/linuxthreads/sysdeps/unix/sysv/linux/x86_64/Makefile glibc-2.3.3/linuxthreads/sysdeps/unix/sysv/linux/x86_64/Makefile
*** glibc-orig/linuxthreads/sysdeps/unix/sysv/linux/x86_64/Makefile 2003-04-12 01:34:02.000000000 +0200
--- glibc-2.3.3/linuxthreads/sysdeps/unix/sysv/linux/x86_64/Makefile 2004-09-17 13:05:43.000000000 +0200
***************
*** 1,3 ****
ifeq ($(subdir),linuxthreads)
! CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions -fno-asynchronous-unwind-tables
endif
--- 1,3 ----
ifeq ($(subdir),linuxthreads)
! CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions -fno-asynchronous-unwind-tables -fno-unit-at-a-time
endif