summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2004-03-08 10:15:33 +0000
committerCorinna Vinschen <corinna@vinschen.de>2004-03-08 10:15:33 +0000
commit3ba7b225fbc94fe4f886bc62f524b9b9becdb3f8 (patch)
treee7999dfb0ab8d59ddd03327236a0010c28f700f9
parent9632cbd7534b6fe8515d3f8f41f058058fa0bf60 (diff)
downloadgdb-3ba7b225fbc94fe4f886bc62f524b9b9becdb3f8.tar.gz
Fix PR tdep/1291.
* sh-tdep.c (sh_analyze_prologue): Align PC relative addressing to official SH documentation.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/sh-tdep.c10
2 files changed, 11 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4683f060642..814c2f3cfcb 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2004-03-08 Corinna Vinschen <vinschen@redhat.com>
+
+ Fix PR tdep/1291.
+ * sh-tdep.c (sh_analyze_prologue): Align PC relative addressing
+ to official SH documentation.
+
2004-03-07 Andrew Cagney <cagney@redhat.com>
* ppc-linux-nat.c (ppc_ptrace_cannot_fetch_store_register): Delete
diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
index 9cb5278c4d4..d1e5f597ae0 100644
--- a/gdb/sh-tdep.c
+++ b/gdb/sh-tdep.c
@@ -440,9 +440,9 @@ sh_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
if (reg < 14)
{
sav_reg = reg;
- offset = (((inst & 0xff) ^ 0x80) - 0x80) << 1;
+ offset = (inst & 0xff) << 1;
sav_offset =
- read_memory_integer (((pc + 4) & ~3) + offset, 2);
+ read_memory_integer ((pc + 4) + offset, 2);
}
}
}
@@ -450,13 +450,13 @@ sh_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
{
if (sav_reg < 0)
{
- reg = (inst & 0x0f00) >> 8;
+ reg = GET_TARGET_REG (inst);
if (reg < 14)
{
sav_reg = reg;
- offset = (((inst & 0xff) ^ 0x80) - 0x80) << 1;
+ offset = (inst & 0xff) << 2;
sav_offset =
- read_memory_integer (((pc + 4) & ~3) + offset, 4);
+ read_memory_integer (((pc & 0xfffffffc) + 4) + offset, 4);
}
}
}