diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-07-15 03:58:49 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-07-15 03:58:49 +0000 |
commit | c3da4f0cba685e6918d2babb286bd731ae7eab71 (patch) | |
tree | 0ca3210183ced69ee55d95a2b37439fe8a64d544 /sysdeps/arm/dl-machine.h | |
parent | 2acfe5d64c4a913b1462ede7c02f54949f0c7d38 (diff) | |
download | glibc-c3da4f0cba685e6918d2babb286bd731ae7eab71.zip glibc-c3da4f0cba685e6918d2babb286bd731ae7eab71.tar.gz glibc-c3da4f0cba685e6918d2babb286bd731ae7eab71.tar.bz2 |
Update.
2002-07-12 Philip Blundell <philb@gnu.org>
* sysdeps/generic/backtrace.c (FIRST_FRAME_POINTER): New macro.
(__backtrace): Use it.
* sysdeps/arm/frame.h (FIRST_FRAME_POINTER): Define. [PR libc/2632]
2002-07-12 Philip Blundell <philb@gnu.org>
* sysdeps/arm/dl-machine.h (elf_machine_rel): Don't handle
R_ARM_RELATIVE if RTLD_BOOTSTRAP and HAVE_Z_COMBRELOC. Only check
for rtld map if neither RTLD_BOOTSTRAP nor HAVE_Z_COMBRELOC is defined.
(elf_machine_rela): Remove unused variable.
* sysdeps/unix/sysv/linux/arm/Makefile [subdir=elf]
(sysdep-rtld-routines, sysdep_routines, sysdep-dl-routines): Don't
define.
2002-07-12 Ulrich Drepper <drepper@redhat.com>
* iconvdata/gconv-modules: Add aliases for ISO-8859-11.
Diffstat (limited to 'sysdeps/arm/dl-machine.h')
-rw-r--r-- | sysdeps/arm/dl-machine.h | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h index 4a7ab38..aeee1d7 100644 --- a/sysdeps/arm/dl-machine.h +++ b/sysdeps/arm/dl-machine.h @@ -422,10 +422,20 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, { const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); +#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC if (__builtin_expect (r_type == R_ARM_RELATIVE, 0)) { -# ifndef RTLD_BOOTSTRAP - if (map != &_dl_rtld_map) /* Already done in rtld itself. */ +# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC + /* This is defined in rtld.c, but nowhere in the static libc.a; + make the reference weak so static programs can still link. + This declaration cannot be done when compiling rtld.c + (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the + common defn for _dl_rtld_map, which is incompatible with a + weak decl in the same file. */ +# ifndef SHARED + weak_extern (_dl_rtld_map); +# endif + if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ # endif *reloc_addr += map->l_addr; } @@ -434,6 +444,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, return; # endif else +#endif { const Elf32_Sym *const refsym = sym; Elf32_Addr value = RESOLVE (&sym, version, r_type); @@ -483,7 +494,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, # ifndef SHARED weak_extern (_dl_rtld_map); # endif - if (map == &_dl_rtld_map) + if (map == &GL(dl_rtld_map)) /* Undo the relocation done here during bootstrapping. Now we will relocate it anew, possibly using a binding found in the user program or a loaded library @@ -541,7 +552,6 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, return; else { - const Elf32_Sym *const refsym = sym; Elf32_Addr value = RESOLVE (&sym, version, r_type); if (sym) value += sym->st_value; |