Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: jan.kratochvil@redhat.com (Jan Kratochvil)
Cc: gdb-patches@sourceware.org
Subject: [commit, s390] Fix regression in gdb.base/callfuncs.exp [Re: [commit, s390] Proper handling of PSW address/mask everywhere]
Date: Mon, 19 Dec 2011 22:39:00 -0000	[thread overview]
Message-ID: <201112192149.pBJLnGgE010099@d06av02.portsmouth.uk.ibm.com> (raw)
In-Reply-To: <20111219194636.GA8429@host2.jankratochvil.net> from "Jan Kratochvil" at Dec 19, 2011 08:46:36 PM

Jan Kratochvil wrote:

> On Wed, 30 Nov 2011 17:09:25 +0100, Ulrich Weigand wrote:
> > Tested with no regression on s390x-ibm-linux (with -m31 and -m64) and
> > on s390-ibm-linux, all both native and gdbserver.  Fixes the above
> > step-resume-infcall.exp regressions.
> 
> I see a regression for s390x with -m31, RHEL-6.2, kernel-2.6.32-220.el6.s390x.

Interesting, I had tested with a current kernel where I don't see that regression.
But I do see it with an older kernel as well ...

>  return 7
>  Make add return now? (y or n) y
> -#0  main () at ./gdb.base/callfuncs.c:655
> -655      t_structs_c(struct_val1);
> -(gdb) PASS: gdb.base/callfuncs.exp: back at main after return from call dummy breakpoint
> +Couldn't write registers: Invalid argument.
> +(gdb) FAIL: gdb.base/callfuncs.exp: back at main after return from call dummy breakpoint
> 
> GDB reads PC as 0x8aaabbbb and triess to write it back as 0x0aaabbbb.
> 
> I rather did not try to fix it.
> 
> #0  error (string=0x80d7b3aa "%s.") at utils.c:810
> #1  in perror_with_name (string=0x80daa600 "Couldn't write registers") at utils.c:1195
> #2  in store_regs (regcache=0x8cb90eb0, tid=51221, regnum=1) at s390-nat.c:269
> #3  in s390_linux_store_inferior_registers (ops=0x8c8ca340, regcache=0x8cb90eb0, regnum=1) at s390-nat.c:411
> #4  in target_store_registers (regcache=0x8cb90eb0, regno=1) at target.c:3585
> #5  in regcache_raw_write (regcache=0x8cb90eb0, regnum=1, buf=0x3ffff8d2b20 "") at regcache.c:877
> #6  in regcache_cooked_write (regcache=0x8cb90eb0, regnum=1, buf=0x3ffff8d2b20 "") at regcache.c:889
> #7  in regcache_restore (dst=0x8cb90eb0, cooked_read=0x8033a870 <do_cooked_read>, cooked_read_context=0x8cc55e80) at regcache.c:358
> #8  in regcache_cpy (dst=0x8cb90eb0, src=0x8cc55e80) at regcache.c:382
> #9  in frame_pop (this_frame=0x8c9350e8) at frame.c:835
> #10 in return_command (retval_exp=0x8c709777 "7", from_tty=0) at stack.c:2402

Looks like there is a place where I forgot to preserve the addressing mode bit.
Fixed by the following patch.

Tested with no regression (fixing the callfuncs.exp one) on s390x (-m31,-m64).
Committed to mainline and 7.4 branch.

Bye,
Ulrich


ChangeLog:

	* s390-tdep.c (s390_push_dummy_call): Set addressing mode bit
	in return PSWA.

Index: gdb/s390-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/s390-tdep.c,v
retrieving revision 1.201
diff -u -p -r1.201 s390-tdep.c
--- gdb/s390-tdep.c	7 Dec 2011 13:31:05 -0000	1.201
+++ gdb/s390-tdep.c	19 Dec 2011 20:59:28 -0000
@@ -2749,9 +2749,15 @@ s390_push_dummy_call (struct gdbarch *gd
       }
   }
 
-  /* 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);
 


-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com


  reply	other threads:[~2011-12-19 21:49 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-30 16:10 [commit, s390] Proper handling of PSW address/mask everywhere Ulrich Weigand
2011-12-19 19:58 ` Regression gdb.base/callfuncs.exp for s390-on-s390x [Re: [commit, s390] Proper handling of PSW address/mask everywhere] Jan Kratochvil
2011-12-19 22:39   ` Ulrich Weigand [this message]
2011-12-20  4:28     ` [commit, s390] Fix regression in gdb.base/callfuncs.exp " Jan Kratochvil
2011-12-21 19:41       ` Ulrich Weigand
2011-12-21 20:47         ` Jan Kratochvil

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=201112192149.pBJLnGgE010099@d06av02.portsmouth.uk.ibm.com \
    --to=uweigand@de.ibm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@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