|
From: <sv...@va...> - 2005-05-02 12:25:40
|
Author: sewardj
Date: 2005-05-02 13:25:13 +0100 (Mon, 02 May 2005)
New Revision: 3595
Modified:
trunk/coregrind/vg_dwarf.c
Log:
Handle DW_CFA_register.
Modified: trunk/coregrind/vg_dwarf.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_dwarf.c 2005-05-02 12:24:39 UTC (rev 3594)
+++ trunk/coregrind/vg_dwarf.c 2005-05-02 12:25:13 UTC (rev 3595)
@@ -909,11 +909,11 @@
=20
8 is the return address (EIP) */
=20
-#if defined(__x86__)
+#if defined(VGP_x86_linux)
#define FP_COL 5
#define SP_COL 4
#define RA_COL 8
-#elif defined(__amd64__)
+#elif defined(VGP_amd64_linux)
#define FP_COL 6
#define SP_COL 7
#define RA_COL 16
@@ -1327,7 +1327,7 @@
UChar* instr,
UnwindContext* restore_ctx )
{
- Int off, reg, nleb;
+ Int off, reg, reg2, nleb;
UInt delta;
Int i =3D 0;
UChar hi2 =3D (instr[i] >> 6) & 3;
@@ -1394,6 +1394,19 @@
ctx->cfa_offset =3D off;
break;
=20
+ case DW_CFA_register:
+ reg =3D read_leb128( &instr[i], &nleb, 0);
+ i +=3D nleb;
+ reg2 =3D read_leb128( &instr[i], &nleb, 0);
+ i +=3D nleb;
+ if (reg < 0 || reg >=3D N_CFI_REGS)=20
+ return 0; /* fail */
+ if (reg2 < 0 || reg2 >=3D N_CFI_REGS)=20
+ return 0; /* fail */
+ ctx->reg[reg].tag =3D RR_Reg;
+ ctx->reg[reg].reg =3D reg2;
+ break;
+
case DW_CFA_offset_extended_sf:
reg =3D read_leb128( &instr[i], &nleb, 0 );
i +=3D nleb;
@@ -1440,7 +1453,7 @@
static Int show_CF_instruction ( UChar* instr )
{
UInt delta;
- Int off, reg, nleb;
+ Int off, reg, reg2, nleb;
Addr loc;
Int i =3D 0;
UChar hi2 =3D (instr[i] >> 6) & 3;
@@ -1505,6 +1518,14 @@
VG_(printf)("DW_CFA_def_cfa(r%d, off %d)\n", reg, off);=20
break;
=20
+ case DW_CFA_register:
+ reg =3D read_leb128( &instr[i], &nleb, 0);
+ i +=3D nleb;
+ reg2 =3D read_leb128( &instr[i], &nleb, 0);
+ i +=3D nleb;
+ VG_(printf)("DW_CFA_register(r%d, r%d)\n", reg, reg2);=20
+ break;
+
case DW_CFA_def_cfa_register:
reg =3D read_leb128( &instr[i], &nleb, 0);
i +=3D nleb;
|