diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2003-07-31 06:33:53 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@redhat.com> | 2003-07-31 06:33:53 +0000 |
commit | 87d254a7bf02b60e6cd0699ddca6105b3ea232c9 (patch) | |
tree | 8a8121db8c86680e1a9d34acdc844f73f8962bcf /sysdeps/sh | |
parent | e4a6507c4c50580521b80970bfae00df472a549c (diff) | |
download | glibc-87d254a7bf02b60e6cd0699ddca6105b3ea232c9.tar.gz glibc-87d254a7bf02b60e6cd0699ddca6105b3ea232c9.tar.xz glibc-87d254a7bf02b60e6cd0699ddca6105b3ea232c9.zip |
* 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/mips/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.
2003-07-31 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/mips/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.
Diffstat (limited to 'sysdeps/sh')
-rw-r--r-- | sysdeps/sh/dl-machine.h | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/sysdeps/sh/dl-machine.h b/sysdeps/sh/dl-machine.h index 6607d9b2f8..5403c3c62d 100644 --- a/sysdeps/sh/dl-machine.h +++ b/sysdeps/sh/dl-machine.h @@ -456,15 +456,16 @@ elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, 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_arg) { + Elf32_Addr *const reloc_addr = reloc_addr_arg; const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); Elf32_Addr value; -#define COPY_UNALIGNED_WORD(sw, tw, align) \ +#define COPY_UNALIGNED_WORD(swp, twp, align) \ { \ - void *__s = &(sw), *__t = &(tw); \ + void *__s = (swp), *__t = (twp); \ switch ((align)) \ { \ case 0: \ @@ -493,10 +494,12 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, value = map->l_addr + reloc->r_addend; else { - COPY_UNALIGNED_WORD (*reloc_addr, value, (int) reloc_addr & 3); + COPY_UNALIGNED_WORD (reloc_addr_arg, &value, + (int) reloc_addr_arg & 3); value += map->l_addr; } - COPY_UNALIGNED_WORD (value, *reloc_addr, (int) reloc_addr & 3); + COPY_UNALIGNED_WORD (&value, reloc_addr_arg, + (int) reloc_addr_arg & 3); } } #ifndef RTLD_BOOTSTRAP @@ -538,8 +541,8 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, rtld_progname ?: "<program name unknown>", strtab + refsym->st_name); } - memcpy (reloc_addr, (void *) value, MIN (sym->st_size, - refsym->st_size)); + memcpy (reloc_addr_arg, (void *) value, + MIN (sym->st_size, refsym->st_size)); break; case R_SH_GLOB_DAT: case R_SH_JMP_SLOT: @@ -606,12 +609,14 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, used while loading those libraries. */ value -= map->l_addr + refsym->st_value + reloc->r_addend; #endif - COPY_UNALIGNED_WORD (value, *reloc_addr, (int) reloc_addr & 3); + COPY_UNALIGNED_WORD (&value, reloc_addr_arg, + (int) reloc_addr_arg & 3); break; } case R_SH_REL32: value = (value - (Elf32_Addr) reloc_addr); - COPY_UNALIGNED_WORD (value, *reloc_addr, (int) reloc_addr & 3); + COPY_UNALIGNED_WORD (&value, reloc_addr_arg, + (int) reloc_addr_arg & 3); break; default: _dl_reloc_bad_type (map, r_type, 0); @@ -622,18 +627,19 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, static inline void elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, - Elf32_Addr *const reloc_addr) + void *const reloc_addr_arg) { + Elf32_Addr *const reloc_addr = reloc_addr_arg; Elf32_Addr value; if (reloc->r_addend) value = l_addr + reloc->r_addend; else { - COPY_UNALIGNED_WORD (*reloc_addr, value, (int) reloc_addr & 3); + COPY_UNALIGNED_WORD (reloc_addr_arg, &value, (int) reloc_addr_arg & 3); value += l_addr; } - COPY_UNALIGNED_WORD (value, *reloc_addr, (int) reloc_addr & 3); + COPY_UNALIGNED_WORD (&value, reloc_addr_arg, (int) reloc_addr_arg & 3); #undef COPY_UNALIGNED_WORD } |