From: "Kei Sakamoto" <sakamoto.kei@renesas.com>
To: <gdb-patches@sources.redhat.com>
Subject: [RFA/m32r] Unreviewed patch (breakpoint bug)
Date: Mon, 01 Nov 2004 01:08:00 -0000 [thread overview]
Message-ID: <004401c4bfaf$84652660$5169910a@E5A02646> (raw)
In-Reply-To: <017b01c4ba71$7900e8b0$5169910a@E5A02646>
[-- Attachment #1: Type: text/plain, Size: 1453 bytes --]
This is the third ping. It has been three weeks since I posted the
following patch...
Would anyone review it?
Kei Sakamoto
From: "Kei Sakamoto" <sakamoto.kei@renesas.com>
To: <gdb-patches@sources.redhat.com>
Sent: Monday, October 25, 2004 6:03 PM
Subject: [RFA/m32r] Unreviewed patch (breakpoint bug)
> This is the second ping.
> Please review the following patch.
>
> Kei Sakamoto
>
> From: "Kei Sakamoto" <sakamoto.kei@renesas.com>
> To: <gdb-patches@sources.redhat.com>
> Sent: Monday, October 18, 2004 3:43 PM
> Subject: [RFA/m32r] Unreviewed patch (breakpoint bug)
>
> > Hello,
> >
> > Would anyone review this patch?
> > Thank you in advance.
> >
> > Kei Sakamoto
> >
> > From: "Kei Sakamoto" <sakamoto.kei@renesas.com>
> > To: <gdb-patches@sources.redhat.com>
> > Sent: Thursday, October 07, 2004 3:31 PM
> > Subject: [RFA/m32r] Fix breakpoint bug
> >
> > > Hello,
> > >
> > > m32r-tdep.c can't handle breakpoints on instructions executed
> > > in parallel. It does not remove unnecessary parallel execution
> > > bit from instructions and causes illegal instruction errors.
> > >
> > > The attached patch fixes this problem.
> > >
> > > OK to commit?
> > >
> > > 2004-10-07 Kei Sakamoto <sakamoto.kei@renesas.com>
> > >
> > > * m32r-tdep.c (m32r_memory_insert_breakpoint): Remove
> > > unnecessary parallel execution bit.
> > > (m32r_memory_remove_breakpoint): Ditto.
> > > (m32r_breakpoint_from_pc): Update.
[-- Attachment #2: m32r-tdep.patch --]
[-- Type: application/octet-stream, Size: 5182 bytes --]
Index: m32r-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/m32r-tdep.c,v
retrieving revision 1.33
diff -u -r1.33 m32r-tdep.c
--- m32r-tdep.c 7 Oct 2004 01:21:53 -0000 1.33
+++ m32r-tdep.c 7 Oct 2004 04:27:00 -0000
@@ -56,62 +56,56 @@
}
-/* BREAKPOINT */
-#define M32R_BE_BREAKPOINT32 {0x10, 0xf1, 0x70, 0x00}
-#define M32R_LE_BREAKPOINT32 {0xf1, 0x10, 0x00, 0x70}
-#define M32R_BE_BREAKPOINT16 {0x10, 0xf1}
-#define M32R_LE_BREAKPOINT16 {0xf1, 0x10}
-
static int
m32r_memory_insert_breakpoint (CORE_ADDR addr, char *contents_cache)
{
int val;
- unsigned char *bp;
- int bplen;
-
- bplen = (addr & 3) ? 2 : 4;
+ char buf[4];
+ char bp_entry[] = { 0x10, 0xf1 }; /* dpt */
/* Save the memory contents. */
- val = target_read_memory (addr, contents_cache, bplen);
+ val = target_read_memory (addr & 0xfffffffc, contents_cache, 4);
if (val != 0)
return val; /* return error */
/* Determine appropriate breakpoint contents and size for this address. */
if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
{
- if (((addr & 3) == 0)
- && ((contents_cache[0] & 0x80) || (contents_cache[2] & 0x80)))
+ if ((addr & 3) == 0)
{
- static unsigned char insn[] = M32R_BE_BREAKPOINT32;
- bp = insn;
- bplen = sizeof (insn);
+ buf[0] = bp_entry[0];
+ buf[1] = bp_entry[1];
+ buf[2] = contents_cache[2] & 0x7f;
+ buf[3] = contents_cache[3];
}
else
{
- static unsigned char insn[] = M32R_BE_BREAKPOINT16;
- bp = insn;
- bplen = sizeof (insn);
+ buf[0] = contents_cache[0];
+ buf[1] = contents_cache[1];
+ buf[2] = bp_entry[0];
+ buf[3] = bp_entry[1];
}
}
- else
- { /* little-endian */
- if (((addr & 3) == 0)
- && ((contents_cache[1] & 0x80) || (contents_cache[3] & 0x80)))
- {
- static unsigned char insn[] = M32R_LE_BREAKPOINT32;
- bp = insn;
- bplen = sizeof (insn);
+ else /* little-endian */
+ {
+ if ((addr & 3) == 0)
+ {
+ buf[0] = contents_cache[0];
+ buf[1] = contents_cache[1] & 0x7f;
+ buf[2] = bp_entry[1];
+ buf[3] = bp_entry[0];
}
else
{
- static unsigned char insn[] = M32R_LE_BREAKPOINT16;
- bp = insn;
- bplen = sizeof (insn);
+ buf[0] = bp_entry[1];
+ buf[1] = bp_entry[0];
+ buf[2] = contents_cache[2];
+ buf[3] = contents_cache[3];
}
}
/* Write the breakpoint. */
- val = target_write_memory (addr, (char *) bp, bplen);
+ val = target_write_memory (addr & 0xfffffffc, buf, 4);
return val;
}
@@ -119,47 +113,35 @@
m32r_memory_remove_breakpoint (CORE_ADDR addr, char *contents_cache)
{
int val;
- int bplen;
+ char buf[4];
- /* Determine appropriate breakpoint contents and size for this address. */
+ buf[0] = contents_cache[0];
+ buf[1] = contents_cache[1];
+ buf[2] = contents_cache[2];
+ buf[3] = contents_cache[3];
+
+ /* Remove parallel bit. */
if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
{
- if (((addr & 3) == 0)
- && ((contents_cache[0] & 0x80) || (contents_cache[2] & 0x80)))
- {
- static unsigned char insn[] = M32R_BE_BREAKPOINT32;
- bplen = sizeof (insn);
- }
- else
- {
- static unsigned char insn[] = M32R_BE_BREAKPOINT16;
- bplen = sizeof (insn);
- }
+ if ((buf[0] & 0x80) == 0 && (buf[2] & 0x80) != 0)
+ buf[2] &= 0x7f;
}
- else
+ else /* little-endian */
{
- /* little-endian */
- if (((addr & 3) == 0)
- && ((contents_cache[1] & 0x80) || (contents_cache[3] & 0x80)))
- {
- static unsigned char insn[] = M32R_BE_BREAKPOINT32;
- bplen = sizeof (insn);
- }
- else
- {
- static unsigned char insn[] = M32R_BE_BREAKPOINT16;
- bplen = sizeof (insn);
- }
+ if ((buf[3] & 0x80) == 0 && (buf[1] & 0x80) != 0)
+ buf[1] &= 0x7f;
}
/* Write contents. */
- val = target_write_memory (addr, contents_cache, bplen);
+ val = target_write_memory (addr & 0xfffffffc, buf, 4);
return val;
}
static const unsigned char *
m32r_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
{
+ static char be_bp_entry[] = { 0x10, 0xf1, 0x70, 0x00 }; /* dpt -> nop */
+ static char le_bp_entry[] = { 0x00, 0x70, 0xf1, 0x10 }; /* dpt -> nop */
unsigned char *bp;
/* Determine appropriate breakpoint. */
@@ -167,30 +149,26 @@
{
if ((*pcptr & 3) == 0)
{
- static unsigned char insn[] = M32R_BE_BREAKPOINT32;
- bp = insn;
- *lenptr = sizeof (insn);
+ bp = be_bp_entry;
+ *lenptr = 4;
}
else
{
- static unsigned char insn[] = M32R_BE_BREAKPOINT16;
- bp = insn;
- *lenptr = sizeof (insn);
+ bp = be_bp_entry;
+ *lenptr = 2;
}
}
else
{
if ((*pcptr & 3) == 0)
{
- static unsigned char insn[] = M32R_LE_BREAKPOINT32;
- bp = insn;
- *lenptr = sizeof (insn);
+ bp = le_bp_entry;
+ *lenptr = 4;
}
else
{
- static unsigned char insn[] = M32R_LE_BREAKPOINT16;
- bp = insn;
- *lenptr = sizeof (insn);
+ bp = le_bp_entry + 2;
+ *lenptr = 2;
}
}
next prev parent reply other threads:[~2004-11-01 1:08 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-07 6:32 [RFA/m32r] Fix breakpoint bug Kei Sakamoto
2004-10-18 6:43 ` [RFA/m32r] Unreviewed patch (breakpoint bug) Kei Sakamoto
2004-10-25 9:02 ` Kei Sakamoto
2004-11-01 1:08 ` Kei Sakamoto [this message]
2004-10-25 16:19 ` [RFA/m32r] Fix breakpoint bug Daniel Jacobowitz
2004-10-26 5:45 ` Kei Sakamoto
2004-11-04 0:21 ` Andrew Cagney
2004-11-04 0:50 ` Kei Sakamoto
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='004401c4bfaf$84652660$5169910a@E5A02646' \
--to=sakamoto.kei@renesas.com \
--cc=gdb-patches@sources.redhat.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