[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