Module: wine Branch: master Commit: b63098cf241d46f80c64c9977479ca4e1e8bd240 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b63098cf241d46f80c64c99774...
Author: Eric Pouech eric.pouech@wanadoo.fr Date: Fri Jan 5 21:42:12 2007 +0100
winedump: Added ability to dump FPO debug information.
---
tools/winedump/debug.c | 29 +++++++++++++++++++++++++++-- 1 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/tools/winedump/debug.c b/tools/winedump/debug.c index 4ce09c8..10ec2d5 100644 --- a/tools/winedump/debug.c +++ b/tools/winedump/debug.c @@ -578,8 +578,33 @@ void dump_codeview(unsigned long base, u
void dump_frame_pointer_omission(unsigned long base, unsigned long len) { - /* FPO is used to describe nonstandard stack frames */ - printf("FIXME: FPO (frame pointer omission) debug symbol dumping not implemented yet.\n"); + const FPO_DATA* fpo; + const FPO_DATA* last; + const char* x; + /* FPO is used to describe nonstandard stack frames */ + printf("Range #loc #pmt Prlg #reg Info\n" + "-----------------+----+----+----+----+------------\n"); + + fpo = (const FPO_DATA*)PRD(base, len); + if (!fpo) {printf("Couldn't get FPO blob\n"); return;} + last = (const FPO_DATA*)((const char*)fpo + len); + + while (fpo < last && fpo->ulOffStart) + { + switch (fpo->cbFrame) + { + case FRAME_FPO: x = "FRAME_FPO"; break; + case FRAME_NONFPO: x = "FRAME_NONFPO"; break; + case FRAME_TRAP: x = "FRAME_TRAP"; break; + case FRAME_TSS: x = "case FRAME_TSS"; break; + default: x = NULL; break; + } + printf("%08x-%08x %4u %4u %4u %4u %s%s%s\n", + fpo->ulOffStart, fpo->ulOffStart + fpo->cbProcSize, + fpo->cdwLocals, fpo->cdwParams, fpo->cbProlog, fpo->cbRegs, + x, fpo->fHasSEH ? " SEH" : "", fpo->fUseBP ? " UseBP" : ""); + fpo++; + } }
struct stab_nlist