This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH] solib-svr4.c: Add DT_MIPS_RLD_MAP support for 64-bit targets
- From: Kevin Buettner <kevinb at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Fri, 20 Dec 2002 23:45:53 -0700
- Subject: [PATCH] solib-svr4.c: Add DT_MIPS_RLD_MAP support for 64-bit targets
I've just committed the patch below.
* solib-svr4.c (elf_locate_base): Fix sizeof() related bug. Add
DT_MIPS_RLD_MAP case for 64-bit targets.
Index: solib-svr4.c
===================================================================
RCS file: /cvs/src/src/gdb/solib-svr4.c,v
retrieving revision 1.27
diff -u -p -r1.27 solib-svr4.c
--- solib-svr4.c 21 Oct 2002 18:42:40 -0000 1.27
+++ solib-svr4.c 21 Dec 2002 06:39:39 -0000
@@ -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);
}
}
}
@@ -476,6 +477,20 @@ elf_locate_base (void)
dyn_ptr = bfd_h_get_64 (exec_bfd,
(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);
}
}
}