* New testsuite errors with gdbserver (remote)
@ 2011-02-17 0:55 Michael Snyder
2011-02-17 1:09 ` Michael Snyder
0 siblings, 1 reply; 7+ messages in thread
From: Michael Snyder @ 2011-02-17 0:55 UTC (permalink / raw)
To: gdb
Hi,
Actually I don't know how new these are -- certainly newer than the
7.2 release. Is anybody else running the testsuite with
native-gdbserver.exp?
I'm seeing hundreds of instances of this assert failure:
/data/home/msnyder/cvs/localhost/src/gdb/thread.c:619: internal-error:
is_thread_state: Assertion `tp' failed.
Michael
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New testsuite errors with gdbserver (remote)
2011-02-17 0:55 New testsuite errors with gdbserver (remote) Michael Snyder
@ 2011-02-17 1:09 ` Michael Snyder
2011-02-17 2:08 ` Michael Snyder
0 siblings, 1 reply; 7+ messages in thread
From: Michael Snyder @ 2011-02-17 1:09 UTC (permalink / raw)
To: gdb
Michael Snyder wrote:
> Hi,
>
> Actually I don't know how new these are -- certainly newer than the
> 7.2 release. Is anybody else running the testsuite with
> native-gdbserver.exp?
>
> I'm seeing hundreds of instances of this assert failure:
>
> /data/home/msnyder/cvs/localhost/src/gdb/thread.c:619: internal-error:
> is_thread_state: Assertion `tp' failed.
Luckily, this shows up in head but not in the current release branch.
So it need not hold up the 7.2.1 release.
To see an instance of this, run
make check RUNTESTFLAGS="--target_board=native-gdbserver bang.exp"
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New testsuite errors with gdbserver (remote)
2011-02-17 1:09 ` Michael Snyder
@ 2011-02-17 2:08 ` Michael Snyder
2011-02-17 18:48 ` Michael Snyder
0 siblings, 1 reply; 7+ messages in thread
From: Michael Snyder @ 2011-02-17 2:08 UTC (permalink / raw)
To: gdb
Michael Snyder wrote:
> Michael Snyder wrote:
>> Hi,
>>
>> Actually I don't know how new these are -- certainly newer than the
>> 7.2 release. Is anybody else running the testsuite with
>> native-gdbserver.exp?
>>
>> I'm seeing hundreds of instances of this assert failure:
>>
>> /data/home/msnyder/cvs/localhost/src/gdb/thread.c:619: internal-error:
>> is_thread_state: Assertion `tp' failed.
>
>
> Luckily, this shows up in head but not in the current release branch.
> So it need not hold up the 7.2.1 release.
>
> To see an instance of this, run
>
> make check RUNTESTFLAGS="--target_board=native-gdbserver bang.exp"
>
I have binary-searched it down to a change occurring in the main trunk,
on February 4. One of these:
P bfd/version.h
P gdb/ChangeLog
P gdb/Makefile.in
P gdb/NEWS
P gdb/breakpoint.c
P gdb/breakpoint.h
P gdb/dwarf2read.c
P gdb/mips-linux-tdep.c
P gdb/regcache.c
U gdb/version.in
P gdb/data-directory/Makefile.in
P gdb/doc/ChangeLog
P gdb/doc/gdb.texinfo
P gdb/doc/gdbint.texinfo
cvs update: gdb/python/py-bpevent.c is no longer in the repository
P gdb/python/py-breakpoint.c
cvs update: gdb/python/py-continueevent.c is no longer in the repository
cvs update: gdb/python/py-event.c is no longer in the repository
cvs update: gdb/python/py-event.h is no longer in the repository
cvs update: gdb/python/py-events.h is no longer in the repository
cvs update: gdb/python/py-evtregistry.c is no longer in the repository
cvs update: gdb/python/py-evts.c is no longer in the repository
cvs update: gdb/python/py-exitedevent.c is no longer in the repository
P gdb/python/py-inferior.c
cvs update: gdb/python/py-signalevent.c is no longer in the repository
cvs update: gdb/python/py-stopevent.c is no longer in the repository
cvs update: gdb/python/py-stopevent.h is no longer in the repository
cvs update: gdb/python/py-threadevent.c is no longer in the repository
P gdb/python/python-internal.h
P gdb/python/python.c
cvs update: gdb/syscalls/mips-n32-linux.xml is no longer in the repository
cvs update: gdb/syscalls/mips-n64-linux.xml is no longer in the repository
cvs update: gdb/syscalls/mips-o32-linux.xml is no longer in the repository
P gdb/testsuite/ChangeLog
P gdb/testsuite/gdb.base/catch-syscall.exp
cvs update: gdb/testsuite/gdb.python/py-events.c is no longer in the
repository
cvs update: gdb/testsuite/gdb.python/py-events.exp is no longer in the
repository
cvs update: gdb/testsuite/gdb.python/py-events.py is no longer in the
repository
cvs update: gdb/testsuite/gdb.python/py-evthreads.c is no longer in the
repository
cvs update: gdb/testsuite/gdb.python/py-evthreads.exp is no longer in
the repository
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New testsuite errors with gdbserver (remote)
2011-02-17 2:08 ` Michael Snyder
@ 2011-02-17 18:48 ` Michael Snyder
2011-02-17 20:48 ` Keith Seitz
0 siblings, 1 reply; 7+ messages in thread
From: Michael Snyder @ 2011-02-17 18:48 UTC (permalink / raw)
To: gdb, swagiaal, oguzkayral
Michael Snyder wrote:
> Michael Snyder wrote:
>> Michael Snyder wrote:
>>> Hi,
>>>
>>> Actually I don't know how new these are -- certainly newer than the
>>> 7.2 release. Is anybody else running the testsuite with
>>> native-gdbserver.exp?
>>>
>>> I'm seeing hundreds of instances of this assert failure:
>>>
>>> /data/home/msnyder/cvs/localhost/src/gdb/thread.c:619: internal-error:
>>> is_thread_state: Assertion `tp' failed.
>>
>> Luckily, this shows up in head but not in the current release branch.
>> So it need not hold up the 7.2.1 release.
>>
>> To see an instance of this, run
>>
>> make check RUNTESTFLAGS="--target_board=native-gdbserver bang.exp"
>>
>
> I have binary-searched it down to a change occurring in the main trunk,
> on February 4. One of these:
Somewhat to my surprise, these new failures narrow down to this change:
2011-02-04 Sami Wagiaalla <swagiaal@redhat.com>
Oguz Kayral <oguzkayral@gmail.com>
* python/py-inferior.c (python_on_normal_stop): New function.
(python_on_resume): New function.
(python_inferior_exit): New function.
(gdbpy_initialize_inferior): Add normal_stop, target_resumed, and
inferior_exit observers.
* python/py-evtregistry.c: New file.
* python/py-threadevent.c : New file.
* python/py-event.c: New file.
* python/py-evts.c: New file.
* python/py-continueevent.c: New file.
* python/py-bpevent.c: New file.
* python/py-signalevent.c: New file.
* python/py-exetiedevent.c: New file.
* python/py-breakpoint.c (gdbpy_breakpoint_from_bpstats): New
function.
Move struct breakpoint_object from here...
* python/python-internal.h: ... to here.
* python/py-event.h: New file.
* python/py-events.h: New file.
* Makefile.in (SUBDIR_PYTHON_OBS): Add py-breakpointstopevent.o,
py-continueevent.o, py-event.o, py-eventregistry.o, py-events.o,
py-exitedevent.o, py-signalstopevent.o, and py-stopevent.o.
(SUBDIR_PYTHON_SRCS): Add py-breakpointstopevent.c,
py-continueevent.c, py-event.c, py-eventregistry.c, py-events.c,
py-exitedevent.c, py-signalstopevent.c, and py-stopevent.c.
Add build rules for all the above.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New testsuite errors with gdbserver (remote)
2011-02-17 18:48 ` Michael Snyder
@ 2011-02-17 20:48 ` Keith Seitz
2011-02-18 16:48 ` [RFA] Fix for " Pierre Muller
2011-02-18 19:30 ` New " Pedro Alves
0 siblings, 2 replies; 7+ messages in thread
From: Keith Seitz @ 2011-02-17 20:48 UTC (permalink / raw)
To: Michael Snyder; +Cc: gdb, swagiaal, oguzkayral
On 02/17/2011 10:48 AM, Michael Snyder wrote:
> Somewhat to my surprise, these new failures narrow down to this change:
I've given this a peek, and here's what I've found out...
When the exit notification is sent, and python picks it up, it is
setting up the python environment (architecture and language). The
python exit callback does this by calling get_current_arch.
The problem is that (long before this) wait_for_inferior sets the
inferior with TID = 0. It is this inferior object that is then passed
around for the event notification. Alas, unlike natives, where the
inferior is popped, the inferior is still around.
As a result, target_has_stack goes to check the thread status and cannot
find the appropriate thread (since the one in the list hasn't been
cleared). This leads to the internal error you're seeing.
I'm not sure how valid it is to call get_current_arch from an exit
event. Maybe it is. Maybe it isn't. Someone who knows a lot more about
this is going to have to investigate this or guide me.
Nonetheless, if you pass target_gdbarch instead to ensure_python_env in
python_inferior_exit (in python/py_inferior.c), things will behave much
better. Once again, I don't know if this is strictly correct, but it
should at least get you going with gdbserver again.
I hope this leads someone to a better solution.
Keith
Index: python/py-inferior.c
===================================================================
RCS file: /cvs/src/src/gdb/python/py-inferior.c,v
retrieving revision 1.5
diff -u -p -r1.5 py-inferior.c
--- python/py-inferior.c 4 Feb 2011 21:54:16 -0000 1.5
+++ python/py-inferior.c 17 Feb 2011 20:46:08 -0000
@@ -116,7 +116,7 @@ python_inferior_exit (struct inferior *i
ptid_t ptidp;
struct target_waitstatus status;
- cleanup = ensure_python_env (get_current_arch (), current_language);
+ cleanup = ensure_python_env (target_gdbarch, current_language);
get_last_target_status (&ptidp, &status);
^ permalink raw reply [flat|nested] 7+ messages in thread
* [RFA] Fix for testsuite errors with gdbserver (remote)
2011-02-17 20:48 ` Keith Seitz
@ 2011-02-18 16:48 ` Pierre Muller
2011-02-18 19:30 ` New " Pedro Alves
1 sibling, 0 replies; 7+ messages in thread
From: Pierre Muller @ 2011-02-18 16:48 UTC (permalink / raw)
To: 'Keith Seitz', 'Michael Snyder'; +Cc: gdb, gdb-patches
> Nonetheless, if you pass target_gdbarch instead to ensure_python_env in
> python_inferior_exit (in python/py_inferior.c), things will behave much
> better. Once again, I don't know if this is strictly correct, but it
> should at least get you going with gdbserver again.
>
> I hope this leads someone to a better solution.
I investigated a little further and it seems to me
that the problem is that instead of a null_ptid,
the TARGET_WAITKIND_EXITED event has a (pid,0,0) form,
which is also not a valid thread, but doesn't get
filtered out yet by has_stack_frames before
calling is_exited.
I first wanted to add a test "lwp == 0 && tid == 0"
inside has_stack_frames, but as I was not sure that
other target could not have valid thread with a zero identifier,
I thought it would be safer to look for a fix inside
remote specific code.
Inverting two lines in remote_close fixes hopefully this issue.
At least using --target_board=native_gdbsderver.exp
works again!
Is this patch OK?
2011-02-18 Pierre Muller <muller@ics.u-strasbg.fr>
* remote.c (remote_close): Reset INFERIOR_PTID to NULL_PTID
before calling discard_all_inferiors.
Index: src/gdb/remote.c
===================================================================
RCS file: /cvs/src/src/gdb/remote.c,v
retrieving revision 1.434
diff -u -p -r1.434 remote.c
--- src/gdb/remote.c 14 Feb 2011 11:22:29 -0000 1.434
+++ src/gdb/remote.c 18 Feb 2011 16:41:42 -0000
@@ -2908,9 +2908,11 @@ remote_close (int quitting)
remote_desc = NULL;
/* We don't have a connection to the remote stub anymore. Get rid
- of all the inferiors and their threads we were controlling. */
- discard_all_inferiors ();
+ of all the inferiors and their threads we were controlling.
+ Reset inferior_ptid to null_ptid first, as otherwise has_stack_frames
+ will be unable to find the thread corresponding to (pid, 0, 0). */
inferior_ptid = null_ptid;
+ discard_all_inferiors ();
/* We're no longer interested in any of these events. */
discard_pending_stop_replies (-1);
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New testsuite errors with gdbserver (remote)
2011-02-17 20:48 ` Keith Seitz
2011-02-18 16:48 ` [RFA] Fix for " Pierre Muller
@ 2011-02-18 19:30 ` Pedro Alves
1 sibling, 0 replies; 7+ messages in thread
From: Pedro Alves @ 2011-02-18 19:30 UTC (permalink / raw)
To: gdb; +Cc: Keith Seitz, Michael Snyder, swagiaal, oguzkayral
On Thursday 17 February 2011 20:47:48, Keith Seitz wrote:
> On 02/17/2011 10:48 AM, Michael Snyder wrote:
> > Somewhat to my surprise, these new failures narrow down to this change:
>
> I've given this a peek, and here's what I've found out...
>
> When the exit notification is sent, and python picks it up, it is
> setting up the python environment (architecture and language). The
> python exit callback does this by calling get_current_arch.
>
> The problem is that (long before this) wait_for_inferior sets the
> inferior with TID = 0. It is this inferior object that is then passed
> around for the event notification. Alas, unlike natives, where the
> inferior is popped, the inferior is still around.
>
> As a result, target_has_stack goes to check the thread status and cannot
> find the appropriate thread (since the one in the list hasn't been
> cleared). This leads to the internal error you're seeing.
>
> I'm not sure how valid it is to call get_current_arch from an exit
> event. Maybe it is. Maybe it isn't. Someone who knows a lot more about
> this is going to have to investigate this or guide me.
/* Return "current" architecture. If the target is running, this is
the architecture of the selected frame. Otherwise, the "current"
architecture defaults to the target architecture.
This function should normally be called solely by the command
interpreter routines to determine the architecture to execute a
command in. */
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
struct gdbarch *
get_current_arch (void)
The exited observer are called at other times, not when
preparing to execute a command in. It is quite bogus to assume
the current architecture, frame and language have anything to do
with the inferior that has been passed is as argument to the
observer.
> @@ -116,7 +116,7 @@ python_inferior_exit (struct inferior *i
> ptid_t ptidp;
> struct target_waitstatus status;
>
> - cleanup = ensure_python_env (get_current_arch (), current_language);
> + cleanup = ensure_python_env (target_gdbarch, current_language);
>
> get_last_target_status (&ptidp, &status);
I can't say that I'm very familiar with most of the python layer
code, but, why does this observer need to call ensure_python_env
in the first place? Or if it does, why doesn't it call it with
python_gdbarch like other places in py-inferior that are internal
helpers, not implementing a user command?
--
Pedro Alves
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-02-18 19:30 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-17 0:55 New testsuite errors with gdbserver (remote) Michael Snyder
2011-02-17 1:09 ` Michael Snyder
2011-02-17 2:08 ` Michael Snyder
2011-02-17 18:48 ` Michael Snyder
2011-02-17 20:48 ` Keith Seitz
2011-02-18 16:48 ` [RFA] Fix for " Pierre Muller
2011-02-18 19:30 ` New " Pedro Alves
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox