RTEMS crash with error 18 (RTEMS_CALLED_FROM_ISR) again.
Nick Thomas
nick.thomas at pixsan.com
Wed Feb 17 16:41:40 UTC 2010
Hi,
I have had this error 18 crash again. When the debugger back trace clearly
shows that the call tree originates from a task.
Looking through the disassembly is looks like the error 18 is called from
rtems_region_get_segment function, from line 69 in regiongetsegment.c .
#0 _CPU_Fatal_error (_error=18)
at
../../../../../../../rtems-4.7.1/c/src/lib/libcpu/powerpc/old-exceptions/cpu
.c:380
#1 0x005f3330 in _Internal_error_Occurred (the_source=INTERNAL_ERROR_CORE,
is_internal=0, the_error=18)
at
../../../../../../rtems-4.7.1/c/src/../../cpukit/score/src/interr.c:61
#2 0x005e6e5c in rtems_region_get_segment (id=838926341, size=8,
option_set=1, timeout=0, segment=0xfa421c)
at
../../../../../../rtems-4.7.1/c/src/../../cpukit/rtems/src/regiongetsegment.
c:69
There is some inlined functions involved here, so it's difficult to follow
the code.
But, the disassembly of rtems_region_get_segment clearly shows that error 18
is in there:
(See 6 lines from bottom of the following disassembly list).
(gdb) disassem 0x5e6da4
Dump of assembler code for function rtems_region_get_segment:
0x005e6da4 <rtems_region_get_segment+0>: stwu r1,-64(r1)
0x005e6da8 <rtems_region_get_segment+4>: mflr r0
0x005e6dac <rtems_region_get_segment+8>: stw r31,60(r1)
0x005e6db0 <rtems_region_get_segment+12>: stw r0,68(r1)
0x005e6db4 <rtems_region_get_segment+16>: mr r31,r1
0x005e6db8 <rtems_region_get_segment+20>: stw r3,24(r31)
0x005e6dbc <rtems_region_get_segment+24>: stw r4,28(r31)
0x005e6dc0 <rtems_region_get_segment+28>: stw r5,32(r31)
0x005e6dc4 <rtems_region_get_segment+32>: stw r6,36(r31)
0x005e6dc8 <rtems_region_get_segment+36>: stw r7,40(r31)
0x005e6dcc <rtems_region_get_segment+40>: lwz r0,40(r31)
0x005e6dd0 <rtems_region_get_segment+44>: cmpwi cr7,r0,0
0x005e6dd4 <rtems_region_get_segment+48>: bne- cr7,0x5e6de4
<rtems_region_get_segment+64>
0x005e6dd8 <rtems_region_get_segment+52>: li r0,9
0x005e6ddc <rtems_region_get_segment+56>: stw r0,52(r31)
0x005e6de0 <rtems_region_get_segment+60>: b 0x5e7180
<rtems_region_get_segment+988>
0x005e6de4 <rtems_region_get_segment+64>: lwz r9,40(r31)
0x005e6de8 <rtems_region_get_segment+68>: li r0,0
0x005e6dec <rtems_region_get_segment+72>: stw r0,0(r9)
0x005e6df0 <rtems_region_get_segment+76>: lwz r0,28(r31)
0x005e6df4 <rtems_region_get_segment+80>: cmpwi cr7,r0,0
0x005e6df8 <rtems_region_get_segment+84>: bne- cr7,0x5e6e08
<rtems_region_get_segment+100>
0x005e6dfc <rtems_region_get_segment+88>: li r9,8
0x005e6e00 <rtems_region_get_segment+92>: stw r9,52(r31)
0x005e6e04 <rtems_region_get_segment+96>: b 0x5e7180
<rtems_region_get_segment+988>
0x005e6e08 <rtems_region_get_segment+100>: lis r9,119
0x005e6e0c <rtems_region_get_segment+104>: lwz r9,3392(r9)
0x005e6e10 <rtems_region_get_segment+108>: li r0,0
0x005e6e14 <rtems_region_get_segment+112>: stw r0,20(r31)
0x005e6e18 <rtems_region_get_segment+116>: lwz r0,20(r31)
0x005e6e1c <rtems_region_get_segment+120>: mfmsr r0
0x005e6e20 <rtems_region_get_segment+124>: andc r9,r0,r9
0x005e6e24 <rtems_region_get_segment+128>: mtmsr r9
0x005e6e28 <rtems_region_get_segment+132>: stw r0,20(r31)
0x005e6e2c <rtems_region_get_segment+136>: lis r9,130
0x005e6e30 <rtems_region_get_segment+140>: lwz r0,-7660(r9)
0x005e6e34 <rtems_region_get_segment+144>: cmpwi cr7,r0,0
0x005e6e38 <rtems_region_get_segment+148>: beq- cr7,0x5e6e5c
<rtems_region_get_segment+184>
0x005e6e3c <rtems_region_get_segment+152>: bl 0x5e71a0
<_System_state_Get>
0x005e6e40 <rtems_region_get_segment+156>: mr r0,r3
0x005e6e44 <rtems_region_get_segment+160>: cmplwi cr7,r0,1
0x005e6e48 <rtems_region_get_segment+164>: ble- cr7,0x5e6e5c
<rtems_region_get_segment+184>
0x005e6e4c <rtems_region_get_segment+168>: li r3,0
0x005e6e50 <rtems_region_get_segment+172>: li r4,0
0x005e6e54 <rtems_region_get_segment+176>: li r5,18
0x005e6e58 <rtems_region_get_segment+180>: bl 0x5f32c0
<_Internal_error_Occurred>
0x005e6e5c <rtems_region_get_segment+184>: lis r9,130
0x005e6e60 <rtems_region_get_segment+188>: lwz r9,-7612(r9)
0x005e6e64 <rtems_region_get_segment+192>: addi r0,r9,16
0x005e6e68 <rtems_region_get_segment+196>: addi r9,r31,20
I'm no expert in assembler, but is this something to do with
_System_state_Get ? (Shown a few lines above).
I can't find _System_state_Get in my source code, but the disassembly looks
like this:
Dump of assembler code for function _System_state_Get:
0x005d8594 <_System_state_Get+0>: stwu r1,-16(r1)
0x005d8598 <_System_state_Get+4>: stw r31,12(r1)
0x005d859c <_System_state_Get+8>: mr r31,r1
0x005d85a0 <_System_state_Get+12>: lis r9,130
0x005d85a4 <_System_state_Get+16>: lwz r0,-7560(r9)
0x005d85a8 <_System_state_Get+20>: mr r3,r0
0x005d85ac <_System_state_Get+24>: lwz r11,0(r1)
0x005d85b0 <_System_state_Get+28>: lwz r31,-4(r11)
0x005d85b4 <_System_state_Get+32>: mr r1,r11
0x005d85b8 <_System_state_Get+36>: blr
End of assembler dump.
Can anyone shed some light onto this problem from the above?
Previously I have looked at the ISR_nest_Level variable, but that is zero
when this crash happens.
So, the question is, why does an error 18 occur when in task context?
Any help greatly appreciated.
Regards
Nick
-----------------------------
Nick Thomas
Email: nick.thomas at pixsan.com
More information about the users
mailing list