From d037d08851dcb4ce4feb713a7f024ebac5d84cca Mon Sep 17 00:00:00 2001 From: Carlos O'Donell Date: Wed, 29 Aug 2007 04:11:06 +0000 Subject: [PATCH] 2007-08-29 Randolph Chung * hppa-tdep.c (hppa32_cannot_fetch_register) (hppa64_cannot_fetch_register): New functions. (hppa_gdbarch_init): Set cannot_fetch_register appropriately. * hppa-tdep.h (hppa_regnum): Add HPPA_CR26_REGNUM. --- gdb/ChangeLog | 7 +++++++ gdb/hppa-tdep.c | 24 ++++++++++++++++++++++-- gdb/hppa-tdep.h | 1 + 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3b97a5f833e..1b67a5916ac 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2007-08-29 Randolph Chung + + * hppa-tdep.c (hppa32_cannot_fetch_register) + (hppa64_cannot_fetch_register): New functions. + (hppa_gdbarch_init): Set cannot_fetch_register appropriately. + * hppa-tdep.h (hppa_regnum): Add HPPA_CR26_REGNUM. + 2007-08-28 Michael Snyder * mi/mi-cmd-var.c (mi_print_value_p): No longer necessary to diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c index f562e5fa059..10ac7ecde15 100644 --- a/gdb/hppa-tdep.c +++ b/gdb/hppa-tdep.c @@ -2673,6 +2673,16 @@ hppa32_cannot_store_register (int regnum) || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA_FP4_REGNUM)); } +static int +hppa32_cannot_fetch_register (int regnum) +{ + /* cr26 and cr27 are readable (but not writable) from userspace. */ + if (regnum == HPPA_CR26_REGNUM || regnum == HPPA_CR27_REGNUM) + return 0; + else + return hppa32_cannot_store_register (regnum); +} + static int hppa64_cannot_store_register (int regnum) { @@ -2682,6 +2692,16 @@ hppa64_cannot_store_register (int regnum) || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA64_FP4_REGNUM)); } +static int +hppa64_cannot_fetch_register (int regnum) +{ + /* cr26 and cr27 are readable (but not writable) from userspace. */ + if (regnum == HPPA_CR26_REGNUM || regnum == HPPA_CR27_REGNUM) + return 0; + else + return hppa64_cannot_store_register (regnum); +} + static CORE_ADDR hppa_smash_text_address (CORE_ADDR addr) { @@ -3074,7 +3094,7 @@ hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_cannot_store_register (gdbarch, hppa32_cannot_store_register); set_gdbarch_cannot_fetch_register (gdbarch, - hppa32_cannot_store_register); + hppa32_cannot_fetch_register); break; case 8: set_gdbarch_num_regs (gdbarch, hppa64_num_regs); @@ -3085,7 +3105,7 @@ hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_cannot_store_register (gdbarch, hppa64_cannot_store_register); set_gdbarch_cannot_fetch_register (gdbarch, - hppa64_cannot_store_register); + hppa64_cannot_fetch_register); break; default: internal_error (__FILE__, __LINE__, _("Unsupported address size: %d"), diff --git a/gdb/hppa-tdep.h b/gdb/hppa-tdep.h index 381a4ff354c..b7ba8fbc155 100644 --- a/gdb/hppa-tdep.h +++ b/gdb/hppa-tdep.h @@ -57,6 +57,7 @@ enum hppa_regnum HPPA_PID3_REGNUM = 56, /* Protection ID */ HPPA_CCR_REGNUM = 54, /* Coprocessor Configuration Register */ HPPA_TR0_REGNUM = 57, /* Temporary Registers (cr24 -> cr31) */ + HPPA_CR26_REGNUM = 59, HPPA_CR27_REGNUM = 60, /* Base register for thread-local storage, cr27 */ HPPA_FP0_REGNUM = 64, /* First floating-point. */ HPPA_FP4_REGNUM = 72, -- 2.30.2