|need ideas on how to debug code generator email@example.com (Ram Bhamidipaty) (2008-02-24)|
|Re: need ideas on how to debug code generator firstname.lastname@example.org (Thomas Have) (2008-02-25)|
|Re: need ideas on how to debug code generator email@example.com (Nils) (2008-02-26)|
|Re: need ideas on how to debug code generator firstname.lastname@example.org (Bartc) (2008-02-27)|
|Re: need ideas on how to debug code generator email@example.com (Joel Yliluoma) (2008-02-28)|
|From:||Joel Yliluoma <firstname.lastname@example.org>|
|Date:||28 Feb 2008 06:34:50 GMT|
|Organization:||TDC Internet Services|
|Posted-Date:||28 Feb 2008 10:44:39 EST|
On Sun, 24 Feb 2008 21:47:50 -0800, Ram Bhamidipaty wrote:
> I have a small code generator - for 32 bit x86 machines, unfortunately it
> has some bugs :-(. My problem is that the generated code fails
> "once in a while" sometimes it can go for 20-40 iterations before failing.
> I have a collection of test cases where I verify the correctness of
> various simple constructs -- things like load, store, add, sub, etc.
> Those all pass.
> The test case in question generates a code sequence of about 400 bytes. It
> fails by seg faulting, unfortunately gdb is unable to print out a
> useful stack trace.
> What are some techniques that people have used for debugging code
I am assuming you use a combination of a mprotect(..., PROT_EXEC)
and a cast into a function pointer to run generated code.
GDB can do generated code debugging tolerably, if you use a combination
of "display /i $pc", "stepi" and "disassemble <address1> <address2>".
When the program segfaults, you'll get the address and the exact
opcode that caused the segfault, and you can use disassemble to find
out about the surrounding context. Additionally, you can use "display
/i $registername" and "stepi" to singlestep through the generated
((Reposting, because I did not receive a moderation queuing notification.))
Joel Yliluoma - http://iki.fi/bisqwit/
Return to the
Search the comp.compilers archives again.