diff options
author | Daniel Jacobowitz <drow@false.org> | 2004-01-17 21:58:54 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2004-01-17 21:58:54 +0000 |
commit | 756fe439bb676a9dc00b2bdbf9eea8a973738f25 (patch) | |
tree | 7fdaf6bde893ca23bbfebe0552ecc55dd5c439bf /gdb/arm-tdep.c | |
parent | e74f0f0215a82ede8ebc705f84dde6aa5196c277 (diff) | |
download | fsf-binutils-gdb-756fe439bb676a9dc00b2bdbf9eea8a973738f25.zip fsf-binutils-gdb-756fe439bb676a9dc00b2bdbf9eea8a973738f25.tar.gz fsf-binutils-gdb-756fe439bb676a9dc00b2bdbf9eea8a973738f25.tar.bz2 |
* arm-tdep.c (arm_write_pc): New function.
(arm_gdbarch_init): Call set_gdbarch_write_pc.
Diffstat (limited to 'gdb/arm-tdep.c')
-rw-r--r-- | gdb/arm-tdep.c | 19 |
1 files changed, 18 insertions, 1 deletions
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); |