Eric Pouech : winedump: Added ability to dump FPO debug information.

Alexandre Julliard julliard at wine.codeweavers.com
Sat Jan 6 05:12:50 CST 2007


Module: wine
Branch: master
Commit: b63098cf241d46f80c64c9977479ca4e1e8bd240
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b63098cf241d46f80c64c9977479ca4e1e8bd240

Author: Eric Pouech <eric.pouech at 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




More information about the wine-cvs mailing list