diff options
Diffstat (limited to 'gdb/ppc-linux-nat.c')
-rw-r--r-- | gdb/ppc-linux-nat.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c index 27c73c2..850d229 100644 --- a/gdb/ppc-linux-nat.c +++ b/gdb/ppc-linux-nat.c @@ -657,6 +657,15 @@ fetch_register (struct regcache *regcache, int tid, int regno) &ppc32_linux_pprregset); return; } + else if (regno == PPC_TAR_REGNUM) + { + gdb_assert (tdep->ppc_tar_regnum != -1); + + fetch_regset (regcache, tid, NT_PPC_TAR, + PPC_LINUX_SIZEOF_TARREGSET, + &ppc32_linux_tarregset); + return; + } if (regaddr == -1) { @@ -858,6 +867,10 @@ fetch_ppc_registers (struct regcache *regcache, int tid) fetch_regset (regcache, tid, NT_PPC_DSCR, PPC_LINUX_SIZEOF_DSCRREGSET, &ppc32_linux_dscrregset); + if (tdep->ppc_tar_regnum != -1) + fetch_regset (regcache, tid, NT_PPC_TAR, + PPC_LINUX_SIZEOF_TARREGSET, + &ppc32_linux_tarregset); } /* Fetch registers from the child process. Fetch all registers if @@ -1056,6 +1069,15 @@ store_register (const struct regcache *regcache, int tid, int regno) &ppc32_linux_pprregset); return; } + else if (regno == PPC_TAR_REGNUM) + { + gdb_assert (tdep->ppc_tar_regnum != -1); + + store_regset (regcache, tid, regno, NT_PPC_TAR, + PPC_LINUX_SIZEOF_TARREGSET, + &ppc32_linux_tarregset); + return; + } if (regaddr == -1) return; @@ -1275,6 +1297,10 @@ store_ppc_registers (const struct regcache *regcache, int tid) store_regset (regcache, tid, -1, NT_PPC_DSCR, PPC_LINUX_SIZEOF_DSCRREGSET, &ppc32_linux_dscrregset); + if (tdep->ppc_tar_regnum != -1) + store_regset (regcache, tid, -1, NT_PPC_TAR, + PPC_LINUX_SIZEOF_TARREGSET, + &ppc32_linux_tarregset); } /* Fetch the AT_HWCAP entry from the aux vector. */ @@ -2399,7 +2425,13 @@ ppc_linux_nat_target::read_description () if ((hwcap2 & PPC_FEATURE2_DSCR) && check_regset (tid, NT_PPC_PPR, PPC_LINUX_SIZEOF_PPRREGSET) && check_regset (tid, NT_PPC_DSCR, PPC_LINUX_SIZEOF_DSCRREGSET)) - features.ppr_dscr = true; + { + features.ppr_dscr = true; + if ((hwcap2 & PPC_FEATURE2_ARCH_2_07) + && (hwcap2 & PPC_FEATURE2_TAR) + && check_regset (tid, NT_PPC_TAR, PPC_LINUX_SIZEOF_TARREGSET)) + features.isa207 = true; + } return ppc_linux_match_description (features); } |