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.23-543-gdd8f8da


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  dd8f8da99d7a0d93f517a07e150d8abd47386d7c (commit)
      from  b95a6ebb931a8df8604ef3b52eea8f324bc08e92 (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=dd8f8da99d7a0d93f517a07e150d8abd47386d7c

commit dd8f8da99d7a0d93f517a07e150d8abd47386d7c
Author: Stefan Liebler <stli@linux.vnet.ibm.com>
Date:   Wed Jul 6 15:22:35 2016 +0200

    S390: Use DT_JUMPREL in prelink undo code.
    
    On s390, the current prelink undo code in elf_machine_lazy_rel()
    has the requirement, that the plt stubs use the first got slots
    after the 3 reserved ones.
    
    In case of undoing prelink, the plt got slots are reset to the correct
    addresses whithin the corresponding plt-stub. Therefore the address
    is calculated by the address of the first plt-stub-address which
    was written by prelink (see l->l_mach.plt) to got[1] and index of
    current relocation multiplied with 32 (=size of one plt slot).
    The index was calculated with &current-got-slot - &got[3].
    
    This patch removes the requirement, that the plt-got-slots are
    starting at got[3]. The index is now calculated with
    &current-reloc - &reloc[0]. The first struct Elf64_Rela is stored
    at DT_JMPREL.
    
    This patch is needed to prepare for partial relro support.
    
    Ulrich Weigand suggested this approach to use DT_JMPREL - Thanks.
    
    ChangeLog:
    
    	* sysdeps/s390/linkmap.h (struct link_map_machine):
    	Remove member gotplt and add member jmprel.
    	* sysdeps/s390/s390-32/dl-machine.h
    	(elf_machine_runtime_setup): Setup member jmprel with DT_JMPREL
    	instead of gotplt with &got[3].
    	(elf_machine_lazy_rel): Calculate address with reloc and jmprel.
    	* sysdeps/s390/s390-64/dl-machine.h: Likewise.

diff --git a/ChangeLog b/ChangeLog
index 72c5549..4f6357a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2016-07-06  Stefan Liebler  <stli@linux.vnet.ibm.com>
+
+	* sysdeps/s390/linkmap.h (struct link_map_machine):
+	Remove member gotplt and add member jmprel.
+	* sysdeps/s390/s390-32/dl-machine.h
+	(elf_machine_runtime_setup): Setup member jmprel with DT_JMPREL
+	instead of gotplt with &got[3].
+	(elf_machine_lazy_rel): Calculate address with reloc and jmprel.
+	* sysdeps/s390/s390-64/dl-machine.h: Likewise.
+
 2016-07-06  John David Anglin  <danglin@gcc.gnu.org>
 
 	* sysdeps/hppa/fpu/libm-test-ulps: Regenerate.
diff --git a/sysdeps/s390/linkmap.h b/sysdeps/s390/linkmap.h
index fc1fba3..283615b 100644
--- a/sysdeps/s390/linkmap.h
+++ b/sysdeps/s390/linkmap.h
@@ -2,12 +2,12 @@
 struct link_map_machine
   {
     Elf64_Addr plt; /* Address of .plt + 0x2e */
-    Elf64_Addr gotplt; /* Address of .got + 0x18 */
+    const Elf64_Rela *jmprel; /* Address of first JMP_SLOT reloc */
   };
 #else
 struct link_map_machine
   {
     Elf32_Addr plt; /* Address of .plt + 0x2c */
-    Elf32_Addr gotplt; /* Address of .got + 0x0c */
+    const Elf32_Rela *jmprel; /* Address of first JMP_SLOT reloc */
   };
 #endif
diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h
index ec0ae4a..0a58897 100644
--- a/sysdeps/s390/s390-32/dl-machine.h
+++ b/sysdeps/s390/s390-32/dl-machine.h
@@ -109,7 +109,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
       if (got[1])
 	{
 	  l->l_mach.plt = got[1] + l->l_addr;
-	  l->l_mach.gotplt = (Elf32_Addr) &got[3];
+	  l->l_mach.jmprel = (const Elf32_Rela *) D_PTR (l, l_info[DT_JMPREL]);
 	}
       got[1] = (Elf32_Addr) l;	/* Identify this shared object.  */
 
@@ -506,9 +506,7 @@ elf_machine_lazy_rel (struct link_map *map,
       if (__builtin_expect (map->l_mach.plt, 0) == 0)
 	*reloc_addr += l_addr;
       else
-	*reloc_addr =
-	  map->l_mach.plt
-	  + (((Elf32_Addr) reloc_addr) - map->l_mach.gotplt) * 8;
+	*reloc_addr = map->l_mach.plt + (reloc - map->l_mach.jmprel) * 32;
     }
   else if (__glibc_likely (r_type == R_390_IRELATIVE))
     {
diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/s390-64/dl-machine.h
index 9ee7c92..6e5ee1e 100644
--- a/sysdeps/s390/s390-64/dl-machine.h
+++ b/sysdeps/s390/s390-64/dl-machine.h
@@ -98,7 +98,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
       if (got[1])
 	{
 	  l->l_mach.plt = got[1] + l->l_addr;
-	  l->l_mach.gotplt = (Elf64_Addr) &got[3];
+	  l->l_mach.jmprel = (const Elf64_Rela *) D_PTR (l, l_info[DT_JMPREL]);
 	}
       got[1] = (Elf64_Addr) l;	/* Identify this shared object.	 */
 
@@ -460,9 +460,7 @@ elf_machine_lazy_rel (struct link_map *map,
       if (__builtin_expect (map->l_mach.plt, 0) == 0)
 	*reloc_addr += l_addr;
       else
-	*reloc_addr =
-	  map->l_mach.plt
-	  + (((Elf64_Addr) reloc_addr) - map->l_mach.gotplt) * 4;
+	*reloc_addr = map->l_mach.plt + (reloc - map->l_mach.jmprel) * 32;
     }
   else if (__glibc_likely (r_type == R_390_IRELATIVE))
     {

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

Summary of changes:
 ChangeLog                         |   10 ++++++++++
 sysdeps/s390/linkmap.h            |    4 ++--
 sysdeps/s390/s390-32/dl-machine.h |    6 ++----
 sysdeps/s390/s390-64/dl-machine.h |    6 ++----
 4 files changed, 16 insertions(+), 10 deletions(-)


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]