2004-03-07 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Sun, 7 Mar 2004 19:58:27 +0000 (19:58 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sun, 7 Mar 2004 19:58:27 +0000 (19:58 +0000)
* hppa-tdep.c: Replace DEPRECATED_FP_REGNUM with HPPA_FP_REGNUM,
FP0_REGNUM with HPPA_FP0_REGNUM, and SP_REGNUM with
HPPA_SP_REGNUM.
(hppa_register_raw_size, hppa_register_byte, hppa_read_fp)
(hppa_target_read_fp): Delete.
(hppa_gdbarch_init): Do not set deprecated register_raw_size,
register_virtual_size, max_register_raw_size,
max_register_virtual_size, register_byte, register_size,
target_read_fp, fp_regnum, and register_bytes.  Set register_type
instead of register_virtual_type.
(hppa32_register_type, hppa64_register_type): Replace
hppa32_register_virtual_type and hppa64_register_virtual_type.
* config/pa/tm-hppa.h (HPPA_FP0_REGNUM, HPPA_SP_REGNUM)
(HPPA_FP_REGNUM): Define.

gdb/ChangeLog
gdb/config/pa/tm-hppa.h
gdb/hppa-tdep.c

index 06a26790ea9d8ed9b239f1b8904392c268a475c5..ded5f74f5584a5f9a07053b04a5d68a64b047daa 100644 (file)
@@ -1,5 +1,20 @@
 2004-03-07  Andrew Cagney  <cagney@redhat.com>
 
+       * hppa-tdep.c: Replace DEPRECATED_FP_REGNUM with HPPA_FP_REGNUM,
+       FP0_REGNUM with HPPA_FP0_REGNUM, and SP_REGNUM with
+       HPPA_SP_REGNUM.
+       (hppa_register_raw_size, hppa_register_byte, hppa_read_fp)
+       (hppa_target_read_fp): Delete.
+       (hppa_gdbarch_init): Do not set deprecated register_raw_size,
+       register_virtual_size, max_register_raw_size,
+       max_register_virtual_size, register_byte, register_size,
+       target_read_fp, fp_regnum, and register_bytes.  Set register_type
+       instead of register_virtual_type.
+       (hppa32_register_type, hppa64_register_type): Replace
+       hppa32_register_virtual_type and hppa64_register_virtual_type.
+       * config/pa/tm-hppa.h (HPPA_FP0_REGNUM, HPPA_SP_REGNUM)
+       (HPPA_FP_REGNUM): Define.
+
        * hppa-tdep.c (hppa_gdbarch_init): Add missing "break".
 
        * config/pa/tm-hppa.h (DEPRECATED_DO_REGISTERS_INFO)
index 06e3193a7b3e7bbb3e10822ff3854a3e8f3cf11c..13dbd2876c3e0313a349b5e799f95861fd066694 100644 (file)
@@ -59,6 +59,8 @@ extern int hppa_pc_requires_run_before_use (CORE_ADDR pc);
                                   other r registers.  */
 #define FLAGS_REGNUM 0         /* Various status flags */
 #define RP_REGNUM 2            /* return pointer */
+#define HPPA_FP_REGNUM 3       /* The ABI's frame pointer, when used */
+#define HPPA_SP_REGNUM 30      /* Stack pointer.  */
 #define SAR_REGNUM 32          /* Shift Amount Register */
 #define IPSW_REGNUM 41         /* Interrupt Processor Status Word */
 #define PCOQ_HEAD_REGNUM 33    /* instruction offset queue head */
@@ -73,6 +75,7 @@ extern int hppa_pc_requires_run_before_use (CORE_ADDR pc);
 #define CCR_REGNUM 54          /* Coprocessor Configuration Register */
 #define TR0_REGNUM 57          /* Temporary Registers (cr24 -> cr31) */
 #define CR27_REGNUM 60         /* Base register for thread-local storage, cr27 */
+#define HPPA_FP0_REGNUM 64     /* First floating-point.  */
 #define FP4_REGNUM 72
 
 #define ARG0_REGNUM 26         /* The first argument of a callee. */
index ae347530fecc1b6dc52962b9441228bb5ebe02b9..f96a21132d1bb731a3e3a5374ff6e5959130e8a7 100644 (file)
@@ -147,15 +147,10 @@ int hppa_in_solib_return_trampoline (CORE_ADDR pc, char *name);
 int hppa_inner_than (CORE_ADDR lhs, CORE_ADDR rhs);
 int hppa_pc_requires_run_before_use (CORE_ADDR pc);
 int hppa_instruction_nullified (void);
-int hppa_register_raw_size (int reg_nr);
-int hppa_register_byte (int reg_nr);
-struct type * hppa32_register_virtual_type (int reg_nr);
-struct type * hppa64_register_virtual_type (int reg_nr);
 int hppa_cannot_store_register (int regnum);
 CORE_ADDR hppa_smash_text_address (CORE_ADDR addr);
 CORE_ADDR hppa_target_read_pc (ptid_t ptid);
 void hppa_target_write_pc (CORE_ADDR v, ptid_t ptid);
-CORE_ADDR hppa_target_read_fp (void);
 
 typedef struct
   {
@@ -1155,31 +1150,6 @@ cover_find_stub_with_shl_get (void *args_untyped)
   return 0;
 }
 
-/* If the pid is in a syscall, then the FP register is not readable.
-   We'll return zero in that case, rather than attempting to read it
-   and cause a warning. */
-
-CORE_ADDR
-hppa_read_fp (int pid)
-{
-  int flags = read_register (FLAGS_REGNUM);
-
-  if (flags & 2)
-    {
-      return (CORE_ADDR) 0;
-    }
-
-  /* This is the only site that may directly read_register () the FP
-     register.  All others must use deprecated_read_fp (). */
-  return read_register (DEPRECATED_FP_REGNUM);
-}
-
-CORE_ADDR
-hppa_target_read_fp (void)
-{
-  return hppa_read_fp (PIDGET (inferior_ptid));
-}
-
 /* Get the PC from %r31 if currently in a syscall.  Also mask out privilege
    bits.  */
 
@@ -1725,7 +1695,7 @@ hppa_skip_trampoline_code (CORE_ADDR pc)
             rp from sp - 8.  */
          if (prev_inst == 0x4bc23ff1)
            return (read_memory_integer
-                   (read_register (SP_REGNUM) - 8, 4)) & ~0x3;
+                   (read_register (HPPA_SP_REGNUM) - 8, 4)) & ~0x3;
          else
            {
              warning ("Unable to find restore of %%rp before bv (%%rp).");
@@ -1739,7 +1709,7 @@ hppa_skip_trampoline_code (CORE_ADDR pc)
       else if ((curr_inst & 0xffe0f000) == 0xe840d000)
        {
          return (read_memory_integer
-                 (read_register (SP_REGNUM) - 24, TARGET_PTR_BIT / 8)) & ~0x3;
+                 (read_register (HPPA_SP_REGNUM) - 24, TARGET_PTR_BIT / 8)) & ~0x3;
        }
 
       /* What about be,n 0(sr0,%rp)?  It's just another way we return to
@@ -1751,7 +1721,7 @@ hppa_skip_trampoline_code (CORE_ADDR pc)
             I guess we could check for the previous instruction being
             mtsp %r1,%sr0 if we want to do sanity checking.  */
          return (read_memory_integer
-                 (read_register (SP_REGNUM) - 24, TARGET_PTR_BIT / 8)) & ~0x3;
+                 (read_register (HPPA_SP_REGNUM) - 24, TARGET_PTR_BIT / 8)) & ~0x3;
        }
 
       /* Haven't found the branch yet, but we're still in the stub.
@@ -1938,7 +1908,7 @@ restart:
   for (i = 3; i < u->Entry_GR + 3; i++)
     {
       /* Frame pointer gets saved into a special location.  */
-      if (u->Save_SP && i == DEPRECATED_FP_REGNUM)
+      if (u->Save_SP && i == HPPA_FP_REGNUM)
        continue;
 
       save_gr |= (1 << i);
@@ -2232,7 +2202,7 @@ hppa_frame_cache (struct frame_info *next_frame, void **this_cache)
   for (i = 3; i < u->Entry_GR + 3; i++)
     {
       /* Frame pointer gets saved into a special location.  */
-      if (u->Save_SP && i == DEPRECATED_FP_REGNUM)
+      if (u->Save_SP && i == HPPA_FP_REGNUM)
        continue;
        
       saved_gr_mask |= (1 << i);
@@ -2302,13 +2272,13 @@ hppa_frame_cache (struct frame_info *next_frame, void **this_cache)
            || (inst & 0xffffc00c) == 0x73c10008) /* std,ma r1,N(sr0,sp) */
          {
            looking_for_sp = 0;
-           cache->saved_regs[DEPRECATED_FP_REGNUM].addr = 0;
+           cache->saved_regs[HPPA_FP_REGNUM].addr = 0;
          }
        
        /* Account for general and floating-point register saves.  */
        reg = inst_saves_gr (inst);
        if (reg >= 3 && reg <= 18
-           && (!u->Save_SP || reg != DEPRECATED_FP_REGNUM))
+           && (!u->Save_SP || reg != HPPA_FP_REGNUM))
          {
            saved_gr_mask &= ~(1 << reg);
            if ((inst >> 26) == 0x1b && extract_14 (inst) >= 0)
@@ -2368,7 +2338,7 @@ hppa_frame_cache (struct frame_info *next_frame, void **this_cache)
              }
            else
              {
-               cache->saved_regs[reg + FP0_REGNUM + 4].addr = fp_loc;
+               cache->saved_regs[reg + HPPA_FP0_REGNUM + 4].addr = fp_loc;
                fp_loc += 8;
              }
          }
@@ -2387,10 +2357,10 @@ hppa_frame_cache (struct frame_info *next_frame, void **this_cache)
     /* The frame base always represents the value of %sp at entry to
        the current function (and is thus equivalent to the "saved"
        stack pointer.  */
-    CORE_ADDR this_sp = frame_unwind_register_unsigned (next_frame, SP_REGNUM);
+    CORE_ADDR this_sp = frame_unwind_register_unsigned (next_frame, HPPA_SP_REGNUM);
     /* FIXME: cagney/2004-02-22: This assumes that the frame has been
        created.  If it hasn't everything will be out-of-wack.  */
-    if (u->Save_SP && trad_frame_addr_p (cache->saved_regs, SP_REGNUM))
+    if (u->Save_SP && trad_frame_addr_p (cache->saved_regs, HPPA_SP_REGNUM))
       /* Both we're expecting the SP to be saved and the SP has been
         saved.  The entry SP value is saved at this frame's SP
         address.  */
@@ -2399,7 +2369,7 @@ hppa_frame_cache (struct frame_info *next_frame, void **this_cache)
       /* The prologue has been slowly allocating stack space.  Adjust
         the SP back.  */
       cache->base = this_sp - frame_size;
-    trad_frame_set_value (cache->saved_regs, SP_REGNUM, cache->base);
+    trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base);
   }
 
   /* The PC is found in the "return register", "Millicode" uses "r31"
@@ -2509,7 +2479,7 @@ static struct frame_id
 hppa_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
 {
   return frame_id_build (frame_unwind_register_unsigned (next_frame,
-                                                        SP_REGNUM),
+                                                        HPPA_SP_REGNUM),
                         frame_pc_unwind (next_frame));
 }
 
@@ -3125,46 +3095,28 @@ hppa_instruction_nullified (void)
   return ((ipsw & 0x00200000) && !(flags & 0x2));
 }
 
-int
-hppa_register_raw_size (int reg_nr)
-{
-  /* All registers have the same size.  */
-  return DEPRECATED_REGISTER_SIZE;
-}
-
-/* Index within the register vector of the first byte of the space i
-   used for register REG_NR.  */
-
-int
-hppa_register_byte (int reg_nr)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
-
-  return reg_nr * tdep->bytes_per_address;
-}
-
 /* Return the GDB type object for the "standard" data type of data
    in register N.  */
 
-struct type *
-hppa32_register_virtual_type (int reg_nr)
+static struct type *
+hppa32_register_type (struct gdbarch *gdbarch, int reg_nr)
 {
    if (reg_nr < FP4_REGNUM)
-     return builtin_type_int;
+     return builtin_type_uint32;
    else
-     return builtin_type_float;
+     return builtin_type_ieee_single_big;
 }
 
 /* Return the GDB type object for the "standard" data type of data
    in register N.  hppa64 version.  */
 
-struct type *
-hppa64_register_virtual_type (int reg_nr)
+static struct type *
+hppa64_register_type (struct gdbarch *gdbarch, int reg_nr)
 {
    if (reg_nr < FP4_REGNUM)
-     return builtin_type_unsigned_long_long;
+     return builtin_type_uint64;
    else
-     return builtin_type_double;
+     return builtin_type_ieee_double_big;
 }
 
 /* Return True if REGNUM is not a register available to the user
@@ -3277,24 +3229,18 @@ hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       case 4:
         set_gdbarch_num_regs (gdbarch, hppa32_num_regs);
         set_gdbarch_register_name (gdbarch, hppa32_register_name);
-        set_gdbarch_deprecated_register_virtual_type
-          (gdbarch, hppa32_register_virtual_type);
+        set_gdbarch_register_type (gdbarch, hppa32_register_type);
         break;
       case 8:
         set_gdbarch_num_regs (gdbarch, hppa64_num_regs);
         set_gdbarch_register_name (gdbarch, hppa64_register_name);
-        set_gdbarch_deprecated_register_virtual_type
-          (gdbarch, hppa64_register_virtual_type);
+        set_gdbarch_register_type (gdbarch, hppa64_register_type);
         break;
       default:
         internal_error (__FILE__, __LINE__, "Unsupported address size: %d",
                         tdep->bytes_per_address);
     }
 
-  /* The following gdbarch vector elements depend on other parts of this
-     vector which have been set above, depending on the ABI.  */
-  set_gdbarch_deprecated_register_bytes
-    (gdbarch, gdbarch_num_regs (gdbarch) * tdep->bytes_per_address);
   set_gdbarch_long_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT);
   set_gdbarch_ptr_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT);
 
@@ -3312,22 +3258,14 @@ hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_in_solib_return_trampoline (gdbarch,
                                           hppa_in_solib_return_trampoline);
   set_gdbarch_inner_than (gdbarch, hppa_inner_than);
-  set_gdbarch_deprecated_register_size (gdbarch, tdep->bytes_per_address);
-  set_gdbarch_deprecated_fp_regnum (gdbarch, 3);
-  set_gdbarch_sp_regnum (gdbarch, 30);
-  set_gdbarch_fp0_regnum (gdbarch, 64);
-  set_gdbarch_deprecated_register_raw_size (gdbarch, hppa_register_raw_size);
-  set_gdbarch_deprecated_register_byte (gdbarch, hppa_register_byte);
-  set_gdbarch_deprecated_register_virtual_size (gdbarch, hppa_register_raw_size);
-  set_gdbarch_deprecated_max_register_raw_size (gdbarch, tdep->bytes_per_address);
-  set_gdbarch_deprecated_max_register_virtual_size (gdbarch, 8);
+  set_gdbarch_sp_regnum (gdbarch, HPPA_SP_REGNUM);
+  set_gdbarch_fp0_regnum (gdbarch, HPPA_FP0_REGNUM);
   set_gdbarch_cannot_store_register (gdbarch, hppa_cannot_store_register);
   set_gdbarch_addr_bits_remove (gdbarch, hppa_smash_text_address);
   set_gdbarch_smash_text_address (gdbarch, hppa_smash_text_address);
   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
   set_gdbarch_read_pc (gdbarch, hppa_target_read_pc);
   set_gdbarch_write_pc (gdbarch, hppa_target_write_pc);
-  set_gdbarch_deprecated_target_read_fp (gdbarch, hppa_target_read_fp);
 
   /* Helper for function argument information.  */
   set_gdbarch_fetch_pointer_argument (gdbarch, hppa_fetch_pointer_argument);