Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@mvista.com>
To: gdb-patches@sources.redhat.com
Cc: rearnsha@arm.com
Subject: RFA/ARM: Switch mode when setting PC
Date: Fri, 16 Jan 2004 03:54:00 -0000	[thread overview]
Message-ID: <20040116035402.GA3215@nevyn.them.org> (raw)

This patch fixes several failures in virtfunc.exp for arm-sim/-mthumb.  The
problem is that the non-virtual thunk for pDe->vg() is emitted in ARM mode
and called via _call_via_r2.  But the rest of the program is Thumb mode, and
nothing tells the simulator (or target; I haven't tested this on hardware
yet but I expect the same result) to switch to ARM.  So it gets very
confused.

This is somewhat suboptimal in that if you want, for some reason, to call
something marked as an ARM function with Thumb mode enabled you will have to
set $ps yourself _after_ setting $pc.  I think it's still a good idea,
though.  OK?

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

2004-01-15  Daniel Jacobowitz  <drow@mvista.com>

	* arm-tdep.c (arm_write_pc): New function.
	(arm_gdbarch_init): Call set_gdbarch_write_pc.

Index: arm-tdep.c
===================================================================
RCS file: /big/fsf/rsync/src-cvs/src/gdb/arm-tdep.c,v
retrieving revision 1.156
diff -u -p -r1.156 arm-tdep.c
--- arm-tdep.c	13 Jan 2004 21:38:45 -0000	1.156
+++ arm-tdep.c	16 Jan 2004 03:37:46 -0000
@@ -2689,6 +2689,21 @@ arm_coff_make_msymbol_special(int val, s
     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)
@@ -2850,6 +2865,8 @@ arm_gdbarch_init (struct gdbarch_info in
   set_gdbarch_deprecated_sizeof_call_dummy_words (gdbarch, 0);
 
   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);


             reply	other threads:[~2004-01-16  3:54 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-16  3:54 Daniel Jacobowitz [this message]
2004-01-16  5:43 ` Andrew Cagney
2004-01-16 14:10   ` Daniel Jacobowitz
2004-01-16 14:15     ` Richard Earnshaw
2004-01-16 14:26       ` Daniel Jacobowitz
2004-01-16 14:34       ` Richard Earnshaw
2004-01-16 14:41         ` Daniel Jacobowitz
2004-01-16 15:00           ` Richard Earnshaw
2004-01-16 15:56             ` Daniel Jacobowitz
2004-01-16 16:55               ` Richard Earnshaw
2004-01-16 17:11                 ` Daniel Jacobowitz
2004-01-16 17:28                   ` Richard Earnshaw
2004-01-16 19:12                     ` Andrew Cagney
2004-01-16 17:32     ` Daniel Jacobowitz
2004-01-16 18:57       ` Andrew Cagney
2004-01-17  4:58         ` Daniel Jacobowitz
2004-01-17 10:49           ` Richard Earnshaw
2004-01-17 16:36             ` Andrew Cagney
2004-01-17 16:12           ` Andrew Cagney
2004-01-17 18:54             ` Daniel Jacobowitz
2004-01-17 21:59 ` Daniel Jacobowitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040116035402.GA3215@nevyn.them.org \
    --to=drow@mvista.com \
    --cc=gdb-patches@sources.redhat.com \
    --cc=rearnsha@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox