diff options
-rw-r--r-- | src/aarch64/Gregs.c | 4 | ||||
-rw-r--r-- | src/arm/Gregs.c | 4 | ||||
-rw-r--r-- | src/mips/Gregs.c | 2 | ||||
-rw-r--r-- | src/sh/Gregs.c | 4 | ||||
-rw-r--r-- | src/tilegx/Gregs.c | 6 |
5 files changed, 16 insertions, 4 deletions
diff --git a/src/aarch64/Gregs.c b/src/aarch64/Gregs.c index 6288275b..3e014769 100644 --- a/src/aarch64/Gregs.c +++ b/src/aarch64/Gregs.c @@ -55,6 +55,9 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, loc = c->dwarf.loc[reg]; break; + case UNW_AARCH64_PC: + if (write) + c->dwarf.ip = *valp; /* update the IP cache */ case UNW_AARCH64_X4: case UNW_AARCH64_X5: case UNW_AARCH64_X6: @@ -82,7 +85,6 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, case UNW_AARCH64_X28: case UNW_AARCH64_X29: case UNW_AARCH64_X30: - case UNW_AARCH64_PC: case UNW_AARCH64_PSTATE: loc = c->dwarf.loc[reg]; break; diff --git a/src/arm/Gregs.c b/src/arm/Gregs.c index 688771f3..0d52f0b2 100644 --- a/src/arm/Gregs.c +++ b/src/arm/Gregs.c @@ -32,6 +32,9 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, switch (reg) { + case UNW_ARM_R15: + if (write) + c->dwarf.ip = *valp; /* update the IP cache */ case UNW_ARM_R0: case UNW_ARM_R1: case UNW_ARM_R2: @@ -46,7 +49,6 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, case UNW_ARM_R11: case UNW_ARM_R12: case UNW_ARM_R14: - case UNW_ARM_R15: loc = c->dwarf.loc[reg - UNW_ARM_R0]; break; diff --git a/src/mips/Gregs.c b/src/mips/Gregs.c index 26977767..95194022 100644 --- a/src/mips/Gregs.c +++ b/src/mips/Gregs.c @@ -70,6 +70,8 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, break; case UNW_MIPS_PC: + if (write) + c->dwarf.ip = *valp; /* update the IP cache */ loc = c->dwarf.loc[reg]; break; diff --git a/src/sh/Gregs.c b/src/sh/Gregs.c index fb4ca740..7d8e8e93 100644 --- a/src/sh/Gregs.c +++ b/src/sh/Gregs.c @@ -33,6 +33,9 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, switch (reg) { + case UNW_SH_PC: + if (write) + c->dwarf.ip = *valp; /* update the IP cache */ case UNW_SH_R0: case UNW_SH_R1: case UNW_SH_R2: @@ -48,7 +51,6 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, case UNW_SH_R12: case UNW_SH_R13: case UNW_SH_R14: - case UNW_SH_PC: case UNW_SH_PR: loc = c->dwarf.loc[reg]; break; diff --git a/src/tilegx/Gregs.c b/src/tilegx/Gregs.c index 53e7bf4c..57c61256 100644 --- a/src/tilegx/Gregs.c +++ b/src/tilegx/Gregs.c @@ -52,7 +52,11 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, } if (write) - return dwarf_put (&c->dwarf, loc, *valp); + { + if (reg == UNW_TILEGX_PC) + c->dwarf.ip = *valp; /* update the IP cache */ + return dwarf_put (&c->dwarf, loc, *valp); + } else return dwarf_get (&c->dwarf, loc, valp); } |