mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-04 05:48:20 +08:00
2001-12-19 Elena Zannoni <ezannoni@redhat.com>
* corefile.c (do_captured_read_memory_integer, safe_read_memory_integer): New functions. * gdbcore.h (safe_read_memory_integer): Export. * arm-tdep.c (arm_scan_prologue): Use safe_read_memory_integer, to read the frame value, to capture calls to error().
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2001-12-19 Elena Zannoni <ezannoni@redhat.com>
|
||||||
|
|
||||||
|
* corefile.c (do_captured_read_memory_integer,
|
||||||
|
safe_read_memory_integer): New functions.
|
||||||
|
* gdbcore.h (safe_read_memory_integer): Export.
|
||||||
|
* arm-tdep.c (arm_scan_prologue): Use safe_read_memory_integer,
|
||||||
|
to read the frame value, to capture calls to error().
|
||||||
|
|
||||||
2001-12-19 Jim Blandy <jimb@redhat.com>
|
2001-12-19 Jim Blandy <jimb@redhat.com>
|
||||||
|
|
||||||
* s390-tdep.c (s390_register_name): S390_LAST_REGNUM is, in fact,
|
* s390-tdep.c (s390_register_name): S390_LAST_REGNUM is, in fact,
|
||||||
|
@ -727,6 +727,7 @@ static void
|
|||||||
arm_scan_prologue (struct frame_info *fi)
|
arm_scan_prologue (struct frame_info *fi)
|
||||||
{
|
{
|
||||||
int regno, sp_offset, fp_offset;
|
int regno, sp_offset, fp_offset;
|
||||||
|
LONGEST return_value;
|
||||||
CORE_ADDR prologue_start, prologue_end, current_pc;
|
CORE_ADDR prologue_start, prologue_end, current_pc;
|
||||||
|
|
||||||
/* Check if this function is already in the cache of frame information. */
|
/* Check if this function is already in the cache of frame information. */
|
||||||
@ -791,9 +792,13 @@ arm_scan_prologue (struct frame_info *fi)
|
|||||||
{
|
{
|
||||||
/* Get address of the stmfd in the prologue of the callee; the saved
|
/* Get address of the stmfd in the prologue of the callee; the saved
|
||||||
PC is the address of the stmfd + 8. */
|
PC is the address of the stmfd + 8. */
|
||||||
prologue_start = ADDR_BITS_REMOVE (read_memory_integer (fi->frame, 4))
|
if (!safe_read_memory_integer (fi->frame, 4, &return_value))
|
||||||
- 8;
|
return;
|
||||||
prologue_end = prologue_start + 64; /* See above. */
|
else
|
||||||
|
{
|
||||||
|
prologue_start = ADDR_BITS_REMOVE (return_value) - 8;
|
||||||
|
prologue_end = prologue_start + 64; /* See above. */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now search the prologue looking for instructions that set up the
|
/* Now search the prologue looking for instructions that set up the
|
||||||
|
@ -262,6 +262,41 @@ dis_asm_print_address (bfd_vma addr, struct disassemble_info *info)
|
|||||||
|
|
||||||
/* Read an integer from debugged memory, given address and number of bytes. */
|
/* Read an integer from debugged memory, given address and number of bytes. */
|
||||||
|
|
||||||
|
struct captured_read_memory_integer_arguments
|
||||||
|
{
|
||||||
|
CORE_ADDR memaddr;
|
||||||
|
int len;
|
||||||
|
LONGEST result;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
do_captured_read_memory_integer (void *data)
|
||||||
|
{
|
||||||
|
struct captured_read_memory_integer_arguments *args = (struct captured_read_memory_integer_arguments*) data;
|
||||||
|
CORE_ADDR memaddr = args->memaddr;
|
||||||
|
int len = args->len;
|
||||||
|
|
||||||
|
args->result = read_memory_integer (memaddr, len);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
safe_read_memory_integer (CORE_ADDR memaddr, int len, LONGEST *return_value)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
struct captured_read_memory_integer_arguments args;
|
||||||
|
args.memaddr = memaddr;
|
||||||
|
args.len = len;
|
||||||
|
|
||||||
|
status = catch_errors (do_captured_read_memory_integer, &args,
|
||||||
|
"", RETURN_MASK_ALL);
|
||||||
|
if (!status)
|
||||||
|
*return_value = args.result;
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
LONGEST
|
LONGEST
|
||||||
read_memory_integer (CORE_ADDR memaddr, int len)
|
read_memory_integer (CORE_ADDR memaddr, int len)
|
||||||
{
|
{
|
||||||
|
@ -55,6 +55,7 @@ extern void read_memory (CORE_ADDR memaddr, char *myaddr, int len);
|
|||||||
bytes. */
|
bytes. */
|
||||||
|
|
||||||
extern LONGEST read_memory_integer (CORE_ADDR memaddr, int len);
|
extern LONGEST read_memory_integer (CORE_ADDR memaddr, int len);
|
||||||
|
extern int safe_read_memory_integer (CORE_ADDR memaddr, int len, LONGEST *return_value);
|
||||||
|
|
||||||
/* Read an unsigned integer from debugged memory, given address and
|
/* Read an unsigned integer from debugged memory, given address and
|
||||||
number of bytes. */
|
number of bytes. */
|
||||||
|
Reference in New Issue
Block a user