Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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


  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