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 | |
parent | 2acfe5d64c4a913b1462ede7c02f54949f0c7d38 (diff) | |
download | glibc-c3da4f0cba685e6918d2babb286bd731ae7eab71.tar glibc-c3da4f0cba685e6918d2babb286bd731ae7eab71.tar.gz glibc-c3da4f0cba685e6918d2babb286bd731ae7eab71.tar.bz2 glibc-c3da4f0cba685e6918d2babb286bd731ae7eab71.zip |
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')
-rw-r--r-- | sysdeps/arm/dl-machine.h | 18 | ||||
-rw-r--r-- | sysdeps/arm/frame.h | 4 | ||||
-rw-r--r-- | sysdeps/generic/backtrace.c | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/Makefile | 8 |
4 files changed, 24 insertions, 15 deletions
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h index 4a7ab3867c..aeee1d7892 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; diff --git a/sysdeps/arm/frame.h b/sysdeps/arm/frame.h index 2a3f29709f..deb46c0135 100644 --- a/sysdeps/arm/frame.h +++ b/sysdeps/arm/frame.h @@ -1,5 +1,5 @@ /* Definition of stack frame structure. ARM/APCS version. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2002 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 @@ -24,3 +24,5 @@ struct layout void *__unbounded sp; void *__unbounded return_address; }; + +#define FIRST_FRAME_POINTER ADVANCE_STACK_FRAME (__builtin_frame_address (0)) diff --git a/sysdeps/generic/backtrace.c b/sysdeps/generic/backtrace.c index 2579984747..f27f890bc4 100644 --- a/sysdeps/generic/backtrace.c +++ b/sysdeps/generic/backtrace.c @@ -1,5 +1,5 @@ /* Return backtrace of current program state. Generic version. - Copyright (C) 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -58,6 +58,11 @@ extern void *__libc_stack_end; # define ADVANCE_STACK_FRAME(next) BOUNDED_1 ((struct layout *) (next)) #endif +/* By default, the frame pointer is just what we get from gcc. */ +#ifndef FIRST_FRAME_POINTER +# define FIRST_FRAME_POINTER __builtin_frame_address (0) +#endif + int __backtrace (array, size) void **array; @@ -68,7 +73,7 @@ __backtrace (array, size) void *__unbounded top_stack; int cnt = 0; - top_frame = __builtin_frame_address (0); + top_frame = FIRST_FRAME_POINTER; top_stack = CURRENT_STACK_FRAME; /* We skip the call to this function, it makes no sense to record it. */ diff --git a/sysdeps/unix/sysv/linux/arm/Makefile b/sysdeps/unix/sysv/linux/arm/Makefile index aeaaa39fce..6040b20193 100644 --- a/sysdeps/unix/sysv/linux/arm/Makefile +++ b/sysdeps/unix/sysv/linux/arm/Makefile @@ -12,11 +12,3 @@ endif ifeq ($(subdir),resource) sysdep_routines += oldgetrlimit64 endif - -ifeq ($(subdir),elf) -# extra shared linker files to link into dl-allobjs.so and libc -sysdep-dl-routines += dl-procinfo -sysdep_routines += dl-procinfo -# extra shared linker files to link only into dl-allobjs.so -sysdep-rtld-routines += dl-procinfo -endif |