Need help debugging sp16.exe

Richi Dubey richidubey at gmail.com
Fri Oct 9 15:33:34 UTC 2020


Okay, I'm gonna do that. Thanks for the help.

On Thu, Oct 8, 2020 at 9:47 PM Gedare Bloom <gedare at rtems.org> wrote:

> On Thu, Oct 8, 2020 at 9:38 AM Richi Dubey <richidubey at gmail.com> wrote:
> >
> > Hi,
> >
> > I have been trying to debug sp16 for the last few days. I am using the
> new Strong APA scheduler we worked on during this GSoC. The scheduler fails
> only for the following tests:
> >
> >  sp02.exe
> >  sp16.exe
> >  sp30.exe
> >  sp31.exe
> >  sp37.exe
> >  sp42.exe
> >  spfatal29.exe
> >  tm24.exe
> >
> > On executing sp16.exe, I get the following output:
> >
> > *** BEGIN OF TEST SP 16 ***
> > *** TEST VERSION: 5.0.0.61ccb9c05dcd695114541960aa6bfc1315f30514-modified
> > *** TEST STATE: EXPECTED_PASS
> > *** TEST BUILD: RTEMS_NETWORKING RTEMS_POSIX_API RTEMS_SMP
> > *** TEST TOOLS: 7.5.0 20191114 (RTEMS 5, RSB 5 (0b7e87143b76), Newlib
> fbaa096)
> > TA1 - rtems_region_ident - rnid => 32010001
> > TA1 - rtems_region_get_segment - wait on 1000 byte segment from region 2
> > TA1 - got segment from region 2 - 0x00000040
> > TA1 - rtems_region_get_segment - wait on 3K segment from region 3
> > TA1 - got segment from region 3 - 0x00000080
> > TA1 - rtems_region_get_segment - get 3080 byte segment from region 1 -
> NO_WAIT
> > TA1 - got segment from region 1 - 0x00000040
> > TA1 - rtems_task_wake_after - yield processor
> > TA2 - rtems_region_get_segment - wait on 2K segment from region 1
> > TA1 - rtems_region_return_segment - return segment to region 1 -
> 0x00000040
> > TA1 - rtems_region_get_segment - wait 10 seconds for 3K segment from
> region 1
> > TA2 - got segment from region 1 - 0x00000040
> > TA2 - rtems_region_return_segment - return segment to region 1 -
> 0x00000040
> > TA2 - rtems_task_set_priority - make self highest priority task
> > TA2 - rtems_region_get_segment - wait on 3750 byte segment
> > TA1 - got segment from region 1 - 0x00000040
> > TA1 - rtems_region_return_segment - return segment to region 2 -
> 0x00000040
> > TA2 - got segment from region 2 - 0x00000040
> > TA2 - rtems_region_return_segment - return segment to region 2 -
> 0x00000040
> > TA2 - rtems_task_exit
> > TA1 - rtems_task_wake_after - yield processor
> > TA3 - rtems_region_get_segment - wait on 3750 byte segment from region 2
> > TA3 - got segment from region 2 - 0x00000040
> > TA3 - rtems_region_get_segment - wait on 2K segment from region 3
> > TA1 - rtems_task_delete - delete TA3
> > TA1 - rtems_task_wake_after - yield processor
> > TA4 - rtems_region_get_segment - wait on 1.5K segment from region 1
> > TA5 - rtems_region_get_segment - wait on 1.5K segment from region 1
> > TA1 - rtems_region_return_segment - return segment to region 1 -
> 0x00000040
> > TA1 - rtems_task_wake_after - yield processor
> > TA4 - got and returned 0x00000040
> > TA5 - got and returned 0x000006c0
> > TA1 - rtems_region_get_segment - wait 10 seconds for 3K segment from
> region 1
> > TA1 - got segment from region 1 - 0x00000040
> > TA1 - rtems_task_wake_after - yield processor
> > TA4 - rtems_region_get_segment - wait on 3K segment from region 1
> > TA5 - rtems_region_get_segment - wait on 3K segment from region 1
> > TA1 - rtems_task_delete - delete TA4
> > TA1 - rtems_region_return_segment - return segment to region 1 -
> 0x00000040
> > TA1 - rtems_task_wake_after - yield processor
> > TA5 - got segment from region 1 - 0x00000040
> > TA5 - rtems_region_return_segment - return segment to region 1 -
> 0x00000040
> > TA5 - rtems_task_exit
> >
> > and it doesn't progress further from here. It gets stuck in some kind of
> loop. While debugging with gdb, I realized the loop is:
> >
> > Clock_isr (arg=0x0) at
> /home/richi/quick-start/src/rtems/bsps/arm/include/../../shared/dev/clock/clockimpl.h:155
> > 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x001042fa 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x001042fc 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x001042fe 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> >
> > 0x00104302 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104304 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104306 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x0010430a 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 154        while (
> > (gdb)
> > 0x0010430e 154        while (
> > (gdb)
> > 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104314 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104316 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104318 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x0010431c 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x0010431e 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104322 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104324 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 159          _Timecounter_Acquire(&lock_context);
> > (gdb)
> > 0x001042d2 159          _Timecounter_Acquire(&lock_context);
> > (gdb)
> > 0x001042d4 159          _Timecounter_Acquire(&lock_context);
> > (gdb)
> > 0x001042d8 159          _Timecounter_Acquire(&lock_context);
> > (gdb)
> > 0x001042dc 159          _Timecounter_Acquire(&lock_context);
> > (gdb)
> > 162            (*tc->tc_get_timecount)(tc),
> > (gdb)
> > 0x001042e2 162            (*tc->tc_get_timecount)(tc),
> > (gdb)
> > 160          _Timecounter_Tick_simple(
> > (gdb)
> > 0x001042e6 160          _Timecounter_Tick_simple(
> > (gdb)
> > 0x001042e8 160          _Timecounter_Tick_simple(
> > (gdb)
> > 0x001042ea 160          _Timecounter_Tick_simple(
> > (gdb)
> > 0x001042ee 160          _Timecounter_Tick_simple(
> > (gdb)
> > 0x001042f0 160          _Timecounter_Tick_simple(
> > (gdb)
> > 0x001042f2 160          _Timecounter_Tick_simple(
> > (gdb)
> >
> > 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> >
> > 0x001042fa 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x001042fc 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x001042fe 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> >
> > 0x00104302 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104304 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104306 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x0010430a 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 154        while (
> > (gdb)
> > 0x0010430e 154        while (
> > (gdb)
> > 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104314 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104316 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104318 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x0010431c 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x0010431e 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104322 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 0x00104324 155          _Thread_Heir == _Thread_Executing &&
> _Thread_Executing->is_idle
> > (gdb)
> > 159          _Timecounter_Acquire(&lock_context);
> > (gdb)
> > 0x001042d2 159          _Timecounter_Acquire(&lock_context);
> > (gdb)
> > 0x001042d4 159          _Timecounter_Acquire(&lock_context);
> > (gdb)
> > 0x001042d8 159          _Timecounter_Acquire(&lock_context);
> > (gdb)
> > 0x001042dc 159          _Timecounter_Acquire(&lock_context);
> > (gdb)
> >
> > 162            (*tc->tc_get_timecount)(tc),
> > (gdb)
> > 0x001042e2 162            (*tc->tc_get_timecount)(tc),
> >
> >
> > and so on...
> >
> > I cannot figure out what is wrong. Like Dr. Sherill suggested in a
> different .exe debug earlier, I set breakpoints and checked values of
> variables passed to the function and it all looks okay. I am quite sure
> this is because of the scheduler.
> >
> > How do I progress further? Please let me know.
> >
>
> The loop is spinning with an idle thread only, advancing the time
> counters still. The last message from TA1 is a yield. You need to dig
> into where TA1 got lost or why it doesn't get back the processor when
> TA5 exits.
>
> > Thanks,
> > Richi.
> >
> >
> > _______________________________________________
> > devel mailing list
> > devel at rtems.org
> > http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20201009/7bf762e2/attachment-0001.html>


More information about the devel mailing list