]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Make sure GLRO(dl_pagesize) is initialized properly on all archs
authorMike Frysinger <vapier@gentoo.org>
Sun, 22 Aug 2010 15:32:46 +0000 (17:32 +0200)
committerPetr Baudis <pasky@suse.cz>
Tue, 16 Nov 2010 03:15:35 +0000 (04:15 +0100)
After a recent change to __getpagesize(), GLRO(dl_pagesize) is required
to be set.  But that is only done at app init, and shared libraries
dlopened at runtime by static apps dont have their GLRO() state
initialized from the linux auxvec.

ia64/mips have long had similar behavior with their __getpagesize(), but
they have a DL_STATIC_INIT hook to sync some of the static GLRO() fields
to the dynamic GLRO() fields.  Now that common linux code requires
GLRO(dl_pagesize) to be set, common linux code now needs that
DL_STATIC_INIT hook.

This patch takes the ia64 logic and promotes it to common code.

ChangeLog
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/dl-static.c [moved from sysdeps/unix/sysv/linux/ia64/dl-static.c with 93% similarity]
sysdeps/unix/sysv/linux/ia64/Makefile
sysdeps/unix/sysv/linux/ia64/getpagesize.c [deleted file]
sysdeps/unix/sysv/linux/ia64/ldsodefs.h [deleted file]
sysdeps/unix/sysv/linux/ldsodefs.h

index 9f0a7a94c3166a4fa63fec4f643dc9f758622a44..1bbbcebacbb10af36cc1fef7108715402286c88e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2010-08-18  Mike Frysinger  <vapier@gentoo.org>
+
+       [BZ #11929]
+       * 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.
+
 2006-11-30  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        [BZ #6693]
index 4302bd392ce6946430e52b8a6c41e8b47239f638..37c56a3280d82294336cfc28a25411d6d88ade92 100644 (file)
@@ -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
similarity index 93%
rename from sysdeps/unix/sysv/linux/ia64/dl-static.c
rename to sysdeps/unix/sysv/linux/dl-static.c
index 4efc07703281f3640efa93fedf21790a77f0534d..fa70811230b4396e9aacf509f643e9c1e667e8c1 100644 (file)
@@ -1,5 +1,5 @@
-/* Variable initialization.  IA-64 version.
-   Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+/* 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
index d9a35a7c673f5db007e83ea714d38e8f61656dcf..3bb1ce08936c4d8343b06cfb39fdb5aa5b97b0f8 100644 (file)
@@ -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/ia64/getpagesize.c b/sysdeps/unix/sysv/linux/ia64/getpagesize.c
deleted file mode 100644 (file)
index 1155dfd..0000000
+++ /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)
diff --git a/sysdeps/unix/sysv/linux/ia64/ldsodefs.h b/sysdeps/unix/sysv/linux/ia64/ldsodefs.h
deleted file mode 100644 (file)
index 31af624..0000000
+++ /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 */
index 5d5b1b4c06dee5daf1c34b2e223491518cc7f82f..ecb5d4fb58134ddbad078decb620a1547b29d7fe 100644 (file)
@@ -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