This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.17-913-g106bd84


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  106bd84baa4b0b610926b0979970365e26bc0f1f (commit)
      from  19a601f7b2fc69201c296f0720459a32dda5f4c3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=106bd84baa4b0b610926b0979970365e26bc0f1f

commit 106bd84baa4b0b610926b0979970365e26bc0f1f
Author: Andreas Schwab <schwab@linux-m68k.org>
Date:   Sat Jul 20 22:37:42 2013 +0200

    m68k: use _dl_static_init to set GLR0(dl_pagesize)

diff --git a/ports/ChangeLog.m68k b/ports/ChangeLog.m68k
index 793dad9..2666d38 100644
--- a/ports/ChangeLog.m68k
+++ b/ports/ChangeLog.m68k
@@ -1,3 +1,13 @@
+2013-07-20  Andreas Schwab  <schwab@linux-m68k.org>
+
+	* sysdeps/unix/sysv/linux/m68k/dl-static.c: New file.
+	* sysdeps/unix/sysv/linux/m68k/ldsodefs.h: New file.
+	* sysdeps/unix/sysv/linux/m68k/Makefile (sysdep-dl-routines)
+	(sysdep_routines, sysdep-rtld-routines) [$(subdir) = elf]: Add
+	dl-static.
+	* sysdeps/unix/sysv/linux/m68k/Versions (ld: GLIBC_PRIVATE): Add
+	_dl_var_init.
+
 2013-07-03  Andreas Schwab  <schwab@linux-m68k.org>
 
 	* sysdeps/m68k/m680x0/fpu/libm-test-ulps: Update.
diff --git a/ports/sysdeps/unix/sysv/linux/m68k/Makefile b/ports/sysdeps/unix/sysv/linux/m68k/Makefile
index 97d9584..de27824 100644
--- a/ports/sysdeps/unix/sysv/linux/m68k/Makefile
+++ b/ports/sysdeps/unix/sysv/linux/m68k/Makefile
@@ -12,8 +12,9 @@ sysdep_headers += sys/reg.h
 endif
 
 ifeq ($(subdir),elf)
-sysdep_routines += dl-vdso libc-m68k-vdso
-sysdep-rtld-routines += m68k-vdso
+sysdep-dl-routines += dl-static
+sysdep_routines += dl-vdso libc-m68k-vdso dl-static
+sysdep-rtld-routines += m68k-vdso dl-static
 sysdep-others += lddlibc4
 install-bin += lddlibc4
 endif
diff --git a/ports/sysdeps/unix/sysv/linux/m68k/Versions b/ports/sysdeps/unix/sysv/linux/m68k/Versions
index 8a941f8..7ecc96e 100644
--- a/ports/sysdeps/unix/sysv/linux/m68k/Versions
+++ b/ports/sysdeps/unix/sysv/linux/m68k/Versions
@@ -1,3 +1,8 @@
+ld {
+  GLIBC_PRIVATE {
+    _dl_var_init;
+  }
+}
 libc {
   GLIBC_2.0 {
     # Exception handling support functions from libgcc
diff --git a/ports/sysdeps/unix/sysv/linux/m68k/dl-static.c b/ports/sysdeps/unix/sysv/linux/m68k/dl-static.c
new file mode 100644
index 0000000..3c99e40
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/m68k/dl-static.c
@@ -0,0 +1,84 @@
+/* Variable initialization.  M68K version.
+   Copyright (C) 2013 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <ldsodefs.h>
+
+#ifdef SHARED
+
+void
+_dl_var_init (void *array[])
+{
+  /* It has to match "variables" below. */
+  enum
+    {
+      DL_PAGESIZE = 0,
+    };
+
+  GLRO(dl_pagesize) = *(size_t *) array[DL_PAGESIZE];
+}
+
+#else
+
+static void *variables[] =
+{
+  &GLRO(dl_pagesize)
+};
+
+static void
+_dl_unprotect_relro (struct link_map *l)
+{
+  ElfW(Addr) start = ((l->l_addr + l->l_relro_addr)
+		      & ~(GLRO(dl_pagesize) - 1));
+  ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size)
+		    & ~(GLRO(dl_pagesize) - 1));
+
+  if (start != end)
+    __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE);
+}
+
+void
+_dl_static_init (struct link_map *l)
+{
+  struct link_map *rtld_map = l;
+  struct r_scope_elem **scope;
+  const ElfW(Sym) *ref = NULL;
+  lookup_t loadbase;
+  void (*f) (void *[]);
+  size_t i;
+
+  loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope,
+				  NULL, 0, 1, NULL);
+
+  for (scope = l->l_local_scope; *scope != NULL; scope++)
+    for (i = 0; i < (*scope)->r_nlist; i++)
+      if ((*scope)->r_list[i] == loadbase)
+	{
+	  rtld_map = (*scope)->r_list[i];
+	  break;
+	}
+
+  if (ref != NULL)
+    {
+      f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref);
+      _dl_unprotect_relro (rtld_map);
+      f (variables);
+      _dl_protect_relro (rtld_map);
+    }
+}
+
+#endif
diff --git a/ports/sysdeps/unix/sysv/linux/m68k/ldsodefs.h b/ports/sysdeps/unix/sysv/linux/m68k/ldsodefs.h
new file mode 100644
index 0000000..18b22e8
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/m68k/ldsodefs.h
@@ -0,0 +1,32 @@
+/* Run-time dynamic linker data structures for loaded ELF shared objects. M68K.
+   Copyright (C) 2013 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#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 */

-----------------------------------------------------------------------

Summary of changes:
 ports/ChangeLog.m68k                               |   10 ++++++++++
 ports/sysdeps/unix/sysv/linux/m68k/Makefile        |    5 +++--
 ports/sysdeps/unix/sysv/linux/m68k/Versions        |    5 +++++
 .../unix/sysv/linux/{mips => m68k}/dl-static.c     |   10 +++++-----
 .../unix/sysv/linux/{ia64 => m68k}/ldsodefs.h      |    4 ++--
 5 files changed, 25 insertions(+), 9 deletions(-)
 copy ports/sysdeps/unix/sysv/linux/{mips => m68k}/dl-static.c (89%)
 copy ports/sysdeps/unix/sysv/linux/{ia64 => m68k}/ldsodefs.h (93%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]