On Wed, 2007-02-14 at 11:19 +0000, B B wrote: > offending instruction: > adds r4, r3, #0x0 > > offending c statement: > tcphdr = (struct tcp_hdr *)((u8_t *)p->payload + IPH_HL(iphdr) * 4); > > Register data: > R3 = 0x0020135c > R4 = 0x0020b1fa > CPSR = 0x0000009b > SPSR_UND = 0x0000001f > > Packetdata: > tcphdr @0x0020b1fa
Looks to me (not 100% sure what "adds" does or the argument format on your hardware) that it's the instruction that is trying to store the result of that C statement into tcphdr that is causing the problem. I think this because the value of R4 matches the address given for tcphdr. Please correct me if you disagree. The problem would seem to be that tcphdr has an address that is 2 byte aligned, not 4 byte aligned as you require. However, it's not clear from the above to me whether the value give for tcphdr is the address of the tcphdr variable, or the contents of the tcphdr variable (i.e. the address of what it points to). Can you clarify this? Kieran _______________________________________________ lwip-users mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/lwip-users
