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.15-556-g993eb05


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  993eb0541cd32ce72f1f8d768b35857a678894eb (commit)
      from  48e2e132debdc5f0163114c89a6eaec986c9bf84 (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://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=993eb0541cd32ce72f1f8d768b35857a678894eb

commit 993eb0541cd32ce72f1f8d768b35857a678894eb
Author: David S. Miller <davem@davemloft.net>
Date:   Thu Apr 5 15:28:37 2012 -0700

    Reduce down to one definition of _ELF_DYNAMIC_DO_RELOC.
    
    	* elf/dynamic-link.h (_ELF_DYNAMIC_DO_RELOC): Reduce down to one
    	definition.
    	* sysdeps/powerpc/powerpc32/dl-machine.h
    	(ELF_MACHINE_PLTREL_OVERLAP): Delete.
    	* sysdeps/s390/s390-32/dl-machine.h
    	(ELF_MACHINE_PLTREL_OVERLAP): Likewise.
    	* sysdeps/sparc/sparc32/dl-machine.h
    	(ELF_MACHINE_PLTREL_OVERLAP): Likewise.
    	* sysdeps/sparc/sparc64/dl-machine.h
    	(ELF_MACHINE_PLTREL_OVERLAP): Likewise.

diff --git a/ChangeLog b/ChangeLog
index ab6db9e..6337288 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2012-04-05  David S. Miller  <davem@davemloft.net>
 
+	* elf/dynamic-link.h (_ELF_DYNAMIC_DO_RELOC): Reduce down to one
+	definition.
+	* sysdeps/powerpc/powerpc32/dl-machine.h
+	(ELF_MACHINE_PLTREL_OVERLAP): Delete.
+	* sysdeps/s390/s390-32/dl-machine.h
+	(ELF_MACHINE_PLTREL_OVERLAP): Likewise.
+	* sysdeps/sparc/sparc32/dl-machine.h
+	(ELF_MACHINE_PLTREL_OVERLAP): Likewise.
+	* sysdeps/sparc/sparc64/dl-machine.h
+	(ELF_MACHINE_PLTREL_OVERLAP): Likewise.
+
 	* elf/rtld.c (dl_main): If DL_DEBUG_UNUSED is enabled, turn off
 	lazy binding.
 	* elf/dl-lookup.c (_dl_lookup_symbol_x): If DL_DEBUG_UNUSED, ignore
diff --git a/elf/dynamic-link.h b/elf/dynamic-link.h
index aa71227..310ad5e 100644
--- a/elf/dynamic-link.h
+++ b/elf/dynamic-link.h
@@ -251,53 +251,12 @@ elf_get_dynamic_info (struct link_map *l, ElfW(Dyn) *temp)
 
 /* On some machines, notably SPARC, DT_REL* includes DT_JMPREL in its
    range.  Note that according to the ELF spec, this is completely legal!
-   But conditionally define things so that on machines we know this will
-   not happen we do something more optimal.  */
 
-# ifdef ELF_MACHINE_PLTREL_OVERLAP
-#  define _ELF_DYNAMIC_DO_RELOC(RELOC, reloc, map, do_lazy, skip_ifunc, test_rel) \
-  do {									      \
-    struct { ElfW(Addr) start, size;					      \
-	     __typeof (((ElfW(Dyn) *) 0)->d_un.d_val) nrelative; int lazy; }  \
-    ranges[3];								      \
-    int ranges_index;							      \
-									      \
-    ranges[0].lazy = ranges[2].lazy = 0;				      \
-    ranges[1].lazy = 1;							      \
-    ranges[0].size = ranges[1].size = ranges[2].size = 0;		      \
-    ranges[0].nrelative = ranges[1].nrelative = ranges[2].nrelative = 0;      \
-									      \
-    if ((map)->l_info[DT_##RELOC])					      \
-      {									      \
-	ranges[0].start = D_PTR ((map), l_info[DT_##RELOC]);		      \
-	ranges[0].size = (map)->l_info[DT_##RELOC##SZ]->d_un.d_val;	      \
-	if (map->l_info[VERSYMIDX (DT_##RELOC##COUNT)] != NULL)		      \
-	  ranges[0].nrelative						      \
-	    = MIN (map->l_info[VERSYMIDX (DT_##RELOC##COUNT)]->d_un.d_val,    \
-		   ranges[0].size / sizeof (ElfW(reloc)));		      \
-      }									      \
-									      \
-    if ((do_lazy)							      \
-	&& (map)->l_info[DT_PLTREL]					      \
-	&& (!test_rel || (map)->l_info[DT_PLTREL]->d_un.d_val == DT_##RELOC)) \
-      {									      \
-	ranges[1].start = D_PTR ((map), l_info[DT_JMPREL]);		      \
-	ranges[1].size = (map)->l_info[DT_PLTRELSZ]->d_un.d_val;	      \
-	ranges[2].start = ranges[1].start + ranges[1].size;		      \
-	ranges[2].size = ranges[0].start + ranges[0].size - ranges[2].start;  \
-	ranges[0].size = ranges[1].start - ranges[0].start;		      \
-      }									      \
-									      \
-    for (ranges_index = 0; ranges_index < 3; ++ranges_index)		      \
-      elf_dynamic_do_##reloc ((map),					      \
-			      ranges[ranges_index].start,		      \
-			      ranges[ranges_index].size,		      \
-			      ranges[ranges_index].nrelative,		      \
-			      ranges[ranges_index].lazy,		      \
-			      skip_ifunc);				      \
-  } while (0)
-# else
-#  define _ELF_DYNAMIC_DO_RELOC(RELOC, reloc, map, do_lazy, skip_ifunc, test_rel) \
+   We are guarenteed that we have one of two situations.  Either DT_JMPREL
+   comes immediately after DT_REL*, or there is overlap and DT_JMPREL
+   consumes precisely the very end of the DT_REL*.  */
+
+# define _ELF_DYNAMIC_DO_RELOC(RELOC, reloc, map, do_lazy, skip_ifunc, test_rel) \
   do {									      \
     struct { ElfW(Addr) start, size;					      \
 	     __typeof (((ElfW(Dyn) *) 0)->d_un.d_val) nrelative; int lazy; }  \
@@ -317,6 +276,8 @@ elf_get_dynamic_info (struct link_map *l, ElfW(Dyn) *temp)
       {									      \
 	ElfW(Addr) start = D_PTR ((map), l_info[DT_JMPREL]);		      \
 									      \
+	if (__builtin_expect (ranges[0].size, 1))			      \
+	  ranges[0].size = (start - ranges[0].start);			      \
 	if (! ELF_DURING_STARTUP					      \
 	    && ((do_lazy)						      \
 		/* This test does not only detect whether the relocation      \
@@ -352,7 +313,6 @@ elf_get_dynamic_info (struct link_map *l, ElfW(Dyn) *temp)
 				  skip_ifunc);				      \
       }									      \
   } while (0)
-# endif
 
 # if ELF_MACHINE_NO_REL || ELF_MACHINE_NO_RELA
 #  define _ELF_CHECK_REL 0
diff --git a/sysdeps/powerpc/powerpc32/dl-machine.h b/sysdeps/powerpc/powerpc32/dl-machine.h
index b3177d1..45868f5 100644
--- a/sysdeps/powerpc/powerpc32/dl-machine.h
+++ b/sysdeps/powerpc/powerpc32/dl-machine.h
@@ -388,8 +388,4 @@ elf_machine_lazy_rel (struct link_map *map,
   /* elf_machine_runtime_setup handles this. */
 }
 
-/* The SVR4 ABI specifies that the JMPREL relocs must be inside the
-   DT_RELA table.  */
-#define ELF_MACHINE_PLTREL_OVERLAP 1
-
 #endif /* RESOLVE_MAP */
diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h
index 58bd3ab..3eb7e41 100644
--- a/sysdeps/s390/s390-32/dl-machine.h
+++ b/sysdeps/s390/s390-32/dl-machine.h
@@ -227,9 +227,6 @@ _dl_start_user:\n\
 /* The S390 never uses Elf32_Rel relocations.  */
 #define ELF_MACHINE_NO_REL 1
 
-/* The S390 overlaps DT_RELA and DT_PLTREL.  */
-#define ELF_MACHINE_PLTREL_OVERLAP 1
-
 /* We define an initialization functions.  This is called very early in
    _dl_sysdep_start.  */
 #define DL_PLATFORM_INIT dl_platform_init ()
diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h
index f85683d..31b540a 100644
--- a/sysdeps/sparc/sparc32/dl-machine.h
+++ b/sysdeps/sparc/sparc32/dl-machine.h
@@ -204,9 +204,6 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
 /* The SPARC never uses Elf32_Rel relocations.  */
 #define ELF_MACHINE_NO_REL 1
 
-/* The SPARC overlaps DT_RELA and DT_PLTREL.  */
-#define ELF_MACHINE_PLTREL_OVERLAP 1
-
 /* Undo the sub %sp, 6*4, %sp; add %sp, 22*4, %o0 below to get at the
    value we want in __libc_stack_end.  */
 #define DL_STACK_END(cookie) \
diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h
index 87655d2..4b14593 100644
--- a/sysdeps/sparc/sparc64/dl-machine.h
+++ b/sysdeps/sparc/sparc64/dl-machine.h
@@ -125,9 +125,6 @@ elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc,
 /* The SPARC never uses Elf64_Rel relocations.  */
 #define ELF_MACHINE_NO_REL 1
 
-/* The SPARC overlaps DT_RELA and DT_PLTREL.  */
-#define ELF_MACHINE_PLTREL_OVERLAP 1
-
 /* Set up the loaded object described by L so its unrelocated PLT
    entries will jump to the on-demand fixup code in dl-runtime.c.  */
 

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

Summary of changes:
 ChangeLog                              |   11 ++++++
 elf/dynamic-link.h                     |   54 ++++---------------------------
 sysdeps/powerpc/powerpc32/dl-machine.h |    4 --
 sysdeps/s390/s390-32/dl-machine.h      |    3 --
 sysdeps/sparc/sparc32/dl-machine.h     |    3 --
 sysdeps/sparc/sparc64/dl-machine.h     |    3 --
 6 files changed, 18 insertions(+), 60 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]