- use (unsigned) long instead of ULONG

- add DW_CFA_offset_extended_sf

svn path=/branches/ros-amd64-bringup/; revision=37462
This commit is contained in:
Timo Kreuzer
2008-11-19 19:03:40 +00:00
parent 7ea9dd6a28
commit 4a08b236bd
2 changed files with 23 additions and 18 deletions
+13 -13
View File
@@ -802,27 +802,27 @@ typedef struct
typedef struct
{
ULONG Length;
unsigned long Length;
char *Next;
char *CiePointer;
ULONG PcBegin;
ULONG PcRange;
ULONG AugLength;
unsigned long PcBegin;
unsigned long PcRange;
unsigned long AugLength;
char *AugData;
char *Instructions;
} DW2FDE, *PDW2FDE;
typedef struct _CFSTATE
{
ULONG Location;
ULONG Code;
ULONG Reg;
ULONG Reg2;
ULONG FramePtr;
ULONG FramePtrDiff;
ULONG Offset;
ULONG IsUwop;
ULONG Scope;
unsigned long Location;
unsigned long Code;
unsigned long Reg;
unsigned long Reg2;
long FramePtr;
long FramePtrDiff;
long Offset;
unsigned long IsUwop;
unsigned long Scope;
} DW2CFSTATE, *PDW2CFSTATE;
#define NextCIE(p) ((void*)((char*)p + p->Length + 4))
+10 -5
View File
@@ -131,7 +131,7 @@ DwExecIntruction(PDW2CFSTATE State, char *pc)
{
State->Code = DW_CFA_offset;
State->Reg = Code & 0x3f;
Length += DwDecodeUleb128(&State->Offset, pc + 1);
Length += DwDecodeUleb128((unsigned long*)&State->Offset, pc + 1);
State->Offset *= 8; // fixme data alignment
State->IsUwop = 1;
}
@@ -162,7 +162,12 @@ DwExecIntruction(PDW2CFSTATE State, char *pc)
break;
case DW_CFA_offset_extended:
Length += DwDecodeUleb128(&State->Reg, pc + Length);
Length += DwDecodeUleb128(&State->Offset, pc + Length);
Length += DwDecodeUleb128((unsigned long*)&State->Offset, pc + Length);
State->IsUwop = 1;
break;
case DW_CFA_offset_extended_sf:
Length += DwDecodeUleb128(&State->Reg, pc + Length);
Length += DwDecodeSleb128(&State->Offset, pc + Length);
State->IsUwop = 1;
break;
case DW_CFA_restore_extended:
@@ -184,19 +189,19 @@ DwExecIntruction(PDW2CFSTATE State, char *pc)
break;
case DW_CFA_def_cfa:
Length += DwDecodeUleb128(&State->Reg, pc + Length);
Length += DwDecodeUleb128(&State->FramePtr, pc + Length);
Length += DwDecodeUleb128((unsigned long*)&State->FramePtr, pc + Length);
State->IsUwop = 1;
break;
case DW_CFA_def_cfa_register:
Length += DwDecodeUleb128(&State->Reg, pc + Length);
break;
case DW_CFA_def_cfa_offset:
Length += DwDecodeUleb128(&State->FramePtr, pc + Length);
Length += DwDecodeUleb128((unsigned long*)&State->FramePtr, pc + Length);
State->IsUwop = 1;
break;
case DW_CFA_def_cfa_sf:
Length += DwDecodeUleb128(&State->Reg, pc + Length);
Length += DwDecodeSleb128((LONG*)&State->FramePtr, pc + Length);
Length += DwDecodeSleb128(&State->FramePtr, pc + Length);
State->FramePtr *= 8; // data alignment
State->IsUwop = 1;
break;