From 35bcb7d59fcc41c074935e7d326face4165a84ef Mon Sep 17 00:00:00 2001 From: kevinb Date: Sat, 21 Dec 2002 06:43:24 +0000 Subject: [PATCH] Add DT_MIPS_RLD_MAP case for 64-bit targets. --- gdb/ChangeLog | 5 +++++ gdb/solib-svr4.c | 21 ++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f0ce860e0e..c3ab1847a9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2002-12-20 Kevin Buettner + * solib-svr4.c (elf_locate_base): Fix sizeof() related bug. Add + DT_MIPS_RLD_MAP case for 64-bit targets. + +2002-12-20 Kevin Buettner + * mips-tdep.c (heuristic_proc_desc): Clear memory associated with ``temp_saved_regs'', not the pointer or other storage contiguous to this pointer. diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index 78161e0d24..8ced5f0129 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -446,15 +446,16 @@ elf_locate_base (void) else if (dyn_tag == DT_MIPS_RLD_MAP) { char *pbuf; + int pbuf_size = TARGET_PTR_BIT / HOST_CHAR_BIT; - pbuf = alloca (TARGET_PTR_BIT / HOST_CHAR_BIT); + pbuf = alloca (pbuf_size); /* DT_MIPS_RLD_MAP contains a pointer to the address of the dynamic link structure. */ dyn_ptr = bfd_h_get_32 (exec_bfd, (bfd_byte *) x_dynp->d_un.d_ptr); - if (target_read_memory (dyn_ptr, pbuf, sizeof (pbuf))) + if (target_read_memory (dyn_ptr, pbuf, pbuf_size)) return 0; - return extract_unsigned_integer (pbuf, sizeof (pbuf)); + return extract_unsigned_integer (pbuf, pbuf_size); } } } @@ -477,6 +478,20 @@ elf_locate_base (void) (bfd_byte *) x_dynp->d_un.d_ptr); return dyn_ptr; } + else if (dyn_tag == DT_MIPS_RLD_MAP) + { + char *pbuf; + int pbuf_size = TARGET_PTR_BIT / HOST_CHAR_BIT; + + pbuf = alloca (pbuf_size); + /* DT_MIPS_RLD_MAP contains a pointer to the address + of the dynamic link structure. */ + dyn_ptr = bfd_h_get_64 (exec_bfd, + (bfd_byte *) x_dynp->d_un.d_ptr); + if (target_read_memory (dyn_ptr, pbuf, pbuf_size)) + return 0; + return extract_unsigned_integer (pbuf, pbuf_size); + } } } -- 2.11.0