* arm-tdep.c (arm_write_pc): New function.
authorDaniel Jacobowitz <drow@false.org>
Sat, 17 Jan 2004 21:58:54 +0000 (21:58 +0000)
committerDaniel Jacobowitz <drow@false.org>
Sat, 17 Jan 2004 21:58:54 +0000 (21:58 +0000)
(arm_gdbarch_init): Call set_gdbarch_write_pc.

gdb/ChangeLog
gdb/arm-tdep.c

index 5120f77202bb3c5d91825177ce7f78a6f0fa0b4b..2709bcb5bb63566e5a2999964386fd147c5a0be0 100644 (file)
@@ -1,3 +1,8 @@
+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.
index 1099a69d534df1496c4b2c4cd75e8edb893d57fe..f51b82ed0b45ecc49a8a42f7f2e889b5f9ab9dba 100644 (file)
@@ -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);
+    }
+}
 \f
 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);