From: Anton Blanchard <anton@samba.org>
To: gdb-patches@sourceware.org, brobecker@adacore.com,
emachado@linux.vnet.ibm.com, luis_gustavo@mentor.com,
ulrich.weigand@de.ibm.com
Subject: [PATCH 4/4] Add lbarx/stbcx., lharx/sthcx. and lqarx/stqcx. single stepping
Date: Fri, 28 Mar 2014 03:42:00 -0000 [thread overview]
Message-ID: <1395978111-30706-4-git-send-email-anton@samba.org> (raw)
In-Reply-To: <1395978111-30706-1-git-send-email-anton@samba.org>
Newer CPUs support byte, half word and quad word atomic update
sequences.
gdb/testsuite/
2014-03-28 Anton Blanchard <anton@samba.org>
* rs6000-tdep.c (ppc_deal_with_atomic_sequence): Add single step
support for lbarx/stbcx., lharx/sthcx. and lqarx/stqcx.
---
gdb/rs6000-tdep.c | 36 ++++++++++++++++++++++++++----------
1 file changed, 26 insertions(+), 10 deletions(-)
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index be14e39..7257cc3 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -1070,14 +1070,21 @@ ppc_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
/* Instruction masks used during single-stepping of atomic sequences. */
#define LWARX_MASK 0xfc0007fe
+#define LBARX_INSTRUCTION 0x7c000068
+#define LHARX_INSTRUCTION 0x7c0000e8
#define LWARX_INSTRUCTION 0x7c000028
#define LDARX_INSTRUCTION 0x7c0000A8
+#define LQARX_INSTRUCTION 0x7c000228
+
#define STWCX_MASK 0xfc0007ff
+#define STBCX_INSTRUCTION 0x7c00056d
+#define STHCX_INSTRUCTION 0x7c0005ad
#define STWCX_INSTRUCTION 0x7c00012d
#define STDCX_INSTRUCTION 0x7c0001ad
+#define STQCX_INSTRUCTION 0x7c00016d
-/* Checks for an atomic sequence of instructions beginning with a LWARX/LDARX
- instruction and ending with a STWCX/STDCX instruction. If such a sequence
+/* Checks for an atomic sequence of instructions beginning with a l[bhwdq]arx
+ instruction and ending with a st[bhwdq]cx instruction. If such a sequence
is found, attempt to step through it. A breakpoint is placed at the end of
the sequence. */
@@ -1098,9 +1105,12 @@ ppc_deal_with_atomic_sequence (struct frame_info *frame)
const int atomic_sequence_length = 16; /* Instruction sequence length. */
int opcode; /* Branch instruction's OPcode. */
- /* Assume all atomic sequences start with a lwarx/ldarx instruction. */
- if ((insn & LWARX_MASK) != LWARX_INSTRUCTION
- && (insn & LWARX_MASK) != LDARX_INSTRUCTION)
+ /* Assume all atomic sequences start with a l[bhwdq]arx instruction. */
+ if ((insn & LWARX_MASK) != LBARX_INSTRUCTION
+ && (insn & LWARX_MASK) != LHARX_INSTRUCTION
+ && (insn & LWARX_MASK) != LWARX_INSTRUCTION
+ && (insn & LWARX_MASK) != LDARX_INSTRUCTION
+ && (insn & LWARX_MASK) != LQARX_INSTRUCTION)
return 0;
/* Assume that no atomic sequence is longer than "atomic_sequence_length"
@@ -1127,14 +1137,20 @@ ppc_deal_with_atomic_sequence (struct frame_info *frame)
last_breakpoint++;
}
- if ((insn & STWCX_MASK) == STWCX_INSTRUCTION
- || (insn & STWCX_MASK) == STDCX_INSTRUCTION)
+ if ((insn & STWCX_MASK) == STBCX_INSTRUCTION
+ || (insn & STWCX_MASK) == STHCX_INSTRUCTION
+ || (insn & STWCX_MASK) == STWCX_INSTRUCTION
+ || (insn & STWCX_MASK) == STDCX_INSTRUCTION
+ || (insn & STWCX_MASK) == STQCX_INSTRUCTION)
break;
}
- /* Assume that the atomic sequence ends with a stwcx/stdcx instruction. */
- if ((insn & STWCX_MASK) != STWCX_INSTRUCTION
- && (insn & STWCX_MASK) != STDCX_INSTRUCTION)
+ /* Assume that the atomic sequence ends with a st[bhwdq]cx instruction. */
+ if ((insn & STWCX_MASK) != STBCX_INSTRUCTION
+ && (insn & STWCX_MASK) != STHCX_INSTRUCTION
+ && (insn & STWCX_MASK) != STWCX_INSTRUCTION
+ && (insn & STWCX_MASK) != STDCX_INSTRUCTION
+ && (insn & STWCX_MASK) != STQCX_INSTRUCTION)
return 0;
closing_insn = loc;
--
1.8.3.2
next prev parent reply other threads:[~2014-03-28 3:42 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-28 3:41 [PATCH 1/4] Fix ppc64 single step over atomic sequence testcase Anton Blanchard
2014-03-28 3:42 ` [PATCH 2/4] Support up to 3 conditional branches in an atomic sequence Anton Blanchard
2014-03-28 13:12 ` Joel Brobecker
2014-03-28 17:13 ` Pedro Alves
2014-03-28 17:22 ` Pedro Alves
2014-03-28 17:32 ` Joel Brobecker
2014-03-28 17:58 ` Pedro Alves
2014-03-28 18:10 ` Joel Brobecker
2014-03-28 3:42 ` Anton Blanchard [this message]
2014-03-28 13:17 ` [PATCH 4/4] Add lbarx/stbcx., lharx/sthcx. and lqarx/stqcx. single stepping Joel Brobecker
2014-03-28 3:42 ` [PATCH 3/4] Add multiple branches to ppc64 single step through atomic sequence testcase Anton Blanchard
2014-03-28 13:14 ` Joel Brobecker
2014-03-28 13:05 ` [PATCH 1/4] Fix ppc64 single step over " Joel Brobecker
2014-03-31 2:55 ` Anton Blanchard
2014-03-28 13:13 ` Ulrich Weigand
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=1395978111-30706-4-git-send-email-anton@samba.org \
--to=anton@samba.org \
--cc=brobecker@adacore.com \
--cc=emachado@linux.vnet.ibm.com \
--cc=gdb-patches@sourceware.org \
--cc=luis_gustavo@mentor.com \
--cc=ulrich.weigand@de.ibm.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