[En-Nut-Discussion] data abort in NutThreadSwitch
Coleman Brumley
cbrumley at polarsoft.biz
Wed Mar 4 02:27:50 CET 2009
FWIW, this problem was caused by compiling the application in arm-gcc mode
against NutOS libraries compiled in arm-gccdbg mode.
Compiling both the libs and the app in arm-gcc mode was the answer.
- Coleman
> -----Original Message-----
> From: en-nut-discussion-bounces at egnite.de [mailto:en-nut-discussion-
> bounces at egnite.de] On Behalf Of Coleman Brumley
> Sent: Wednesday, February 25, 2009 6:52 PM
> To: en-nut-discussion at egnite.de
> Subject: [En-Nut-Discussion] data abort in NutThreadSwitch
>
> Hello,
>
> I've implemented the _data_abort handler that Harald provided at
> http://www.ethernut.de/en/documents/arm-exceptions.html.
>
> When I run my application, I get "Data Abort at 0x19970 0xE8BD0010" in
> the
> terminal and the app stops running since it goes into an endless loop
> in the
> data abort handler.
>
> I'm using ethernut v4.6.4 compiled with the gccdbg settings. I've
> built the
> OS using NutConf with the at91sam7x-ek.conf file.
>
> Based on my research, the abort is occurring in NutThreadSwitch. When
> I get
> to the data abort handler, LR is 0x19978 which is PC+8. If I subtract
> 8
> from that and use the gdb command x/i 0x19970, it shows:
>
> (gdb) x/i 0x19970
> 0x19970 <NutThreadSwitch+68>: pop {r4}
>
> The full assembler code is (from the gdb command disas 0x19970):
>
> Dump of assembler code for function NutThreadSwitch:
> 0x0001992c <NutThreadSwitch+0>: ldr r3, [pc, #80] ; 0x19984
> <NutThreadSwitch+88>
> 0x00019930 <NutThreadSwitch+4>: ldr r3, [r3]
> 0x00019934 <NutThreadSwitch+8>: push {r4, r5, r6, r7, r8, r9,
r10,
> r11,
> lr}
> 0x00019938 <NutThreadSwitch+12>: mrs r4, CPSR
> 0x0001993c <NutThreadSwitch+16>: push {r4}
> 0x00019940 <NutThreadSwitch+20>: str sp, [r3, #24]
> 0x00019944 <NutThreadSwitch+24>: ldr r3, [pc, #60] ; 0x19988
> <NutThreadSwitch+92>
> 0x00019948 <NutThreadSwitch+28>: ldr r2, [r3]
> 0x0001994c <NutThreadSwitch+32>: ldr r3, [pc, #48] ; 0x19984
> <NutThreadSwitch+88>
> 0x00019950 <NutThreadSwitch+36>: str r2, [r3]
> 0x00019954 <NutThreadSwitch+40>: ldr r3, [pc, #40] ; 0x19984
> <NutThreadSwitch+88>
> 0x00019958 <NutThreadSwitch+44>: ldr r2, [r3]
> 0x0001995c <NutThreadSwitch+48>: mov r3, #1 ; 0x1
> 0x00019960 <NutThreadSwitch+52>: strb r3, [r2, #21]
> 0x00019964 <NutThreadSwitch+56>: ldr r3, [pc, #24] ; 0x19984
> <NutThreadSwitch+88>
> 0x00019968 <NutThreadSwitch+60>: ldr r3, [r3]
> 0x0001996c <NutThreadSwitch+64>: ldr sp, [r3, #24]
> 0x00019970 <NutThreadSwitch+68>: pop {r4}
> 0x00019974 <NutThreadSwitch+72>: bic r4, r4, #192 ; 0xc0
> 0x00019978 <NutThreadSwitch+76>: msr SPSR_fc, r4
> 0x0001997c <NutThreadSwitch+80>: pop {r4, r5, r6, r7, r8, r9,
> r10, r11, lr}
> 0x00019980 <NutThreadSwitch+84>: movs pc, lr
> 0x00019984 <NutThreadSwitch+88>: eoreq r5, r0, r4, asr #3
> 0x00019988 <NutThreadSwitch+92>: eoreq r5, r0, r0, asr #3
> End of assembler dump.
>
> If it helps, r4 at this point is 0x600000d3. I'm not sure what r4 is
> *supposed* to contain here, but that doesn't look valid to me.
>
> My application is based on the httpserv example, which is a
> multithreaded
> http server with a CGI form. This exception happens anytime I try to
> load
> the web page. The same code works (i.e. doesn't cause the data abort)
> with
> an older version of Nut/OS (4.1.9.99).
>
> Has anyone else encountered this? If so, what did you do about it?
> Any
> idea what could be causing this?
>
> Regards and TIA,
> Coleman
>
> _______________________________________________
> http://lists.egnite.de/mailman/listinfo/en-nut-discussion
More information about the En-Nut-Discussion
mailing list