[arch-commits] Commit in glibc/trunk (4 files)

Allan McRae allan at archlinux.org
Wed Oct 6 23:19:51 UTC 2010


    Date: Wednesday, October 6, 2010 @ 19:19:50
  Author: allan
Revision: 94389

upgpkg: glibc 2.12.1-2
new upstream snapshot, patch for compatibility for not so compatible i686s..., fix static linked files error, make-3.82 compatibility patch

Added:
  glibc/trunk/glibc-2.12.1-but-I-am-an-i686.patch
  glibc/trunk/glibc-2.12.1-make-3.82-compatibility.patch
  glibc/trunk/glibc-2.12.1-static-shared-getpagesize.patch
Modified:
  glibc/trunk/PKGBUILD

----------------------------------------------+
 PKGBUILD                                     |   24 +
 glibc-2.12.1-but-I-am-an-i686.patch          |   22 +
 glibc-2.12.1-make-3.82-compatibility.patch   |   29 ++
 glibc-2.12.1-static-shared-getpagesize.patch |  338 +++++++++++++++++++++++++
 4 files changed, 409 insertions(+), 4 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2010-10-06 22:31:34 UTC (rev 94388)
+++ PKGBUILD	2010-10-06 23:19:50 UTC (rev 94389)
@@ -7,8 +7,8 @@
 
 pkgname=glibc
 pkgver=2.12.1
-pkgrel=1
-_glibcdate=20100811
+pkgrel=2
+_glibcdate=20101007
 pkgdesc="GNU C Library"
 arch=('i686' 'x86_64')
 url="http://www.gnu.org/software/libc"
@@ -25,13 +25,19 @@
         glibc-2.10-dont-build-timezone.patch
         glibc-2.10-bz4781.patch
         glibc-__i686.patch
+        glibc-2.12.1-make-3.82-compatibility.patch
+        glibc-2.12.1-static-shared-getpagesize.patch
+        glibc-2.12.1-but-I-am-an-i686.patch
         nscd
         locale.gen.txt
         locale-gen)    
-md5sums=('3f0d64de5a9fc5614d8acc0f1d5846ed'
+md5sums=('17189b123cebeb71cf7b7e7416b601a6'
          '4dadb9203b69a3210d53514bb46f41c3'
          '0c5540efc51c0b93996c51b57a8540ae'
          '40cd342e21f71f5e49e32622b25acc52'
+         '1deecaa78c0909f7175732da2af796b5'
+         '3215ed6996e7ecdd35bc105937c6e0dc'
+         'de17165e3fa721c4e056dacfc9ee1e52'
          'b587ee3a70c9b3713099295609afde49'
          '07ac979b6ab5eeb778d55f041529d623'
          '476e9113489f93b348b21e144b6a8fcf')
@@ -57,6 +63,16 @@
   # http://sourceware.org/ml/libc-alpha/2009-07/msg00072.html
   patch -Np1 -i ${srcdir}/glibc-__i686.patch
 
+  # http://sourceware.org/git/?p=glibc.git;a=patch;h=32cf4069
+  patch -Np1 -i ${srcdir}/glibc-2.12.1-make-3.82-compatibility.patch
+
+  # http://sourceware.org/bugzilla/show_bug.cgi?id=11929
+  patch -Np1 -i ${srcdir}/glibc-2.12.1-static-shared-getpagesize.patch
+  
+  # fedora "fix" for excess linker optimization on i686
+  # proper fix will be in binutils-2.21
+  patch -Np1 -i ${srcdir}/glibc-2.12.1-but-I-am-an-i686.patch
+
   install -dm755 ${pkgdir}/etc
   touch ${pkgdir}/etc/ld.so.conf
 
@@ -108,7 +124,7 @@
 
   if [[ ${CARCH} = "x86_64" ]]; then
     # fix for the linker
-    sed -i '/RTLDLIST/s%/ld-linux.so.2 /lib64%%' ${pkgdir}/usr/bin/ldd
+    sed -i '/RTLDLIST/s%lib64%lib%' ${pkgdir}/usr/bin/ldd
     #Comply with multilib binaries, they look for the linker in /lib64
     mkdir ${pkgdir}/lib64
     cd ${pkgdir}/lib64

Added: glibc-2.12.1-but-I-am-an-i686.patch
===================================================================
--- glibc-2.12.1-but-I-am-an-i686.patch	                        (rev 0)
+++ glibc-2.12.1-but-I-am-an-i686.patch	2010-10-06 23:19:50 UTC (rev 94389)
@@ -0,0 +1,22 @@
+--- glibc-2.12-62-gb08c89d/sysdeps/i386/i686/Makefile
++++ glibc-2.12.90-6/sysdeps/i386/i686/Makefile
+@@ -9,19 +9,3 @@ stack-align-test-flags += -msse
+ ifeq ($(subdir),string)
+ sysdep_routines += cacheinfo
+ endif
+-
+-ifeq (yes,$(config-asflags-i686))
+-CFLAGS-.o += -Wa,-mtune=i686
+-CFLAGS-.os += -Wa,-mtune=i686
+-CFLAGS-.op += -Wa,-mtune=i686
+-CFLAGS-.og += -Wa,-mtune=i686
+-CFLAGS-.ob += -Wa,-mtune=i686
+-CFLAGS-.oS += -Wa,-mtune=i686
+-
+-ASFLAGS-.o += -Wa,-mtune=i686
+-ASFLAGS-.os += -Wa,-mtune=i686
+-ASFLAGS-.op += -Wa,-mtune=i686
+-ASFLAGS-.og += -Wa,-mtune=i686
+-ASFLAGS-.ob += -Wa,-mtune=i686
+-ASFLAGS-.oS += -Wa,-mtune=i686
+-endif

Added: glibc-2.12.1-make-3.82-compatibility.patch
===================================================================
--- glibc-2.12.1-make-3.82-compatibility.patch	                        (rev 0)
+++ glibc-2.12.1-make-3.82-compatibility.patch	2010-10-06 23:19:50 UTC (rev 94389)
@@ -0,0 +1,29 @@
+From 32cf40699346d37fabfa887bbd95e95004799ae1 Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab at redhat.com>
+Date: Mon, 6 Sep 2010 14:55:59 +0200
+Subject: [PATCH 1/1] Don't mix pattern rules with normal rules
+
+---
+ ChangeLog       |    4 ++++
+ manual/Makefile |    5 ++++-
+ 2 files changed, 8 insertions(+), 1 deletions(-)
+
+diff --git a/manual/Makefile b/manual/Makefile
+index c5866eb..b1f5fa7 100644
+--- a/manual/Makefile
++++ b/manual/Makefile
+@@ -232,7 +232,10 @@ ifdef objpfx
+ .PHONY: stubs
+ stubs: $(objpfx)stubs
+ endif
+-$(objpfx)stubs ../po/manual.pot $(objpfx)stamp%:
++$(objpfx)stubs ../po/manual.pot:
++	$(make-target-directory)
++	touch $@
++$(objpfx)stamp%:
+ 	$(make-target-directory)
+ 	touch $@
+ 
+-- 
+1.7.2
+

Added: glibc-2.12.1-static-shared-getpagesize.patch
===================================================================
--- glibc-2.12.1-static-shared-getpagesize.patch	                        (rev 0)
+++ glibc-2.12.1-static-shared-getpagesize.patch	2010-10-06 23:19:50 UTC (rev 94389)
@@ -0,0 +1,338 @@
+http://thread.gmane.org/gmane.comp.lib.glibc.user/579
+http://sources.redhat.com/bugzilla/show_bug.cgi?id=11929
+http://bugs.gentoo.org/332927
+
+a simple statically linked app fails with glibc-2.12:
+	$ cat test.c
+	main(){getpwnam("root");}
+	$ gcc -static test.c
+	$ ./a.out
+	a.out: ../sysdeps/unix/sysv/linux/getpagesize.c:32: __getpagesize:
+		Assertion `_rtld_global_ro._dl_pagesize != 0' failed.
+	Aborted (core dumped)
+
+the crux of the matter seems to be the fact that static apps with
+glibc will dynamically load nss shared libraries when necessary.  the
+static code will initialize GLRO(dl_pagesize) just fine from the
+kernel auxv, but this being the static code paths, GLRO(dl_pagesize)
+expands into _dl_pagesize.  when the nss shared libraries are loaded
+up, the ldso is also mapped in, but it doesnt process the kernel auxv
+(_dl_sysdep_start() is not called).  so the shared library
+GLRO(dl_pagesize) expands into _rtld_global_ro._dl_pagesize and that
+field stays at 0.
+
+then when the nss shared libs process the request and gets to the
+standard "passwd" database, it calls the shared lib versions of
+malloc/stdio which rely on the __getpagesize() function.  but this
+being in the shared library, it reads the shared GLRO(dl_pagesize)
+which is 0, and the assert() is triggered.
+
+i think running nscd makes things work because its nss module that
+talks to the nscd daemon doesnt call any routines that implicitly rely
+on __getpagesize().
+
+this all started happening after this commit:
+From 8f4a5048eea6536ee85c0f2670adbb97d71e427d Mon Sep 17 00:00:00 2001
+From: Ulrich Drepper <drepper at redhat.com>
+Date: Sat, 27 Mar 2010 06:19:50 -0700
+Subject: [PATCH] Optimize __getpagesize a bit.
+
+if we look at the ia64 port, we see that it has had similar logic for
+its __getpagesize function forever.  so take its DL_STATIC_INIT code
+and move it up to the common linux tree.
+
+2010-08-18  Mike Frysinger  <vapier at gentoo.org>
+
+	* sysdeps/unix/sysv/linux/ia64/Makefile: Move dl-static addition to
+	sysdep vars for subdir==elf to ...
+	* sysdeps/unix/sysv/linux/Makefile: ... here.
+	* sysdeps/unix/sysv/linux/ia64/dl-static.c: Move file to ...
+	* sysdeps/unix/sysv/linux/dl-static.c: ... here.
+	* sysdeps/unix/sysv/linux/ia64/ldsodefs.h: Delete, and move the
+	DL_STATIC_INIT defines to ...
+	* sysdeps/unix/sysv/linux/ldsodefs.h: ... here.
+	* sysdeps/unix/sysv/linux/ia64/getpagesize.c: Delete.
+
+diff --git a/sysdeps/unix/sysv/linux/ia64/Makefile b/sysdeps/unix/sysv/linux/ia64/Makefile
+index d9a35a7..3bb1ce0 100644
+--- a/sysdeps/unix/sysv/linux/ia64/Makefile
++++ b/sysdeps/unix/sysv/linux/ia64/Makefile
+@@ -12,12 +12,6 @@ sysdep_headers += sys/io.h
+ sysdep_routines += ioperm clone2
+ endif
+ 
+-ifeq ($(subdir),elf)
+-sysdep-dl-routines += dl-static
+-sysdep_routines += $(sysdep-dl-routines)
+-sysdep-rtld-routines += $(sysdep-dl-routines)
+-endif
+-
+ ifeq ($(subdir),rt)
+ librt-routines += rt-sysdep
+ endif
+diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
+index 4302bd3..37c56a3 100644
+--- a/sysdeps/unix/sysv/linux/Makefile
++++ b/sysdeps/unix/sysv/linux/Makefile
+@@ -147,7 +147,9 @@ sysdep_routines += xstatconv internal_statvfs internal_statvfs64 \
+ endif
+ 
+ ifeq ($(subdir),elf)
+-sysdep-rtld-routines += dl-brk dl-sbrk
++sysdep-dl-routines += dl-static
++sysdep_routines += dl-static
++sysdep-rtld-routines += dl-brk dl-sbrk dl-static
+ 
+ CPPFLAGS-lddlibc4 += -DNOT_IN_libc
+ endif
+diff --git a/sysdeps/unix/sysv/linux/ia64/dl-static.c b/sysdeps/unix/sysv/linux/ia64/dl-static.c
+deleted file mode 100644
+index 4efc077..0000000
+--- a/sysdeps/unix/sysv/linux/ia64/dl-static.c
++++ /dev/null
+@@ -1,69 +0,0 @@
+-/* Variable initialization.  IA-64 version.
+-   Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#include <ldsodefs.h>
+-
+-#ifdef SHARED
+-
+-void
+-_dl_var_init (void *array[])
+-{
+-  /* It has to match "variables" below. */
+-  enum
+-    {
+-      DL_PAGESIZE = 0,
+-      DL_CLKTCK
+-    };
+-
+-  GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]);
+-  GLRO(dl_clktck) = *((int *) array[DL_CLKTCK]);
+-}
+-
+-#else
+-#include <bits/libc-lock.h>
+-
+-__libc_lock_define_initialized_recursive (static, _dl_static_lock)
+-
+-static void *variables[] =
+-{
+-  &GLRO(dl_pagesize),
+-  &GLRO(dl_clktck)
+-};
+-
+-void
+-_dl_static_init (struct link_map *map)
+-{
+-  const ElfW(Sym) *ref = NULL;
+-  lookup_t loadbase;
+-  void (*f) (void *[]);
+-
+-  __libc_lock_lock_recursive (_dl_static_lock);
+-
+-  loadbase = _dl_lookup_symbol_x ("_dl_var_init", map, &ref,
+-				  map->l_local_scope, NULL, 0, 1, NULL);
+-  if (ref != NULL)
+-    {
+-      f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref);
+-      f (variables);
+-    }
+-
+-  __libc_lock_unlock_recursive (_dl_static_lock);
+-}
+-
+-#endif
+diff --git a/sysdeps/unix/sysv/linux/dl-static.c b/sysdeps/unix/sysv/linux/dl-static.c
+new file mode 100644
+index 0000000..fa70811
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/dl-static.c
+@@ -0,0 +1,69 @@
++/* Variable initialization.
++   Copyright (C) 2001, 2002, 2003, 2004, 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <ldsodefs.h>
++
++#ifdef SHARED
++
++void
++_dl_var_init (void *array[])
++{
++  /* It has to match "variables" below. */
++  enum
++    {
++      DL_PAGESIZE = 0,
++      DL_CLKTCK
++    };
++
++  GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]);
++  GLRO(dl_clktck) = *((int *) array[DL_CLKTCK]);
++}
++
++#else
++#include <bits/libc-lock.h>
++
++__libc_lock_define_initialized_recursive (static, _dl_static_lock)
++
++static void *variables[] =
++{
++  &GLRO(dl_pagesize),
++  &GLRO(dl_clktck)
++};
++
++void
++_dl_static_init (struct link_map *map)
++{
++  const ElfW(Sym) *ref = NULL;
++  lookup_t loadbase;
++  void (*f) (void *[]);
++
++  __libc_lock_lock_recursive (_dl_static_lock);
++
++  loadbase = _dl_lookup_symbol_x ("_dl_var_init", map, &ref,
++				  map->l_local_scope, NULL, 0, 1, NULL);
++  if (ref != NULL)
++    {
++      f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref);
++      f (variables);
++    }
++
++  __libc_lock_unlock_recursive (_dl_static_lock);
++}
++
++#endif
+diff --git a/sysdeps/unix/sysv/linux/ia64/ldsodefs.h b/sysdeps/unix/sysv/linux/ia64/ldsodefs.h
+deleted file mode 100644
+index 31af624..0000000
+--- a/sysdeps/unix/sysv/linux/ia64/ldsodefs.h
++++ /dev/null
+@@ -1,33 +0,0 @@
+-/* Run-time dynamic linker data structures for loaded ELF shared objects. IA64.
+-   Copyright (C) 2001 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#ifndef	_LDSODEFS_H
+-
+-/* Get the real definitions.  */
+-#include_next <ldsodefs.h>
+-
+-/* Now define our stuff.  */
+-
+-/* We need special support to initialize DSO loaded for statically linked
+-   binaries.  */
+-extern void _dl_static_init (struct link_map *map);
+-#undef DL_STATIC_INIT
+-#define DL_STATIC_INIT(map) _dl_static_init (map)
+-
+-#endif /* ldsodefs.h */
+diff --git a/sysdeps/unix/sysv/linux/ldsodefs.h b/sysdeps/unix/sysv/linux/ldsodefs.h
+index 5d5b1b4..ecb5d4f 100644
+--- a/sysdeps/unix/sysv/linux/ldsodefs.h
++++ b/sysdeps/unix/sysv/linux/ldsodefs.h
+@@ -36,6 +36,12 @@ extern void _dl_aux_init (ElfW(auxv_t) *av) internal_function;
+ /* Initialization which is normally done by the dynamic linker.  */
+ extern void _dl_non_dynamic_init (void) internal_function;
+ 
++/* We need special support to initialize DSO loaded for statically linked
++   binaries.  */
++extern void _dl_static_init (struct link_map *map);
++#undef DL_STATIC_INIT
++#define DL_STATIC_INIT(map) _dl_static_init (map)
++
+ /* We can assume that the kernel always provides the AT_UID, AT_EUID,
+    AT_GID, and AT_EGID values in the auxiliary vector from 2.4.0 or so on.  */
+ #if __ASSUME_AT_XID
+diff --git a/sysdeps/unix/sysv/linux/ia64/getpagesize.c b/sysdeps/unix/sysv/linux/ia64/getpagesize.c
+deleted file mode 100644
+index 1155dfd..0000000
+--- a/sysdeps/unix/sysv/linux/ia64/getpagesize.c
++++ /dev/null
+@@ -1,39 +0,0 @@
+-/* Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#include <assert.h>
+-#include <unistd.h>
+-#include <sys/param.h>
+-
+-#include <ldsodefs.h>
+-#include <sysdep.h>
+-#include <sys/syscall.h>
+-
+-/* Return the system page size.  The return value will depend on how
+-   the kernel is configured.  A program must use this call to
+-   determine the page size to ensure proper alignment for calls such
+-   as mmap and friends.  --davidm 99/11/30 */
+-
+-int
+-__getpagesize ()
+-{
+-  assert (GLRO(dl_pagesize) != 0);
+-  return GLRO(dl_pagesize);
+-}
+-libc_hidden_def (__getpagesize)
+-weak_alias (__getpagesize, getpagesize)




More information about the arch-commits mailing list