2012-03-23 Pedro Alves <palves@redhat.com>

* linux-low.c (read_one_ptr): Read the inferior's pointer through
	a variable whose type size is the same as the inferior's pointer
	size.
This commit is contained in:
Pedro Alves 2012-03-23 20:26:14 +00:00
parent f24fcb9dad
commit 485f1ee4f6
2 changed files with 30 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2012-03-23 Pedro Alves <palves@redhat.com>
* linux-low.c (read_one_ptr): Read the inferior's pointer through
a variable whose type size is the same as the inferior's pointer
size.
2012-03-21 Thomas Schwinge <thomas@codesourcery.com>
* linux-arm-low.c (arm_stopped_by_watchpoint): Use siginfo_t instead of

View File

@ -5428,8 +5428,30 @@ get_r_debug (const int pid, const int is_elf64)
static int
read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size)
{
*ptr = 0;
return linux_read_memory (memaddr, (unsigned char *) ptr, ptr_size);
int ret;
/* Go through a union so this works on either big or little endian
hosts, when the inferior's pointer size is smaller than the size
of CORE_ADDR. It is assumed the inferior's endianness is the
same of the superior's. */
union
{
CORE_ADDR core_addr;
unsigned int ui;
unsigned char uc;
} addr;
ret = linux_read_memory (memaddr, &addr.uc, ptr_size);
if (ret == 0)
{
if (ptr_size == sizeof (CORE_ADDR))
*ptr = addr.core_addr;
else if (ptr_size == sizeof (unsigned int))
*ptr = addr.ui;
else
gdb_assert_not_reached ("unhandled pointer size");
}
return ret;
}
struct link_map_offsets