One problem have puzzled me few days. I have run vxworks 5.4 over
852t board, but some tasks
were suspended abnormally, the data access exceptions happpened. But
the source codes were simple, They are some offset caculation in hdlc
driver module. And there are two caculations in same, the first one
could be caculated successlly, the second one failed. I have checked
in assemble codes, and I found one instruction is explained in wrong
format. The codes are listed in follow,
0069f448 3d200071 lis r9, 0x71 (113)
0069f44c 380992a8 addi r0, r9, 0x92a8
(-27992) =====> lis r9, 0x92a8
0069f450 817f000c lwz r11, 0xc(r31)
0069f454 1d2b0028 mulli r9, r11, 0x28 (40)
0069f458 7d604a14 add r11, r0, r9
0069f45c 812b0010 lwz r9, 0x10(r11)
0069f460 a1690002 lhz r11, 0x2(r9)
0069f464 5560043e rlwinm r0, r11, 0x0, 16,
0069f468 3d200720 lis r9, 0x720 (1824)
0069f46c 61292000 ori r9, r9, 0x2000
When I checked r9 and r0 values , I found the second instruction was
explained as "lis r9, 0x92a8", hex format 0x3d2092a8, and r9 values
was 0x92a80000. because the wrong instruction, the pointer was set in
wrong address, and the task was corrupted.
Other tasks corrupt were similar to this problem.
Any help are great appreciated. Thanks!