From: Pedro Alves <pedro@codesourcery.com>
To: Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [obv] s390*: Fix build regression, remains execution regression
Date: Sat, 17 Dec 2011 12:33:00 -0000 [thread overview]
Message-ID: <201112171229.27796.pedro@codesourcery.com> (raw)
In-Reply-To: <20111217094753.GA20113@host2.jankratochvil.net>
On Saturday 17 December 2011 09:47:53, Jan Kratochvil wrote:
> Hi Pedro,
>
> this is the obvious part, checked in.
>
> Unfortunately there is still a regression, it crashes during exec from the
> wrapper->real inferior on mostly any program (kernel-2.6.32-220.el6.s390x):
>
> 61562 pts/1 T \_ /root/jkratoch/redhat/archer-git/gdb/gdb -nx -x ./transcript.1
> 61568 pts/1 T \_ /bin/bash -c exec /root/jkratoch/redhat/archer-git/gdb/testsuite/gdb.base/watchpoint-cond-gone
>
> (gdb) run
> Starting program: /root/jkratoch/redhat/archer-git/gdb/testsuite/gdb.base/watchpoint-cond-gone
> Couldn't retrieve watchpoint status: No such process.
> Couldn't get registers: No such process.
I suspect it's exposed by this change:
2011-12-14 Pedro Alves <pedro@codesourcery.com>
PR threads/10729
* linux-nat.c:
...
(add_lwp): Call linux_nat_new_thread even on the first LWP.
...
That code used to look like:
if (num_lwps (GET_PID (ptid)) > 1 && linux_nat_new_thread != NULL)
linux_nat_new_thread (ptid);
s390_fix_watch_points is the new_thread callback:
linux_nat_set_new_thread (t, s390_fix_watch_points);
> static void
> s390_fix_watch_points (struct lwp_info *lp)
> {
> int tid;
>
> per_struct per_info;
> ptrace_area parea;
>
> CORE_ADDR watch_lo_addr = (CORE_ADDR)-1, watch_hi_addr = 0;
> struct watch_area *area;
>
> tid = TIDGET (lp->ptid);
> if (tid == 0)
> tid = PIDGET (lp->ptid);
>
> for (area = watch_base; area; area = area->next)
> {
> watch_lo_addr = min (watch_lo_addr, area->lo_addr);
> watch_hi_addr = max (watch_hi_addr, area->hi_addr);
> }
>
> parea.len = sizeof (per_info);
> parea.process_addr = (addr_t) & per_info;
> parea.kernel_addr = offsetof (struct user_regs_struct, per_info);
> if (ptrace (PTRACE_PEEKUSR_AREA, tid, &parea) < 0)
> perror_with_name (_("Couldn't retrieve watchpoint status"));
>
> if (watch_base)
> {
> per_info.control_regs.bits.em_storage_alteration = 1;
> per_info.control_regs.bits.storage_alt_space_ctl = 1;
> }
> else
> {
> per_info.control_regs.bits.em_storage_alteration = 0;
> per_info.control_regs.bits.storage_alt_space_ctl = 0;
> }
> per_info.starting_addr = watch_lo_addr;
> per_info.ending_addr = watch_hi_addr;
>
> if (ptrace (PTRACE_POKEUSR_AREA, tid, &parea) < 0)
> perror_with_name (_("Couldn't modify watchpoint status"));
> }
Looks like we're trying to peek/poke at the shell process,
and failing?
I suspect that something like this pseudo patch:
+s390_new_thread (struct lwp_info *lp)
+{
+ if (num_lwps (GET_PID (ptid)) > 1)
+ s390_fix_watch_points (lp);
+}
- linux_nat_set_new_thread (t, s390_fix_watch_points);
+ linux_nat_set_new_thread (t, s390_new_thread);
Would fix it.
--
Pedro Alves
next prev parent reply other threads:[~2011-12-17 12:29 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-17 12:22 Jan Kratochvil
2011-12-17 12:33 ` Pedro Alves [this message]
2011-12-17 19:37 ` [patch] s390*: watchpoints regression [Re: [obv] s390*: Fix build regression] Jan Kratochvil
2011-12-17 19:44 ` Pedro Alves
2011-12-17 19:45 ` Jan Kratochvil
2011-12-17 19:56 ` [patch] s390*: watchpoints regression [repost] Jan Kratochvil
2011-12-17 20:13 ` Pedro Alves
2011-12-17 20:35 ` Pedro Alves
2011-12-17 21:08 ` Jan Kratochvil
2011-12-18 6:37 ` Joel Brobecker
2011-12-18 10:11 ` Jan Kratochvil
2011-12-18 11:38 ` Joel Brobecker
2011-12-18 12:38 ` Code formatting [Re: [patch] s390*: watchpoints regression [repost]] Jan Kratochvil
2011-12-18 15:50 ` Mark Kettenis
2011-12-18 17:24 ` Eli Zaretskii
2011-12-18 17:57 ` Jan Kratochvil
2011-12-18 18:45 ` Eli Zaretskii
2011-12-20 14:29 ` Pedro Alves
2011-12-18 11:42 ` [patch] s390*: watchpoints regression [repost] Eli Zaretskii
2011-12-19 21:37 ` 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=201112171229.27796.pedro@codesourcery.com \
--to=pedro@codesourcery.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