Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/external/gpl3/gdb/dist/gdb Since sh3 has got PT_STEP, nuke s...
details: https://anonhg.NetBSD.org/src/rev/848a726b2e6f
branches: trunk
changeset: 770758:848a726b2e6f
user: uwe <uwe%NetBSD.org@localhost>
date: Mon Oct 31 23:23:52 2011 +0000
description:
Since sh3 has got PT_STEP, nuke software single-stepping entirely.
diffstat:
external/gpl3/gdb/dist/gdb/shnbsd-tdep.c | 198 -------------------------------
1 files changed, 0 insertions(+), 198 deletions(-)
diffs (215 lines):
diff -r ffd3393bfada -r 848a726b2e6f external/gpl3/gdb/dist/gdb/shnbsd-tdep.c
--- a/external/gpl3/gdb/dist/gdb/shnbsd-tdep.c Mon Oct 31 23:10:16 2011 +0000
+++ b/external/gpl3/gdb/dist/gdb/shnbsd-tdep.c Mon Oct 31 23:23:52 2011 +0000
@@ -175,200 +175,6 @@
regcache_raw_collect (regcache, GBR_REGNUM, regs + (21 * 4));
}
-/* Hitachi SH instruction encoding masks and opcodes */
-
-/*
- * xxxx x--x ---- ---- 0xf900 mask
- * 1001 1**1 ---- ---- 0x8900 match
- * BT 1000 1001 dddd dddd
- * BF 1000 1011 dddd dddd
- * BT/S 1000 1101 dddd dddd
- * BF/S 1000 1111 dddd dddd
- * ---- --x- ---- ---- T or F?
- * ---- -x-- ---- ---- has delay slot
- */
-#define CONDITIONAL_BRANCH_P(insn) (((insn) & 0xf900) == 0x8900)
-#define CONDITIONAL_BRANCH_TAKEN_P(insn, sr) ((((insn) >> 9) ^ sr) & 0x1)
-#define CONDITIONAL_BRANCH_SLOT_P(insn) (((insn) & 0x0400) != 0)
-
-/*
- * xxx- ---- ---- ---- 0xe000 mask
- * 101* ---- ---- ---- 0xa000 match
- * BRA 1010 dddd dddd dddd
- * BSR 1011 dddd dddd dddd
- */
-#define BRANCH_P(insn) (((insn) & 0xe000) == 0xa000)
-
-/*
- * xxxx ---- xx-x xxxx 0xf0df mask
- * 0000 ---- 00*0 0011 0x0003 match
- * BSRF 0000 rrrr 0000 0011
- * BRAF 0000 rrrr 0010 0011
- */
-#define BRANCH_FAR_P(insn) (((insn) & 0xf0df) == 0x0003)
-#define BRANCH_FAR_REG(insn) (((insn) >> 8) & 0xf)
-
-/*
- * xxxx ---- xx-x xxxx 0xf0df mask
- * 0100 ---- 00*0 1011 0x400b match
- * JSR 0100 rrrr 0000 1011
- * JMP 0100 rrrr 0010 1011
- */
-#define JUMP_P(insn) (((insn) & 0xf0df) == 0x400b)
-#define JUMP_REG(insn) (((insn) >> 8) & 0xf)
-
-/*
- * RTS 0000 0000 0000 1011
- * RTE 0000 0000 0010 1011
- */
-#define RTS_INSN 0x000b
-#define RTE_INSN 0x002b
-
-/*
- * xxxx xxxx ---- ---- 0xff00 mask
- *TRAPA 1100 0011 tttt tttt 0xc300 match
- */
-#define TRAPA_P(insn) (((insn) & 0xff00) == 0xc300)
-
-
-/* signed 8-bit displacement */
-static int
-shnbsd_displacement_8 (unsigned short insn)
-{
- int displacement;
-
- if (insn & 0x80)
- displacement = insn | 0xffffff00;
- else
- displacement = insn & 0x000000ff;
-
- return displacement;
-}
-
-/* signed 12-bit displacement */
-static int
-shnbsd_displacement_12 (unsigned short insn)
-{
- int displacement;
-
- if (insn & 0x800)
- displacement = insn | 0xfffff000;
- else
- displacement = insn & 0x00000fff;
-
- return displacement;
-}
-
-static CORE_ADDR
-shnbsd_get_next_pc (struct regcache *regcache, CORE_ADDR pc)
-{
- unsigned short insn;
- ULONGEST sr;
- LONGEST displacement;
- int reg;
- CORE_ADDR next_pc;
- int delay_slot;
- enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
-
- insn = read_memory_integer (pc, sizeof (insn), byte_order);
- delay_slot = 0;
-
- /* As we cannot step through the delay slot, we break at the target
- address of the control transfer. One tricky case is when the
- target of the jump is the delay slot of that same instruction
- (e.g. PLT entries use such code). In that case we cannot set the
- break to the target, as trapa is illegal in the delay slot. Set
- break to the next instruction instead, we are guaranteed to
- arrive there, as control transfers are illegal in the delay
- slot. */
-
- /* BT, BF, BT/S, BF/S */
- if (CONDITIONAL_BRANCH_P(insn))
- {
- regcache_cooked_read_unsigned (regcache, SR_REGNUM, &sr);
-
- delay_slot = CONDITIONAL_BRANCH_SLOT_P(insn);
- if (!CONDITIONAL_BRANCH_TAKEN_P(insn, sr))
- next_pc = pc + (delay_slot ? 4 : 2);
- else
- {
- displacement = shnbsd_displacement_8 (insn);
-
- next_pc = pc + 4 + (displacement << 1);
- }
- }
-
- /* BRA, BSR */
- else if (BRANCH_P(insn))
- {
- displacement = shnbsd_displacement_12 (insn);
-
- next_pc = pc + 4 + (displacement << 1);
- delay_slot = 1;
- }
-
- /* BRAF, BSRF */
- else if (BRANCH_FAR_P(insn))
- {
- regcache_cooked_read_signed (regcache, BRANCH_FAR_REG(insn),
- &displacement);
- next_pc = pc + 4 + displacement;
- delay_slot = 1;
- }
-
- /* JMP, JSR */
- else if (JUMP_P(insn))
- {
- regcache_cooked_read_unsigned (regcache, JUMP_REG(insn), &next_pc);
- delay_slot = 1;
- }
-
- /* RTS */
- else if (insn == RTS_INSN)
- {
- regcache_cooked_read_unsigned (regcache, PR_REGNUM, &next_pc);
- delay_slot = 1;
- }
-
- /* RTE - XXX: privileged */
- else if (insn == RTE_INSN)
- {
- regcache_cooked_read_unsigned (regcache, SPC_REGNUM, &next_pc);
- delay_slot = 1;
- }
-
- /* TRAPA */
- else if (TRAPA_P(insn))
- next_pc = pc + 2; /* XXX: after return from syscall */
-
- /* not a control transfer instruction */
- else
- next_pc = pc + 2;
-
- /* jumping to our own delay slot? */
- if (delay_slot && next_pc == pc + 2)
- next_pc += 2;
-
- return next_pc;
-}
-
-/* Single step (in a painstaking fashion) by inspecting the current
- instruction and setting a breakpoint on the "next" instruction
- which would be executed.
- */
-int
-shnbsd_software_single_step (struct frame_info *frame)
-{
- struct gdbarch *gdbarch = get_frame_arch (frame);
- struct address_space *aspace = get_frame_address_space (frame);
- struct regcache *regcache= get_current_regcache ();
- CORE_ADDR pc = regcache_read_pc (regcache);
- CORE_ADDR next_pc = shnbsd_get_next_pc (regcache, pc);
-
- insert_single_step_breakpoint (gdbarch, aspace, next_pc);
- return 1;
-}
-
/* SH register sets. */
static struct regset shnbsd_gregset =
@@ -473,10 +279,6 @@
shnbsd_init_abi (struct gdbarch_info info,
struct gdbarch *gdbarch)
{
- /* NetBSD SuperH ports do not provide single step support via ptrace(2);
- we must use software single-stepping. */
- set_gdbarch_software_single_step (gdbarch, shnbsd_software_single_step);
-
set_gdbarch_regset_from_core_section
(gdbarch, shnbsd_regset_from_core_section);
Home |
Main Index |
Thread Index |
Old Index