This is the mail archive of the libc-alpha@sources.redhat.com 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]

Re: don't assume reloc_addr passed to elf_machine_rel* is aligned


On Jun  4, 2003, Roland McGrath <roland@redhat.com> wrote:

> There's no reason to leave the /* Elf32_Addr */ comments, and they sure
> look funny.  In the generic decls (dynamic-link.h), it warrants a comment
> about the whole issue and why it matters to use the proper pointer type.

Ok, here's a revised patch.  Ok to install?

How about the other patch I posted last week, for the mips64-specific
chunk of the top-level configure?

Index: ChangeLog
from  Alexandre Oliva  <aoliva@redhat.com>

	* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela,
	elf_machine_rel_relative, elf_machine_rela_relative): Don't assume
	reloc_addr is aligned.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela,
	elf_machine_rela_relative): Adjust.
	* sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela,
	elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
	* sysdeps/cris/dl-machine.h (elf_machine_rela,
	elf_machine_rela_relative): Adjust.
	* sysdeps/hppa/dl-machine.h (elf_machine_rela,
	elf_machine_rela_relative): Adjust.
	* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela,
	elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
	* sysdeps/ia64/dl-machine.h (elf_machine_rela,
	elf_machine_rela_relative): Adjust.
	* sysdeps/m68k/dl-machine.h (elf_machine_rela,
	elf_machine_rela_relative): Adjust.
	* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela,
	elf_machine_rela_relative): Adjust.
	* sysdeps/powerpc/powerpc64/dl-machine.h
	(elf_machine_rela_relative, elf_machine_rela): Adjust.
	* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela,
	elf_machine_rela_relative): Adjust.
	* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela,
	elf_machine_rela_relative): 
	* sysdeps/sh/dl-machine.h (elf_machine_rela,
	elf_machine_rela_relative): Adjust.
	* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela,
	elf_machine_rela_relative): Adjust.
	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela) 
	(elf_machine_rela_relative): Adjust.
	* sysdeps/x86_64/dl-machine.h (elf_machine_rela) 
	(elf_machine_rela_relative): Adjust.

Index: elf/dynamic-link.h
===================================================================
RCS file: /cvs/glibc/libc/elf/dynamic-link.h,v
retrieving revision 1.47
diff -u -p -r1.47 dynamic-link.h
--- elf/dynamic-link.h 20 May 2003 22:22:03 -0000 1.47
+++ elf/dynamic-link.h 9 Jun 2003 16:39:24 -0000
@@ -21,20 +21,30 @@
 #include <assert.h>
 
 #ifdef RESOLVE
+/* We pass reloc_addr as a pointer to void, as opposed to a pointer to
+   ElfW(Addr), because not all architectures can assume that the
+   relocated address is properly aligned, whereas the compiler is
+   entitled to assume that a pointer to a type is properly aligned for
+   the type.  Even if we cast the pointer back to some other type with
+   less strict alignment requirements, the compiler might still
+   remember that the pointer was originally more aligned, thereby
+   optimizing away alignment tests or using word instructions for
+   copying memory, breaking the very code written to handle the
+   unaligned cases.  */
 auto void __attribute__((always_inline))
 elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
 		 const ElfW(Sym) *sym, const struct r_found_version *version,
-		 ElfW(Addr) *const reloc_addr);
+		 void *const reloc_addr);
 auto void __attribute__((always_inline))
 elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
 		  const ElfW(Sym) *sym, const struct r_found_version *version,
-		  ElfW(Addr) *const reloc_addr);
+		  void *const reloc_addr);
 auto void __attribute__((always_inline))
 elf_machine_rel_relative (ElfW(Addr) l_addr, const ElfW(Rel) *reloc,
-			  ElfW(Addr) *const reloc_addr);
+			  void *const reloc_addr);
 auto void __attribute__((always_inline))
 elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc,
-			   ElfW(Addr) *const reloc_addr);
+			   void *const reloc_addr);
 # if ELF_MACHINE_NO_RELA || defined ELF_MACHINE_PLT_REL
 auto void __attribute__((always_inline))
 elf_machine_lazy_rel (struct link_map *map,
Index: sysdeps/alpha/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/alpha/dl-machine.h,v
retrieving revision 1.70
diff -u -p -r1.70 dl-machine.h
--- sysdeps/alpha/dl-machine.h 6 Jun 2003 05:54:14 -0000 1.70
+++ sysdeps/alpha/dl-machine.h 9 Jun 2003 16:39:27 -0000
@@ -512,8 +512,9 @@ elf_machine_rela (struct link_map *map,
 		  const Elf64_Rela *reloc,
 		  const Elf64_Sym *sym,
 		  const struct r_found_version *version,
-		  Elf64_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info);
 
 #if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED
@@ -649,11 +650,8 @@ elf_machine_rela (struct link_map *map,
 
 static inline void
 elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
-			   Elf64_Addr *const reloc_addr)
+			   void *const reloc_addr_1)
 {
-  /* XXX Make some timings.  Maybe it's preverable to test for
-     unaligned access and only do it the complex way if necessary.  */
-  void *reloc_addr_1 = reloc_addr;
   Elf64_Addr reloc_addr_val;
 
   /* Load value without causing unaligned trap. */
Index: sysdeps/arm/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/arm/dl-machine.h,v
retrieving revision 1.42
diff -u -p -r1.42 dl-machine.h
--- sysdeps/arm/dl-machine.h 15 Nov 2002 22:51:20 -0000 1.42
+++ sysdeps/arm/dl-machine.h 9 Jun 2003 16:39:27 -0000
@@ -1,5 +1,6 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  ARM version.
-   Copyright (C) 1995,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+	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
@@ -419,8 +420,9 @@ fix_bad_pc24 (Elf32_Addr *const reloc_ad
 static inline void
 elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
 		 const Elf32_Sym *sym, const struct r_found_version *version,
-		 Elf32_Addr *const reloc_addr)
+		 void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
 
 #if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC
@@ -544,8 +546,9 @@ elf_machine_rel (struct link_map *map, c
 static inline void
 elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
 		  const Elf32_Sym *sym, const struct r_found_version *version,
-		  Elf32_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
 
   if (__builtin_expect (r_type == R_ARM_RELATIVE, 0))
@@ -623,16 +626,18 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc,
-			  Elf32_Addr *const reloc_addr)
+			  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr += l_addr;
 }
 
 # ifndef RTLD_BOOTSTRAP
 static inline void
 elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
-			   Elf32_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr = l_addr + reloc->r_addend;
 }
 # endif
Index: sysdeps/cris/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/cris/dl-machine.h,v
retrieving revision 1.10
diff -u -p -r1.10 dl-machine.h
--- sysdeps/cris/dl-machine.h 28 Aug 2002 21:23:07 -0000 1.10
+++ sysdeps/cris/dl-machine.h 9 Jun 2003 16:39:27 -0000
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  CRIS version.
-   Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1996-2001, 2002, 2003 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
@@ -280,8 +280,9 @@ elf_machine_plt_value (struct link_map *
 static inline void
 elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
 		  const Elf32_Sym *sym, const struct r_found_version *version,
-		  Elf32_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
 
   if (__builtin_expect (r_type == R_CRIS_RELATIVE, 0))
@@ -364,8 +365,9 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
-			   Elf32_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr = l_addr + reloc->r_addend;
 }
 
Index: sysdeps/hppa/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/hppa/dl-machine.h,v
retrieving revision 1.18
diff -u -p -r1.18 dl-machine.h
--- sysdeps/hppa/dl-machine.h 28 Sep 2002 04:34:00 -0000 1.18
+++ sysdeps/hppa/dl-machine.h 9 Jun 2003 16:39:28 -0000
@@ -1,5 +1,6 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  PA-RISC version.
-   Copyright (C) 1995-1997,1999,2000,2001,2002 Free Software Foundation, Inc.
+   Copyright (C) 1995-1997,1999,2000,2001,2002, 2003
+	Free Software Foundation, Inc.
    Contributed by David Huggins-Daines <dhd@debian.org>
    This file is part of the GNU C Library.
 
@@ -481,8 +482,9 @@ asm (									\
 static inline void
 elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
 		  const Elf32_Sym *sym, const struct r_found_version *version,
-		  Elf32_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const Elf32_Sym *const refsym = sym;
   unsigned long const r_type = ELF32_R_TYPE (reloc->r_info);
   struct link_map *sym_map;
@@ -637,8 +639,9 @@ elf_machine_rela (struct link_map *map, 
 static inline void
 elf_machine_rela_relative (struct link_map *map, Elf32_Addr l_addr,
 			   const Elf32_Rela *reloc,
-			   Elf32_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   unsigned long const r_type = ELF32_R_TYPE (reloc->r_info);
   Elf32_Addr value;
 
Index: sysdeps/i386/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/i386/dl-machine.h,v
retrieving revision 1.119
diff -u -p -r1.119 dl-machine.h
--- sysdeps/i386/dl-machine.h 2 Jun 2003 18:20:22 -0000 1.119
+++ sysdeps/i386/dl-machine.h 9 Jun 2003 16:39:29 -0000
@@ -391,8 +391,9 @@ elf_machine_plt_value (struct link_map *
 static inline void
 elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
 		 const Elf32_Sym *sym, const struct r_found_version *version,
-		 Elf32_Addr *const reloc_addr)
+		 void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
 
 #if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC
@@ -534,8 +535,9 @@ elf_machine_rel (struct link_map *map, c
 static inline void
 elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
 		  const Elf32_Sym *sym, const struct r_found_version *version,
-		  Elf32_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
 
   if (ELF32_R_TYPE (reloc->r_info) == R_386_RELATIVE)
@@ -634,8 +636,9 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc,
-			  Elf32_Addr *const reloc_addr)
+			  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   assert (ELF32_R_TYPE (reloc->r_info) == R_386_RELATIVE);
   *reloc_addr += l_addr;
 }
@@ -643,8 +646,9 @@ elf_machine_rel_relative (Elf32_Addr l_a
 #ifndef RTLD_BOOTSTRAP
 static inline void
 elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
-			   Elf32_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr = l_addr + reloc->r_addend;
 }
 #endif	/* !RTLD_BOOTSTRAP */
Index: sysdeps/ia64/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/ia64/dl-machine.h,v
retrieving revision 1.26
diff -u -p -r1.26 dl-machine.h
--- sysdeps/ia64/dl-machine.h 2 May 2003 02:38:19 -0000 1.26
+++ sysdeps/ia64/dl-machine.h 9 Jun 2003 16:39:29 -0000
@@ -507,8 +507,9 @@ elf_machine_rela (struct link_map *map,
 		  const Elf64_Rela *reloc,
 		  const Elf64_Sym *sym,
 		  const struct r_found_version *version,
-		  Elf64_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info);
   Elf64_Addr value;
 
@@ -607,8 +608,9 @@ elf_machine_rela (struct link_map *map,
 
 static inline void
 elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
-			   Elf64_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   /* ??? Ignore MSB and Instruction format for now.  */
   assert (ELF64_R_TYPE (reloc->r_info) == R_IA64_REL64LSB);
 
Index: sysdeps/m68k/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/m68k/dl-machine.h,v
retrieving revision 1.61
diff -u -p -r1.61 dl-machine.h
--- sysdeps/m68k/dl-machine.h 1 Mar 2003 15:33:11 -0000 1.61
+++ sysdeps/m68k/dl-machine.h 9 Jun 2003 16:39:30 -0000
@@ -229,8 +229,9 @@ elf_machine_plt_value (struct link_map *
 static inline void __attribute__ ((always_inline))
 elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
 		  const Elf32_Sym *sym, const struct r_found_version *version,
-		  Elf32_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
 
   if (__builtin_expect (r_type == R_68K_RELATIVE, 0))
@@ -298,8 +299,9 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
-			   Elf32_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr = l_addr + reloc->r_addend;
 }
 
Index: sysdeps/powerpc/powerpc32/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc32/dl-machine.h,v
retrieving revision 1.8
diff -u -p -r1.8 dl-machine.h
--- sysdeps/powerpc/powerpc32/dl-machine.h 16 May 2003 04:16:45 -0000 1.8
+++ sysdeps/powerpc/powerpc32/dl-machine.h 9 Jun 2003 16:39:31 -0000
@@ -356,8 +356,9 @@ extern void _dl_reloc_overflow (struct l
 inline void
 elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
 		  const Elf32_Sym *sym, const struct r_found_version *version,
-		  Elf32_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const Elf32_Sym *const refsym = sym;
   Elf32_Addr value;
   const int r_type = ELF32_R_TYPE (reloc->r_info);
@@ -456,8 +457,9 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
-			   Elf32_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr = l_addr + reloc->r_addend;
 }
 
Index: sysdeps/powerpc/powerpc64/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/dl-machine.h,v
retrieving revision 1.12
diff -u -p -r1.12 dl-machine.h
--- sysdeps/powerpc/powerpc64/dl-machine.h 1 Jun 2003 01:31:07 -0000 1.12
+++ sysdeps/powerpc/powerpc64/dl-machine.h 9 Jun 2003 16:39:31 -0000
@@ -553,8 +553,9 @@ extern void _dl_reloc_overflow (struct l
 
 static inline void
 elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
-			   Elf64_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr = l_addr + reloc->r_addend;
 }
 
@@ -586,8 +587,9 @@ elf_machine_rela (struct link_map *map,
 		  const Elf64_Rela *reloc,
 		  const Elf64_Sym *sym,
 		  const struct r_found_version *version,
-		  Elf64_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   const int r_type = ELF64_R_TYPE (reloc->r_info);
 #ifndef RTLD_BOOTSTRAP
   const Elf64_Sym *const refsym = sym;
Index: sysdeps/s390/s390-32/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/s390/s390-32/dl-machine.h,v
retrieving revision 1.15
diff -u -p -r1.15 dl-machine.h
--- sysdeps/s390/s390-32/dl-machine.h 24 Apr 2003 17:10:55 -0000 1.15
+++ sysdeps/s390/s390-32/dl-machine.h 9 Jun 2003 16:39:32 -0000
@@ -376,9 +376,10 @@ elf_machine_plt_value (struct link_map *
 
 static inline void
 elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
-		 const Elf32_Sym *sym, const struct r_found_version *version,
-		  Elf32_Addr *const reloc_addr)
+		  const Elf32_Sym *sym, const struct r_found_version *version,
+		  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
 
 #if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC
@@ -529,8 +530,9 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
-			   Elf32_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr = l_addr + reloc->r_addend;
 }
 
Index: sysdeps/s390/s390-64/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/s390/s390-64/dl-machine.h,v
retrieving revision 1.14
diff -u -p -r1.14 dl-machine.h
--- sysdeps/s390/s390-64/dl-machine.h 24 Apr 2003 17:10:55 -0000 1.14
+++ sysdeps/s390/s390-64/dl-machine.h 9 Jun 2003 16:39:32 -0000
@@ -344,9 +344,10 @@ elf_machine_plt_value (struct link_map *
 
 static inline void
 elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
-		 const Elf64_Sym *sym, const struct r_found_version *version,
-		  Elf64_Addr *const reloc_addr)
+		  const Elf64_Sym *sym, const struct r_found_version *version,
+		  void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   const unsigned int r_type = ELF64_R_TYPE (reloc->r_info);
 
 #if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC
@@ -509,8 +510,9 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
-			   Elf64_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr = l_addr + reloc->r_addend;
 }
 
Index: sysdeps/sh/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/sh/dl-machine.h,v
retrieving revision 1.27
diff -u -p -r1.27 dl-machine.h
--- sysdeps/sh/dl-machine.h 12 Jan 2003 08:50:51 -0000 1.27
+++ sysdeps/sh/dl-machine.h 9 Jun 2003 16:39:32 -0000
@@ -456,9 +456,10 @@ elf_machine_plt_value (struct link_map *
 
 static inline void
 elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
-		 const Elf32_Sym *sym, const struct r_found_version *version,
-		 Elf32_Addr *const reloc_addr)
+		  const Elf32_Sym *sym, const struct r_found_version *version,
+		  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
   Elf32_Addr value;
 
@@ -622,8 +623,9 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
-			   Elf32_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   Elf32_Addr value;
 
   if (reloc->r_addend)
Index: sysdeps/sparc/sparc32/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/sparc/sparc32/dl-machine.h,v
retrieving revision 1.45
diff -u -p -r1.45 dl-machine.h
--- sysdeps/sparc/sparc32/dl-machine.h 27 Jan 2003 20:50:57 -0000 1.45
+++ sysdeps/sparc/sparc32/dl-machine.h 9 Jun 2003 16:39:32 -0000
@@ -435,8 +435,9 @@ elf_machine_plt_value (struct link_map *
 static inline void
 elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
 		  const Elf32_Sym *sym, const struct r_found_version *version,
-		  Elf32_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
 
 #if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC
@@ -610,8 +611,9 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
-			   Elf32_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf32_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr += l_addr + reloc->r_addend;
 }
 
Index: sysdeps/sparc/sparc64/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/sparc/sparc64/dl-machine.h,v
retrieving revision 1.42
diff -u -p -r1.42 dl-machine.h
--- sysdeps/sparc/sparc64/dl-machine.h 27 Sep 2002 03:23:44 -0000 1.42
+++ sysdeps/sparc/sparc64/dl-machine.h 9 Jun 2003 16:39:33 -0000
@@ -1,5 +1,6 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  Sparc64 version.
-   Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2001,2002, 2003
+	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
@@ -240,8 +241,9 @@ elf_machine_plt_value (struct link_map *
 static inline void
 elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
 		  const Elf64_Sym *sym, const struct r_found_version *version,
-		  Elf64_Addr *const reloc_addr)
+		  void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   const unsigned long int r_type = ELF64_R_TYPE_ID (reloc->r_info);
 
 #if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC
@@ -430,8 +432,9 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
-			   Elf64_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   *reloc_addr = l_addr + reloc->r_addend;
 }
 
Index: sysdeps/x86_64/dl-machine.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/x86_64/dl-machine.h,v
retrieving revision 1.18
diff -u -p -r1.18 dl-machine.h
--- sysdeps/x86_64/dl-machine.h 30 May 2003 16:10:23 -0000 1.18
+++ sysdeps/x86_64/dl-machine.h 9 Jun 2003 16:39:34 -0000
@@ -358,9 +358,10 @@ elf_machine_plt_value (struct link_map *
 
 static inline void
 elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
-		 const Elf64_Sym *sym, const struct r_found_version *version,
-		 Elf64_Addr *const reloc_addr)
+		  const Elf64_Sym *sym, const struct r_found_version *version,
+		  void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info);
 
 #if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC
@@ -522,8 +523,9 @@ elf_machine_rela (struct link_map *map, 
 
 static inline void
 elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
-			   Elf64_Addr *const reloc_addr)
+			   void *const reloc_addr_)
 {
+  Elf64_Addr *const reloc_addr = reloc_addr_;
   assert (ELF64_R_TYPE (reloc->r_info) == R_X86_64_RELATIVE);
   *reloc_addr = l_addr + reloc->r_addend;
 }
-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

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