This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Re: don't assume reloc_addr passed to elf_machine_rel* is aligned
- From: Alexandre Oliva <aoliva at redhat dot com>
- To: Roland McGrath <roland at redhat dot com>
- Cc: Daniel Jacobowitz <drow at mvista dot com>, Andreas Jaeger <aj at suse dot de>, libc-alpha at sources dot redhat dot com
- Date: 09 Jun 2003 13:42:12 -0300
- Subject: Re: don't assume reloc_addr passed to elf_machine_rel* is aligned
- Organization: GCC Team, Red Hat
- References: <200306042058.h54KwUm27909@magilla.sf.frob.com>
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