aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2004-01-17 21:58:54 +0000
committerDaniel Jacobowitz <drow@false.org>2004-01-17 21:58:54 +0000
commit756fe439bb676a9dc00b2bdbf9eea8a973738f25 (patch)
tree7fdaf6bde893ca23bbfebe0552ecc55dd5c439bf
parente74f0f0215a82ede8ebc705f84dde6aa5196c277 (diff)
downloadgdb-756fe439bb676a9dc00b2bdbf9eea8a973738f25.zip
gdb-756fe439bb676a9dc00b2bdbf9eea8a973738f25.tar.gz
gdb-756fe439bb676a9dc00b2bdbf9eea8a973738f25.tar.bz2
* arm-tdep.c (arm_write_pc): New function.
(arm_gdbarch_init): Call set_gdbarch_write_pc.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/arm-tdep.c19
2 files changed, 23 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5120f77..2709bcb 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2004-01-17 Daniel Jacobowitz <drow@mvista.com>
+ * arm-tdep.c (arm_write_pc): New function.
+ (arm_gdbarch_init): Call set_gdbarch_write_pc.
+
+2004-01-17 Daniel Jacobowitz <drow@mvista.com>
+
* breakpoint.c (must_shift_inst_regs): Delete.
(bpstat_stop_status): Delete references to DECR_PC_AFTER_HW_BREAK
and SHIFT_INST_REGS.
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 1099a69..f51b82e 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -1,6 +1,6 @@
/* Common target dependent code for GDB on ARM systems.
Copyright 1988, 1989, 1991, 1992, 1993, 1995, 1996, 1998, 1999, 2000,
- 2001, 2002, 2003 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GDB.
@@ -2689,6 +2689,21 @@ arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
MSYMBOL_SET_SPECIAL (msym);
}
+static void
+arm_write_pc (CORE_ADDR pc, ptid_t ptid)
+{
+ write_register_pid (ARM_PC_REGNUM, pc, ptid);
+
+ /* If necessary, set the T bit. */
+ if (arm_apcs_32)
+ {
+ CORE_ADDR val = read_register_pid (ARM_PS_REGNUM, ptid);
+ if (arm_pc_is_thumb (pc))
+ write_register_pid (ARM_PS_REGNUM, val | 0x20, ptid);
+ else
+ write_register_pid (ARM_PS_REGNUM, val & ~(CORE_ADDR) 0x20, ptid);
+ }
+}
static enum gdb_osabi
arm_elf_osabi_sniffer (bfd *abfd)
@@ -2851,6 +2866,8 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
+ set_gdbarch_write_pc (gdbarch, arm_write_pc);
+
/* Frame handling. */
set_gdbarch_unwind_dummy_id (gdbarch, arm_unwind_dummy_id);
set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);