2011-02-16 Yao Qi <yao@qiyaows>
* infrun.c (get_displaced_step_closure_by_addr): New. * inferior.h: Declare it. * arm-tdep.c: (arm_pc_is_thumb): Call get_displaced_step_closure_by_addr. Adjust MEMADDR if it returns non-NULL.
This commit is contained in:
parent
3dfcbbd281
commit
a42244dbec
4 changed files with 42 additions and 0 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2011-02-16 Yao Qi <yao@qiyaows>
|
||||||
|
|
||||||
|
* infrun.c (get_displaced_step_closure_by_addr): New.
|
||||||
|
* inferior.h: Declare it.
|
||||||
|
* arm-tdep.c: (arm_pc_is_thumb): Call
|
||||||
|
get_displaced_step_closure_by_addr. Adjust MEMADDR if it
|
||||||
|
returns non-NULL.
|
||||||
|
|
||||||
2011-02-16 Pedro Alves <pedro@codesourcery.com>
|
2011-02-16 Pedro Alves <pedro@codesourcery.com>
|
||||||
Jan Kratochvil <jan.kratochvil@redhat.com>
|
Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
|
|
@ -369,6 +369,20 @@ arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
|
||||||
struct obj_section *sec;
|
struct obj_section *sec;
|
||||||
struct minimal_symbol *sym;
|
struct minimal_symbol *sym;
|
||||||
char type;
|
char type;
|
||||||
|
struct displaced_step_closure* dsc
|
||||||
|
= get_displaced_step_closure_by_addr(memaddr);
|
||||||
|
|
||||||
|
/* If checking the mode of displaced instruction in copy area, the mode
|
||||||
|
should be determined by instruction on the original address. */
|
||||||
|
if (dsc)
|
||||||
|
{
|
||||||
|
if (debug_displaced)
|
||||||
|
fprintf_unfiltered (gdb_stdlog,
|
||||||
|
"displaced: check mode of %.8lx instead of %.8lx\n",
|
||||||
|
(unsigned long) dsc->insn_addr,
|
||||||
|
(unsigned long) memaddr);
|
||||||
|
memaddr = dsc->insn_addr;
|
||||||
|
}
|
||||||
|
|
||||||
/* If bit 0 of the address is set, assume this is a Thumb address. */
|
/* If bit 0 of the address is set, assume this is a Thumb address. */
|
||||||
if (IS_THUMB_ADDR (memaddr))
|
if (IS_THUMB_ADDR (memaddr))
|
||||||
|
|
|
@ -366,6 +366,8 @@ extern int debug_displaced;
|
||||||
void displaced_step_dump_bytes (struct ui_file *file,
|
void displaced_step_dump_bytes (struct ui_file *file,
|
||||||
const gdb_byte *buf, size_t len);
|
const gdb_byte *buf, size_t len);
|
||||||
|
|
||||||
|
struct displaced_step_closure*
|
||||||
|
get_displaced_step_closure_by_addr (CORE_ADDR addr);
|
||||||
|
|
||||||
/* Possible values for gdbarch_call_dummy_location. */
|
/* Possible values for gdbarch_call_dummy_location. */
|
||||||
#define ON_STACK 1
|
#define ON_STACK 1
|
||||||
|
|
18
gdb/infrun.c
18
gdb/infrun.c
|
@ -1078,6 +1078,24 @@ add_displaced_stepping_state (int pid)
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If inferior is in displaced stepping, and ADDR equals to starting address
|
||||||
|
of copy area, return corresponding displaced_step_closure. Otherwise,
|
||||||
|
return NULL. */
|
||||||
|
|
||||||
|
struct displaced_step_closure*
|
||||||
|
get_displaced_step_closure_by_addr (CORE_ADDR addr)
|
||||||
|
{
|
||||||
|
struct displaced_step_inferior_state *displaced
|
||||||
|
= get_displaced_stepping_state (ptid_get_pid (inferior_ptid));
|
||||||
|
|
||||||
|
/* If checking the mode of displaced instruction in copy area. */
|
||||||
|
if (displaced && !ptid_equal (displaced->step_ptid, null_ptid)
|
||||||
|
&& (displaced->step_copy == addr))
|
||||||
|
return displaced->step_closure;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Remove the displaced stepping state of process PID. */
|
/* Remove the displaced stepping state of process PID. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue