tcp_bind data abort

Hi, I am using the FreeRTOS v4.1.2 GCC version of the lwIP_Demo_Rowley_ARM7 demo in an AT91SAM7X256 based board. I am getting data abort errors within tcp.c (in the tcp_bind function) that crashes the kernel. Has anyone come across this before? Is this a FreeRTOS or an lwIP issue? Thanks in advance. Regards,

tcp_bind data abort

Stack issue is the first thing to look at-try increasing the stack of the task that runns tcp.c. Second there was some talk a little while back about a bug in GCC that could potentially cause a problem.  A fix was also noted.  Take a look at this thread: http://sourceforge.net/forum/forum.php?thread_id=1597532&forum_id=382005.  Maybe this is causing the issue?

tcp_bind data abort

I am using GCC 4.1.1 with Thumb code so I probably have the stack issue as mentioned in the previous message. I added the following line SUB R0, R0, #8 just before line 150 in portmacro.h (in portable/GCC/ARM7_AT91SAM7S). Is this a final solution to be implemented in the next stable release of FreeRTOS (v4.1.3)? Or is further investigation ongoing? As well, I continue to have data abort issues. It seems to be related to the tcp_active_pcbs variable in line 259 of tcp.c. 259   for(cpcb = tcp_active_pcbs; 260       cpcb != NULL; cpcb = cpcb->next) { 261     if (cpcb->local_port == port) { 262       if (ip_addr_isany(&(cpcb->local_ip)) || 263    ip_addr_isany(ipaddr) || 264    ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { 265   return ERR_USE; Somehow when I add my user task (an interrupt based SPI driver in ARM mode) to FreeRTOS, the tcp_active_pcbs is not NULL initially. Hence the for loop causes a data abort as the cpcb pointer keeps incrementing. This occurs even when I simply add the user task code to the build without even actually creating the task. I am currently looking at the arm-elf-objdump output of the FreeRTOS executible, to see whether the global tcp_active_pcbs variable is being mangled by my user task code during the compile and linking process… What fun!

tcp_bind data abort

Sounds a bit hairy – like a linkage problem as you suggest.  I don’t know how lwIP allocates memory, could it be that the malloc heap is not being setup correctly?  Or does it not use a heap in this way. Regards GCC.  I don’t think this change should be in the main FreeRTOS code.  It is a bug in GCC that needs fixing.  My preference is to use the omit-frame-pointers option for now.  How anybody reported the bug? Adding 8 to the stack increases the stack usage quite a lot and only fixes the problem in FreeRTOS.  Any other code you have that uses a system/user stack from within an IRQ will also be effected.  For example the comms stack that I have.

tcp_bind data abort

I updated to FreeRTOS 4.1.3 containing the -fomit-frame-pointers flag and now I no longer get any tcp_bind data aborts. I guess that solves this problem. Regards,