mirror of git://sourceware.org/git/glibc.git
hppa: Fix initialization of dp register [BZ 29635]
After upgrading glibc to Debian 2.35-1, gdb faulted on startup and dropped core in a function call in the main application. This was caused by not initializing the global dp register for the main application early enough. Restore the code to initialize dp in _dl_start_user. It was removed when code was added to initialize dp in elf_machine_runtime_setup. Signed-off-by: John David Anglin <dave.anglin@bell.net>
This commit is contained in:
parent
ba70f69598
commit
b7bd94068e
sysdeps/hppa
|
@ -347,6 +347,16 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
|
|||
its return value is the user program's entry point. */
|
||||
|
||||
#define RTLD_START \
|
||||
/* Set up dp for any non-PIC lib constructors that may be called. */ \
|
||||
static struct link_map * __attribute__((used)) \
|
||||
set_dp (struct link_map *map) \
|
||||
{ \
|
||||
register Elf32_Addr dp asm ("%r27"); \
|
||||
dp = D_PTR (map, l_info[DT_PLTGOT]); \
|
||||
asm volatile ("" : : "r" (dp)); \
|
||||
return map; \
|
||||
} \
|
||||
\
|
||||
asm ( \
|
||||
" .text\n" \
|
||||
" .globl _start\n" \
|
||||
|
@ -426,6 +436,13 @@ asm ( \
|
|||
direct loader invocation. Thus, argc and argv must be \
|
||||
reloaded from from _dl_argc and _dl_argv. */ \
|
||||
\
|
||||
/* Load main_map from _rtld_local and setup dp. */ \
|
||||
" addil LT'_rtld_local,%r19\n" \
|
||||
" ldw RT'_rtld_local(%r1),%r26\n" \
|
||||
" bl set_dp, %r2\n" \
|
||||
" ldw 0(%r26),%r26\n" \
|
||||
" copy %ret0,%r26\n" \
|
||||
\
|
||||
/* Load argc from _dl_argc. */ \
|
||||
" addil LT'_dl_argc,%r19\n" \
|
||||
" ldw RT'_dl_argc(%r1),%r20\n" \
|
||||
|
@ -438,13 +455,10 @@ asm ( \
|
|||
" ldw 0(%r20),%r24\n" \
|
||||
" stw %r24,-44(%sp)\n" \
|
||||
\
|
||||
/* Call _dl_init(main_map, argc, argv, envp). */ \
|
||||
" addil LT'_rtld_local,%r19\n" \
|
||||
" ldw RT'_rtld_local(%r1),%r26\n" \
|
||||
" ldw 0(%r26),%r26\n" \
|
||||
\
|
||||
/* envp = argv + argc + 1 */ \
|
||||
" sh2add %r25,%r24,%r23\n" \
|
||||
\
|
||||
/* Call _dl_init(main_map, argc, argv, envp). */ \
|
||||
" bl _dl_init,%r2\n" \
|
||||
" ldo 4(%r23),%r23\n" /* delay slot */ \
|
||||
\
|
||||
|
|
Loading…
Reference in New Issue