[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] libgem16: vs_color
Am 18.01.2010, 10:44 Uhr, schrieb Vincent Rivière  
<vincent.riviere@freesbee.fr>:
But it is strange, the bug appears before the trap.
There is only standard C here, and nothing can be inlined...
Yeah - really strange: everything is on the stack, and should be separated  
from each other.
I think the explication will become obvious by looking at the generated  
assembler code.
This is without the static:
vs_color.o:     file format a.out-mint
Disassembly of section .text:
00000000 <_vs_color>:
   0: 4fef ffc0       lea %sp@(-64),%sp
   4: 2f02            movel %d2,%sp@-
   6: 342f 0048       movew %sp@(72),%d2
   a: 302f 004a       movew %sp@(74),%d0
   e: 206f 004c       moveal %sp@(76),%a0
  12: 42af 0022       clrl %sp@(34)
  16: 42af 0026       clrl %sp@(38)
  1a: 42af 002a       clrl %sp@(42)
  1e: 42af 002e       clrl %sp@(46)
  22: 42af 0032       clrl %sp@(50)
  26: 42af 0036       clrl %sp@(54)
  2a: 42af 003a       clrl %sp@(58)
  2e: 426f 003e       clrw %sp@(62)
  32: 42af 0006       clrl %sp@(6)
  36: 42af 000a       clrl %sp@(10)
  3a: 43ef 0022       lea %sp@(34),%a1
  3e: 2f49 000e       movel %a1,%sp@(14)
  42: 43ef 0006       lea %sp@(6),%a1
  46: 2f49 0012       movel %a1,%sp@(18)
  4a: 42af 0016       clrl %sp@(22)
  4e: 2f7c 0000 0000  movel #0,%sp@(26)
  54: 001a
  56: 2f7c 0000 0000  movel #0,%sp@(30)
  5c: 001e
  5e: 3f40 0006       movew %d0,%sp@(6)
  62: 3f58 0008       movew %a0@+,%sp@(8)
  66: 3f58 000a       movew %a0@+,%sp@(10)
  6a: 3f50 000c       movew %a0@,%sp@(12)
  6e: 43ef 000e       lea %sp@(14),%a1
  72: 2049            moveal %a1,%a0
  74: 2208            movel %a0,%d1
  76: 2050            moveal %a0@,%a0
  78: 20fc 000e 0000  movel #917504,%a0@+
  7e: 20fc 0000 0004  movel #4,%a0@+
  84: 20fc 0000 0000  movel #0,%a0@+
  8a: 3082            movew %d2,%a0@
  8c: 303c 0073       movew #115,%d0
  90: 4e42            trap #2
  92: 241f            movel %sp@+,%d2
  94: 4fef 0040       lea %sp@(64),%sp
  98: 4e75            rts
The bug appears at 62. I'm not very good at assembler though.
When I change the C-code to vdi_intin[1] = rgb[0], instead of *ptr++ =  
..., the pointer vdi_params.control is even, but something else gets  
corrupted, which again leads to an odd pointer arriving at fvdi for the  
rgb-array.
Or would it be possible there is a stack overflow ?
Even if the stack overflows, it should show up somewhere else (the  
caller), except another thread mixes it up, but then it would not always  
be the same, I assume.
Or something (interruption, etc...) that overwrites the stack variables?
That's the last possibility. I will write a test-prog later this week to  
see if it reproduces. If so, it should be possible to find it with gdb. If  
not: not good ...
--
Helmut Karlowski