aboutsummaryrefslogtreecommitdiff
path: root/gdb/s390-tdep.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2011-12-19 21:44:57 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2011-12-19 21:44:57 +0000
commit8de7d199bbcce5fffad187294a57106ad82af16b (patch)
tree22fbca5cf1cac4cc32fa90d114541e90f6daa762 /gdb/s390-tdep.c
parent83896202bf93a490c4b8e6a222903d5797e16b32 (diff)
downloadgdb-8de7d199bbcce5fffad187294a57106ad82af16b.zip
gdb-8de7d199bbcce5fffad187294a57106ad82af16b.tar.gz
gdb-8de7d199bbcce5fffad187294a57106ad82af16b.tar.bz2
* s390-tdep.c (s390_push_dummy_call): Set addressing mode bit
in return PSWA.
Diffstat (limited to 'gdb/s390-tdep.c')
-rw-r--r--gdb/s390-tdep.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index 1c09739..cd0ef9c 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -2749,9 +2749,15 @@ s390_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
}
}
- /* Store return address. */
+ /* Store return PSWA. In 31-bit mode, keep addressing mode bit. */
+ if (word_size == 4)
+ {
+ ULONGEST pswa;
+ regcache_cooked_read_unsigned (regcache, S390_PSWA_REGNUM, &pswa);
+ bp_addr = (bp_addr & 0x7fffffff) | (pswa & 0x80000000);
+ }
regcache_cooked_write_unsigned (regcache, S390_RETADDR_REGNUM, bp_addr);
-
+
/* Store updated stack pointer. */
regcache_cooked_write_unsigned (regcache, S390_SP_REGNUM, sp);