2011-02-18 Yao Qi <yao@codesourcery.com>
* gdb/arm-tdep.c (arm_displaced_step_copy_insn): Move code to ... (arm_process_displaced_insn): .. here. Remove parameter INSN. (thumb_process_displaced_insn): New. * gdb/arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Update call to arm_process_displaced_insn. * gdb/arm-tdep.h : Update declaration of arm_process_displaced_insn.
This commit is contained in:
parent
0bbd5bccf3
commit
b434a28f71
|
@ -1,3 +1,12 @@
|
||||||
|
2011-02-18 Yao Qi <yao@codesourcery.com>
|
||||||
|
|
||||||
|
* gdb/arm-tdep.c (arm_displaced_step_copy_insn): Move code to ...
|
||||||
|
(arm_process_displaced_insn): .. here. Remove parameter INSN.
|
||||||
|
(thumb_process_displaced_insn): New.
|
||||||
|
* gdb/arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Update
|
||||||
|
call to arm_process_displaced_insn.
|
||||||
|
* gdb/arm-tdep.h : Update declaration of arm_process_displaced_insn.
|
||||||
|
|
||||||
2011-02-17 Tom Tromey <tromey@redhat.com>
|
2011-02-17 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* dwarf2loc.h (dwarf2_compile_expr_to_ax): Declare.
|
* dwarf2loc.h (dwarf2_compile_expr_to_ax): Declare.
|
||||||
|
|
|
@ -913,18 +913,10 @@ arm_linux_displaced_step_copy_insn (struct gdbarch *gdbarch,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
|
||||||
uint32_t insn = read_memory_unsigned_integer (from, 4, byte_order);
|
|
||||||
|
|
||||||
if (debug_displaced)
|
|
||||||
fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
|
|
||||||
"at %.8lx\n", (unsigned long) insn,
|
|
||||||
(unsigned long) from);
|
|
||||||
|
|
||||||
/* Override the default handling of SVC instructions. */
|
/* Override the default handling of SVC instructions. */
|
||||||
dsc->u.svc.copy_svc_os = arm_linux_copy_svc;
|
dsc->u.svc.copy_svc_os = arm_linux_copy_svc;
|
||||||
|
|
||||||
arm_process_displaced_insn (gdbarch, insn, from, to, regs, dsc);
|
arm_process_displaced_insn (gdbarch, from, to, regs, dsc);
|
||||||
}
|
}
|
||||||
|
|
||||||
arm_displaced_init_closure (gdbarch, from, to, dsc);
|
arm_displaced_init_closure (gdbarch, from, to, dsc);
|
||||||
|
|
|
@ -6833,16 +6833,22 @@ decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn, CORE_ADDR to,
|
||||||
return copy_undef (gdbarch, insn, dsc); /* Possibly unreachable. */
|
return copy_undef (gdbarch, insn, dsc); /* Possibly unreachable. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
thumb_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
|
||||||
|
CORE_ADDR to, struct regcache *regs,
|
||||||
|
struct displaced_step_closure *dsc)
|
||||||
|
{
|
||||||
|
error (_("Displaced stepping is only supported in ARM mode"));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
arm_process_displaced_insn (struct gdbarch *gdbarch, uint32_t insn,
|
arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
|
||||||
CORE_ADDR from, CORE_ADDR to,
|
CORE_ADDR to, struct regcache *regs,
|
||||||
struct regcache *regs,
|
|
||||||
struct displaced_step_closure *dsc)
|
struct displaced_step_closure *dsc)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
|
||||||
if (!displaced_in_arm_mode (regs))
|
uint32_t insn;
|
||||||
error (_("Displaced stepping is only supported in ARM mode"));
|
|
||||||
|
|
||||||
/* Most displaced instructions use a 1-instruction scratch space, so set this
|
/* Most displaced instructions use a 1-instruction scratch space, so set this
|
||||||
here and override below if/when necessary. */
|
here and override below if/when necessary. */
|
||||||
|
@ -6852,6 +6858,15 @@ arm_process_displaced_insn (struct gdbarch *gdbarch, uint32_t insn,
|
||||||
dsc->cleanup = NULL;
|
dsc->cleanup = NULL;
|
||||||
dsc->wrote_to_pc = 0;
|
dsc->wrote_to_pc = 0;
|
||||||
|
|
||||||
|
if (!displaced_in_arm_mode (regs))
|
||||||
|
return thumb_process_displaced_insn (gdbarch, from, to, regs, dsc);
|
||||||
|
|
||||||
|
insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
|
||||||
|
if (debug_displaced)
|
||||||
|
fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
|
||||||
|
"at %.8lx\n", (unsigned long) insn,
|
||||||
|
(unsigned long) from);
|
||||||
|
|
||||||
if ((insn & 0xf0000000) == 0xf0000000)
|
if ((insn & 0xf0000000) == 0xf0000000)
|
||||||
err = decode_unconditional (gdbarch, insn, regs, dsc);
|
err = decode_unconditional (gdbarch, insn, regs, dsc);
|
||||||
else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
|
else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
|
||||||
|
@ -6922,15 +6937,7 @@ arm_displaced_step_copy_insn (struct gdbarch *gdbarch,
|
||||||
{
|
{
|
||||||
struct displaced_step_closure *dsc
|
struct displaced_step_closure *dsc
|
||||||
= xmalloc (sizeof (struct displaced_step_closure));
|
= xmalloc (sizeof (struct displaced_step_closure));
|
||||||
enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
|
arm_process_displaced_insn (gdbarch, from, to, regs, dsc);
|
||||||
uint32_t insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
|
|
||||||
|
|
||||||
if (debug_displaced)
|
|
||||||
fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
|
|
||||||
"at %.8lx\n", (unsigned long) insn,
|
|
||||||
(unsigned long) from);
|
|
||||||
|
|
||||||
arm_process_displaced_insn (gdbarch, insn, from, to, regs, dsc);
|
|
||||||
arm_displaced_init_closure (gdbarch, from, to, dsc);
|
arm_displaced_init_closure (gdbarch, from, to, dsc);
|
||||||
|
|
||||||
return dsc;
|
return dsc;
|
||||||
|
|
|
@ -284,9 +284,8 @@ enum pc_write_style
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
arm_process_displaced_insn (struct gdbarch *gdbarch, uint32_t insn,
|
arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
|
||||||
CORE_ADDR from, CORE_ADDR to,
|
CORE_ADDR to, struct regcache *regs,
|
||||||
struct regcache *regs,
|
|
||||||
struct displaced_step_closure *dsc);
|
struct displaced_step_closure *dsc);
|
||||||
extern void
|
extern void
|
||||||
arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
|
arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
|
||||||
|
|
Loading…
Reference in New Issue