From b63098cf241d46f80c64c9977479ca4e1e8bd240 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Fri, 5 Jan 2007 21:42:12 +0100 Subject: [PATCH] winedump: Added ability to dump FPO debug information. --- tools/winedump/debug.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/tools/winedump/debug.c b/tools/winedump/debug.c index 4ce09c85aaa..10ec2d56334 100644 --- a/tools/winedump/debug.c +++ b/tools/winedump/debug.c @@ -578,8 +578,33 @@ void dump_codeview(unsigned long base, unsigned long len) 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 -- 2.11.4.GIT