<div dir="ltr"><div>Thanks for the reply, what exception routines would be called ? i dont believe there is a data abort, invalid instruction, etc exception being thrown at any point.<br><br></div>I will try git head at some point, i am using mingw and there are problems with the 2.69 autoconf which means you cannot even configure.<br>
<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 3 April 2013 14:39, Sebastian Huber <span dir="ltr"><<a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">sebastian.huber@embedded-brains.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 04/03/2013 03:22 PM, Matthew J Fletcher wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So i put breakpoints in the places you mentioned in the _Thread_Handler, this<br>
is what occurred.<br>
<br>
1) Init() thread scheduled<br>
2) Init() creates 'test_wake_after' thread<br>
3) Init() deletes itself<br>
4) test_wake_after is scheduled (this and the idle thread are now the only ones<br>
executing)<br>
5) rtems_task_wake_after() called from within test_wake_after() context<br>
6) rtems_idle() is now scheduled<br>
7) rtems_idle() is scheduled again<br>
8) my idle loop is just a for(;;) and the disassembly shows that<br>
9) i hit the breakpoint showing a function has returned in _Thread_Handler()<br>
10) the execution->start->entry_point is "test_wake_after".<br>
<br>
So two strange things have occurred, the last scheduled thread was rtems_idle()<br>
but the execution structure is showing that "test_wake_after",.. maybe thats<br>
ok, it might have been chosen to execute next i suppose.<br>
<br>
Even stranger was that the for(;;) inside rtems_idle() somehow returned,. now i<br>
put code after the for(;;) and a breakpoint and it was not hit.<br>
<br>
I admit that the program is not following logically how it would appear to, but<br>
its difficult to put that down to heap or stack corruption as 3 tasks where<br>
scheduled correctly, and anyhow how would that modify the (in RAM) code to<br>
modify the instructions so that instead of a branch to itself it did a 'bx rX'<br>
where r is a register with a sensible return address. Given that i only have 2<br>
tasks running, both of which are just for(;;) loops, but one calls an rtems<br>
routines, it seems unlikely that heap/stack corruption would occur.<br>
<br>
I suppose the only way to tell for sure is to dump the address in RAM of the<br>
function that has 'returned' into _Thread_Handler, and see if somehow it has a<br>
bx instruction and then try and work out where/what managed to modify that<br>
function so accurately as to insert valid thumb asm !<br>
<br>
</blockquote>
<br></div></div>
There can be also a bug in the exception processing code.  It would really help if you can provide a simple self-contained test case.  The ARM code changed considerably in RTEMS 4.11 and this is what I use.  I never worked with 4.10.<div class="HOEnZb">
<div class="h5"><br>
<br>
-- <br>
Sebastian Huber, embedded brains GmbH<br>
<br>
Address : Dornierstr. 4, D-82178 Puchheim, Germany<br>
Phone   : <a href="tel:%2B49%2089%20189%2047%2041-16" value="+4989189474116" target="_blank">+49 89 189 47 41-16</a><br>
Fax     : <a href="tel:%2B49%2089%20189%2047%2041-09" value="+4989189474109" target="_blank">+49 89 189 47 41-09</a><br>
E-Mail  : <a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">sebastian.huber@embedded-<u></u>brains.de</a><br>
PGP     : Public key available on request.<br>
<br>
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div><br>regards</div><div>---</div><div>Matthew J Fletcher</div><br>
</div>