Author: tkreuzer Date: Wed Nov 12 21:32:09 2008 New Revision: 37329
URL: http://svn.reactos.org/svn/reactos?rev=37329&view=rev Log: Fix a bug in DeDecodeU/Sleb128, resulting in wrong allocation unwind codes. Add some debugging stuff.
Modified: branches/ros-amd64-bringup/reactos/tools/rsym/rsym64.c
Modified: branches/ros-amd64-bringup/reactos/tools/rsym/rsym64.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/tools/... ============================================================================== --- branches/ros-amd64-bringup/reactos/tools/rsym/rsym64.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/tools/rsym/rsym64.c [iso-8859-1] Wed Nov 12 21:32:09 2008 @@ -5,6 +5,11 @@ #include "rsym.h" #include "rsym64.h" #include "dwarf2.h" + +char DoPrint = 0; +ULONG g_ehframep; + +#define DPRINT if(DoPrint) printf
struct {char *name; char regnt;} regs[] = { {"rax", REG_RAX}, {"rdx", REG_RDX}, {"rcx", REG_RCX}, {"rbx", REG_RBX}, @@ -35,7 +40,7 @@ { current = pc[ulSize]; ulSize++; - ulResult |= current & 0x7f << ulShift; + ulResult |= (current & 0x7f) << ulShift; ulShift += 7; } while (current & 0x80); @@ -56,7 +61,7 @@ { current = pc[ulSize]; ulSize++; - lResult |= current & 0x7f << ulShift; + lResult |= (current & 0x7f) << ulShift; ulShift += 7; } while (current & 0x80); @@ -214,7 +219,8 @@ }
State->FramePtrDiff = State->FramePtr - PrevFramePtr; -//printf("@%p: code=%x, Loc=%lx, offset=%lx, reg=0x%lx:%s\n", pc, code, State->Location, State->Offset, State->Reg, regnames_64[State->Reg]); + DPRINT("@%p: code=%x, Loc=%lx, offset=%lx, reg=0x%lx:%s\n", + (void*)((ULONG)pc - g_ehframep), Code, State->Location, State->Offset, State->Reg, regs[State->Reg].name); return Length; }
@@ -427,6 +433,7 @@
/* Get pointer to eh_frame section */ eh_frame = GetSectionPointer(File, File->eh_frame.idx); + g_ehframep = (ULONG)eh_frame;
/* Get sizes */ CountUnwindData(File);