This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi,
I'm still trying to implement the MD_FALLBACK_FRAME_STATE_FOR macro for darwin. While doing so I get a bit confused about the context I find during debugging.
First, some words on how I do it.
In libgcj we need this macro to catch NullPointerExceptions and friends.
To catch a EXC_BAD_ACCESS under darwin we have to install a mach message handler to catch the exception, then we can modify the threadstate and call a forwarding function to call a SIGSEGV.
After that the MAKE_THROW_FRAME from libjava/include/*signal.h gets invoked.
The mechanism is not finished yet but for prototyping it should work.
Now I can run the Throw_2 testcase from libjava.lang and catch the EXC_BAD_ACCESS. Then I modify the threadstate to call a > raise(SIGSEGV).
I end up in the MAKE_THROW_FRAME and there it should start with unwinding. Here I have my problems in understanding.
I enter the MD_FALLBACK_FRAME_STATE_FOR and see a context->ra which is in the middle of sigtramp and not as I would expect at the beginning of sigreturn.
Below the disass. I would expect context->ra at 0x9000fae0 and not at 0x9000fa9c.
Now where does this context come from? I see the init here:
unwind-dw2.c:1184#define uw_init_context(CONTEXT)
But I don't follow, do we have a __builtin_unwind_init on darwin?
And what about __builtin_return_address ? There are some comments from mrs in rs6000.h
Any further readings, hints are very appreciated.
Thank you in advance.
Andreas
(gdb) p context->ra $3 = (void *) 0x9000fa9c
Dump of assembler code from 0x9000fa9c to 0x9000fb20:
0x9000fa9c <_sigtramp+92>: addi r11,r29,4648
0x9000faa0 <_sigtramp+96>: mr r3,r30
0x9000faa4 <_sigtramp+100>: lwz r9,0(r11)
0x9000faa8 <_sigtramp+104>: addi r9,r9,-1
0x9000faac <_sigtramp+108>: stw r9,0(r11)
0x9000fab0 <_sigtramp+112>: lwz r0,88(r1)
0x9000fab4 <_sigtramp+116>: addi r1,r1,80
0x9000fab8 <_sigtramp+120>: lmw r29,-12(r1)
0x9000fabc <_sigtramp+124>: mtlr r0
0x9000fac0 <_sigtramp+128>: b 0x900cca1c <dyld_stub_sigreturn>
0x9000fac4 <_sigtramp+132>: .long 0x0
0x9000fac8 <_sigtramp+136>: .long 0x0
0x9000facc <_sigtramp+140>: .long 0x0
0x9000fad0 <_sigtramp+144>: .long 0x0
0x9000fad4 <_sigtramp+148>: .long 0x0
0x9000fad8 <_sigtramp+152>: .long 0x0
0x9000fadc <_sigtramp+156>: .long 0x0
0x9000fae0 <sigreturn+0>: li r0,103
0x9000fae4 <sigreturn+4>: sc
0x9000fae8 <sigreturn+8>: b 0x9000faf0 <sigreturn+16>
0x9000faec <sigreturn+12>: b 0x9000fb10 <sigreturn+48>
0x9000faf0 <sigreturn+16>: mflr r0
0x9000faf4 <sigreturn+20>: bl 0x9000faf8 <sigreturn+24>
0x9000faf8 <sigreturn+24>: mflr r12
0x9000fafc <sigreturn+28>: mtlr r0
0x9000fb00 <sigreturn+32>: addis r12,r12,4095
0x9000fb04 <sigreturn+36>: lwz r12,21960(r12)
0x9000fb08 <sigreturn+40>: mtctr r12
0x9000fb0c <sigreturn+44>: bctr
0x9000fb10 <sigreturn+48>: nop
0x9000fb14 <sigreturn+52>: blr
0x9000fb18 <sigreturn+56>: .long 0x0
0x9000fb1c <sigreturn+60>: .long 0x0
End of assembler dump.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |