This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: lin-lwp.c:1317: internal-error: lin_lwp_wait: Assertion `iterate_over_lwps(runing_callback, NULL)' failed.


srikrish wrote:
In yesterday's post, I forgot to add that the program runs fine outside gdb.
Here's the output:
mymachine: /home/srik>./myprog somearg
entering main program. pid: 10861
In threadproc pid:10863

 getting up from sleep
entering main program. pid: 10863
end of main: 10863

mymachine: /home/srik>

Is this a limitation of GDB?


No, it is a bug. The assert is historical and was left in after the nptl modifications. It is meant to prevent gdb from being left hanging because there are no running threads to get events from.

With the advent of the new nptl model, gdb has to look for the case
of exiting the main thread.  In nptl, when you exit the main thread, it
means all other threads should have exited.  This is not the case for
linuxthreads.  Since gdb is not notified when nptl lwps exit,
it tries stopping the other lwps to see if they have exited, then
resumes them if they are still around.

In your case, the last non-main thread remaining got to a breakpoint so it
was stopped with pending status and the resume did not mark the thread as running.
After gdb got rid of the main thread, it looked to see if any threads existed and if
so, were they still running. The non-main thread was found but wasn't marked as running
so the assert tripped.

I believe the answer is to adjust the assert to also look for pending events on
the existing threads.

I can shortly submit a patch for consideration which you can try out.

-- Jeff J.



Subject: lin-lwp.c:1317: internal-error: lin_lwp_wait: Assertion `iterate_over_lwps (runing_callback, NULL)' failed.



Hi,
I am getting an assertion failure/gdb-internal-error while running a
multi-threaded program using the GDB20030731. Can some one point out if

this


is a known bug or is there a workaround?

Error Message: lin-lwp.c:1317: internal-error: lin_lwp_wait: Assertion
`iterate_over_lwps (runing_callback, NULL)' failed.

The test program and output follows. I am using 2.4.19-3Suse-SMP kernel.
(linuxthreads)
Thanks,
Srikrishnan

Test Program: Please note that I am calling exec of the same program

without


arguments.
#include <stdio.h>
#include <pthread.h>
void * threadproc(void * junk)
{
int i;
printf("In threadproc pid:%d \n", getpid());
   printf("\n getting up from sleep \n");
 execv("myprog",0);=20
   printf("exec failed \n");
}

int main(int argc, char * argv)
{
int i;
   void * ret;
pthread_t newthread;
   printf("entering main program. pid: %d \n", getpid());
if(argc >1)
{
 pthread_create(&newthread, NULL, threadproc, NULL);
 printf("back to main. pid:%d \n",getpid());
 }
   printf("end of main: %d \n", getpid());
}


OUTOUT WHILE USING GDB after enabling printing of verbose/debug statements in gdb/lin-lwp.c


gdbdir/gdb myprog

GNU gdb 20030731 Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you

are


welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for

details.


This GDB was configured as "s390-ibm-linux"...
(gdb) run somearg
Starting program: /home/fultonm/bug3380/test3380nosleep somearg
CW:  waitpid 2122 received Trace/breakpoint trap (stopped)
CW:  waitpid 2122 received Trace/breakpoint trap (stopped)
CW:  waitpid 2122 received Trace/breakpoint trap (stopped)
[New Thread 1024 (LWP 2122)]
LLR: PTRACE_SINGLESTEP process 2122, 0 (resume event thread)
LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
SEL: Select single-step LWP 2122
LLW: trap_ptid is process 2122.
LLR: PTRACE_CONT process 2122, 0 (resume event thread)
LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
LLW: trap_ptid is process 2122.
LLR: PTRACE_SINGLESTEP process 2122, 0 (resume event thread)
LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
SEL: Select single-step LWP 2122
LLW: trap_ptid is process 2122.
LLR: PTRACE_CONT process 2122, 0 (resume event thread)
LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
LLW: trap_ptid is process 2122.
LLR: PTRACE_SINGLESTEP process 2122, 0 (resume event thread)
LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
SEL: Select single-step LWP 2122
LLW: trap_ptid is process 2122.
LLR: PTRACE_CONT process 2122, 0 (resume event thread)
LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
LLW: trap_ptid is process 2122.
[New Thread 2049 (LWP 2123)]
LLAL: PTRACE_ATTACH LWP 2123, 0, 0 (OK)
LLAL: waitpid LWP 2123 received Stopped (signal) (stopped)
LLR: PTRACE_SINGLESTEP process 2122, 0 (resume event thread)
LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
LLTA: PTRACE_PEEKUSER LWP 2122, 0, 0 (OK)
LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
SEL: Select single-step LWP 2122
LLW: trap_ptid is LWP 2122.
RC:  PTRACE_CONT LWP 2123, 0, 0 (resume sibling)
LLR: PTRACE_CONT process 2122, 0 (resume event thread)
LLW: waitpid 2123 received Real-time signal 0 (stopped)
LLTA: PTRACE_PEEKUSER LWP 2123, 0, 0 (OK)
LLW: PTRACE_CONT LWP 2123, Unknown signal 77 (preempt 'handle')
LLW: waitpid 2123 received Trace/breakpoint trap (stopped)
LLTA: PTRACE_PEEKUSER LWP 2123, 0, 0 (OK)
LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2123.
SC:  kill LWP 2122 **<SIGSTOP>**
SC:  lwp kill 0 ERRNO-OK
SWC: waitpid LWP 2122 received Stopped (signal) (stopped)
SWC: CALLING LLTA
LLTA: PTRACE_PEEKUSER LWP 2122, 0, 0 (OK)
LLW: trap_ptid is LWP 2123.
[New Thread 1026 (LWP 2124)]
LLAL: PTRACE_ATTACH LWP 2124, 0, 0 (OK)
LLAL: waitpid LWP 2124 received Stopped (signal) (stopped)
LLR: PTRACE_SINGLESTEP process 2123, 0 (resume event thread)
LLW: waitpid 2123 received Trace/breakpoint trap (stopped)
LLTA: PTRACE_PEEKUSER LWP 2123, 0, 0 (OK)
LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2123.
SEL: Select single-step LWP 2123
LLW: trap_ptid is LWP 2123.
RC:  PTRACE_CONT LWP 2124, 0, 0 (resume sibling)
RC:  PTRACE_CONT LWP 2122, 0, 0 (resume sibling)
LLR: PTRACE_CONT process 2123, 0 (resume event thread)
LLW: waitpid 2124 received Real-time signal 0 (stopped)
LLTA: PTRACE_PEEKUSER LWP 2124, 0, 0 (OK)
LLW: PTRACE_CONT LWP 2124, Unknown signal 77 (preempt 'handle')
In threadproc pid:2124
LLW: waitpid 2122 received Real-time signal 0 (stopped)
getting up from sleep
LLTA: PTRACE_PEEKUSER LWP 2122, 0, 0 (OK)
back to main. pid:2122
LLW: PTRACE_CONT LWP 2122, Unknown signal 77 (preempt 'handle')
LLW: waitpid 2122 received Real-time signal 1 (stopped)
LLTA: PTRACE_PEEKUSER LWP 2122, 0, 0 (OK)
LLW: PTRACE_CONT LWP 2122, Real-time signal 13 (preempt 'handle')
LLW: waitpid 2124 received Real-time signal 0 (stopped)
LLTA: PTRACE_PEEKUSER LWP 2124, 0, 0 (OK)
LLW: PTRACE_CONT LWP 2124, Unknown signal 77 (preempt 'handle')
LLW: waitpid 2123 received 0 (exited)
LLW: LWP 2123 exited.
LLW: waitpid 2122 received 0 (exited)
SC:  kill LWP 2124 **<SIGSTOP>**
SC:  lwp kill 0 ERRNO-OK
SWC: waitpid LWP 2124 received Trace/breakpoint trap (stopped)
SWC: CALLING LLTA
LLTA: PTRACE_PEEKUSER LWP 2124, 0, 0 (OK)
PTRACE_CONT LWP 2124, 0, 0 (OK)
SWC: Candidate SIGTRAP event in LWP 2124
SWC: waitpid LWP 2124 received Stopped (signal) (stopped)
SWC: CALLING LLTA
LLTA: PTRACE_PEEKUSER LWP 2124, 0, 0 (OK)
LLW: LWP 2122 exited.
lin-lwp.c:1317: internal-error: lin_lwp_wait: Assertion `iterate_over_lwps
(run
ing_callback, NULL)' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) y

Create a core file of GDB? (y or n) y
Abort
mymachine: /home/srik>








Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]