My little test program is nearly working now. Some funny things I have found:
- When not using -O2 4 extra bytes appear in front of tdata init values. With -O2 they disappear. - I have my own calloc where I first allocate a block with malloc and then use memset to zero it. GCC can see this and replaces these two calls with a call to calloc...
There were big changes in exception handling code about 2 years ago and my exception code stopped to work. What was changed back then? How can I get my code to work again? Could this be some struct alignment problem like some years ago?
The program dies somewhere in unwinding code. It looks like the stack pointer is moved incorrectly and values are popped to wrong registers in function return. There might be a size mismatch between c and d side when function arguments are passed in stack.
Any idea where to look?