2003-01-03 Andrew Cagney <cagney@redhat.com>
[deliverable/binutils-gdb.git] / gdb / sparc-tdep.c
index 21e40be44907ed702b1d5382404acc5af280e2d1..8f5097e22ac1b9685e71c33138a9e48639825847 100644 (file)
@@ -314,23 +314,23 @@ sparc_init_extra_frame_info (int fromleaf, struct frame_info *fi)
       /* Compute ->frame as if not flat.  If it is flat, we'll change
          it later.  */
       if (fi->next->next != NULL
-         && (fi->next->next->signal_handler_caller
+         && ((get_frame_type (fi->next->next) == SIGTRAMP_FRAME)
              || deprecated_frame_in_dummy (fi->next->next))
          && frameless_look_for_prologue (fi->next))
        {
          /* A frameless function interrupted by a signal did not change
             the frame pointer, fix up frame pointer accordingly.  */
-         fi->frame = FRAME_FP (fi->next);
+         deprecated_update_frame_base_hack (fi, get_frame_base (fi->next));
          fi->extra_info->bottom = fi->next->extra_info->bottom;
        }
       else
        {
          /* Should we adjust for stack bias here? */
          get_saved_register (buf, 0, 0, fi, FP_REGNUM, 0);
-         fi->frame = extract_address (buf, REGISTER_RAW_SIZE (FP_REGNUM));
+         deprecated_update_frame_base_hack (fi, extract_address (buf, REGISTER_RAW_SIZE (FP_REGNUM)));
 
          if (GDB_TARGET_IS_SPARC64 && (fi->frame & 1))
-           fi->frame += 2047;
+           deprecated_update_frame_base_hack (fi, fi->frame + 2047);
        }
     }
 
@@ -338,7 +338,7 @@ sparc_init_extra_frame_info (int fromleaf, struct frame_info *fi)
      frame.  For such functions, the frame pointer is actually in %i7.  */
   fi->extra_info->flat = 0;
   fi->extra_info->in_prologue = 0;
-  if (find_pc_partial_function (fi->pc, &name, &prologue_start, &prologue_end))
+  if (find_pc_partial_function (get_frame_pc (fi), &name, &prologue_start, &prologue_end))
     {
       /* See if the function starts with an add (which will be of a
          negative number if a flat frame) to the sp.  FIXME: Does not
@@ -368,10 +368,10 @@ sparc_init_extra_frame_info (int fromleaf, struct frame_info *fi)
 
              /* Overwrite the frame's address with the value in %i7.  */
              get_saved_register (buf, 0, 0, fi, I7_REGNUM, 0);
-             fi->frame = extract_address (buf, REGISTER_RAW_SIZE (I7_REGNUM));
+             deprecated_update_frame_base_hack (fi, extract_address (buf, REGISTER_RAW_SIZE (I7_REGNUM)));
 
              if (GDB_TARGET_IS_SPARC64 && (fi->frame & 1))
-               fi->frame += 2047;
+               deprecated_update_frame_base_hack (fi, fi->frame + 2047);
 
              /* Record where the fp got saved.  */
              fi->extra_info->fp_addr = 
@@ -399,21 +399,21 @@ sparc_init_extra_frame_info (int fromleaf, struct frame_info *fi)
 
          sal = find_pc_line (prologue_start, 0);
          if (sal.line == 0)    /* no line info, use PC */
-           prologue_end = fi->pc;
+           prologue_end = get_frame_pc (fi);
          else if (sal.end < prologue_end)
            prologue_end = sal.end;
-         if (fi->pc < prologue_end)
+         if (get_frame_pc (fi) < prologue_end)
            {
-             for (addr = prologue_start; addr < fi->pc; addr += 4)
+             for (addr = prologue_start; addr < get_frame_pc (fi); addr += 4)
                {
                  insn = read_memory_integer (addr, 4);
                  if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3c)
                    break;      /* SAVE seen, stop searching */
                }
-             if (addr >= fi->pc)
+             if (addr >= get_frame_pc (fi))
                {
                  fi->extra_info->in_prologue = 1;
-                 fi->frame = read_register (SP_REGNUM);
+                 deprecated_update_frame_base_hack (fi, read_register (SP_REGNUM));
                }
            }
        }
@@ -421,8 +421,8 @@ sparc_init_extra_frame_info (int fromleaf, struct frame_info *fi)
   if (fi->next && fi->frame == 0)
     {
       /* Kludge to cause init_prev_frame_info to destroy the new frame.  */
-      fi->frame = fi->next->frame;
-      fi->pc = fi->next->pc;
+      deprecated_update_frame_base_hack (fi, fi->next->frame);
+      deprecated_update_frame_pc_hack (fi, get_frame_pc (fi->next));
     }
 }
 
@@ -451,7 +451,7 @@ sparc_frame_saved_pc (struct frame_info *frame)
   CORE_ADDR addr;
 
   buf = alloca (MAX_REGISTER_RAW_SIZE);
-  if (frame->signal_handler_caller)
+  if ((get_frame_type (frame) == SIGTRAMP_FRAME))
     {
       /* This is the signal trampoline frame.
          Get the saved PC from the sigcontext structure.  */
@@ -469,7 +469,7 @@ sparc_frame_saved_pc (struct frame_info *frame)
 
       /* Solaris2 ucbsigvechandler passes a pointer to a sigcontext
          as the third parameter.  The offset to the saved pc is 12.  */
-      find_pc_partial_function (frame->pc, &name,
+      find_pc_partial_function (get_frame_pc (frame), &name,
                                (CORE_ADDR *) NULL, (CORE_ADDR *) NULL);
       if (name && STREQ (name, "ucbsigvechandler"))
        saved_pc_offset = 12;
@@ -487,7 +487,7 @@ sparc_frame_saved_pc (struct frame_info *frame)
     }
   else if (frame->extra_info->in_prologue ||
           (frame->next != NULL &&
-           (frame->next->signal_handler_caller ||
+           ((get_frame_type (frame->next) == SIGTRAMP_FRAME) ||
             deprecated_frame_in_dummy (frame->next)) &&
            frameless_look_for_prologue (frame)))
     {
@@ -535,7 +535,7 @@ setup_arbitrary_frame (int argc, CORE_ADDR *argv)
                    "create_new_frame returned invalid frame");
 
   frame->extra_info->bottom = argv[1];
-  frame->pc = FRAME_SAVED_PC (frame);
+  deprecated_update_frame_pc_hack (frame, FRAME_SAVED_PC (frame));
   return frame;
 }
 
@@ -816,10 +816,10 @@ sparc_get_saved_register (char *raw_buffer, int *optimized, CORE_ADDR *addrp,
       /* error ("No selected frame."); */
       if (!target_has_registers)
        error ("The program has no registers now.");
-      if (selected_frame == NULL)
+      if (deprecated_selected_frame == NULL)
        error ("No selected frame.");
       /* Try to use selected frame */
-      frame = get_prev_frame (selected_frame);
+      frame = get_prev_frame (deprecated_selected_frame);
       if (frame == 0)
        error ("Cmd not meaningful in the outermost frame.");
     }
@@ -835,7 +835,7 @@ sparc_get_saved_register (char *raw_buffer, int *optimized, CORE_ADDR *addrp,
       if (raw_buffer != NULL)
        {
          /* Put it back in target format.  */
-         store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), frame->pc);
+         store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), get_frame_pc (frame));
        }
       if (addrp != NULL)
        *addrp = 0;
@@ -846,9 +846,9 @@ sparc_get_saved_register (char *raw_buffer, int *optimized, CORE_ADDR *addrp,
     {
       /* FIXME MVS: wrong test for dummy frame at entry.  */
 
-      if (frame1->pc >= (frame1->extra_info->bottom ? 
+      if (get_frame_pc (frame1) >= (frame1->extra_info->bottom ? 
                         frame1->extra_info->bottom : read_sp ())
-         && frame1->pc <= FRAME_FP (frame1))
+         && get_frame_pc (frame1) <= get_frame_base (frame1))
        {
          /* Dummy frame.  All but the window regs are in there somewhere.
             The window registers are saved on the stack, just like in a
@@ -904,7 +904,7 @@ sparc_get_saved_register (char *raw_buffer, int *optimized, CORE_ADDR *addrp,
              regs = alloca (NUM_REGS * sizeof (CORE_ADDR)); 
              memset (regs, 0, NUM_REGS * sizeof (CORE_ADDR));
 
-             find_pc_partial_function (frame1->pc, NULL, &func_start, NULL);
+             find_pc_partial_function (get_frame_pc (frame1), NULL, &func_start, NULL);
              examine_prologue (func_start, 0, frame1, regs);
              addr = regs[regnum];
            }
@@ -1112,7 +1112,7 @@ static void
 sparc_frame_find_saved_regs (struct frame_info *fi, CORE_ADDR *saved_regs_addr)
 {
   register int regnum;
-  CORE_ADDR frame_addr = FRAME_FP (fi);
+  CORE_ADDR frame_addr = get_frame_base (fi);
 
   if (!fi)
     internal_error (__FILE__, __LINE__,
@@ -1120,9 +1120,9 @@ sparc_frame_find_saved_regs (struct frame_info *fi, CORE_ADDR *saved_regs_addr)
 
   memset (saved_regs_addr, 0, NUM_REGS * sizeof (CORE_ADDR));
 
-  if (fi->pc >= (fi->extra_info->bottom ? 
+  if (get_frame_pc (fi) >= (fi->extra_info->bottom ? 
                 fi->extra_info->bottom : read_sp ())
-      && fi->pc <= FRAME_FP (fi))
+      && get_frame_pc (fi) <= get_frame_base (fi))
     {
       /* Dummy frame.  All but the window regs are in there somewhere. */
       for (regnum = G1_REGNUM; regnum < G1_REGNUM + 7; regnum++)
@@ -1163,7 +1163,7 @@ sparc_frame_find_saved_regs (struct frame_info *fi, CORE_ADDR *saved_regs_addr)
   else if (fi->extra_info->flat)
     {
       CORE_ADDR func_start;
-      find_pc_partial_function (fi->pc, NULL, &func_start, NULL);
+      find_pc_partial_function (get_frame_pc (fi), NULL, &func_start, NULL);
       examine_prologue (func_start, 0, fi, saved_regs_addr);
 
       /* Flat register window frame.  */
@@ -1205,16 +1205,17 @@ sparc_frame_find_saved_regs (struct frame_info *fi, CORE_ADDR *saved_regs_addr)
     }
   /* Otherwise, whatever we would get from ptrace(GETREGS) is accurate */
   /* FIXME -- should this adjust for the sparc64 offset? */
-  saved_regs_addr[SP_REGNUM] = FRAME_FP (fi);
+  saved_regs_addr[SP_REGNUM] = get_frame_base (fi);
 }
 
 /* Discard from the stack the innermost frame, restoring all saved registers.
 
-   Note that the values stored in fsr by get_frame_saved_regs are *in
-   the context of the called frame*.  What this means is that the i
-   regs of fsr must be restored into the o regs of the (calling) frame that
-   we pop into.  We don't care about the output regs of the calling frame,
-   since unless it's a dummy frame, it won't have any output regs in it.
+   Note that the values stored in fsr by
+   deprecated_get_frame_saved_regs are *in the context of the called
+   frame*.  What this means is that the i regs of fsr must be restored
+   into the o regs of the (calling) frame that we pop into.  We don't
+   care about the output regs of the calling frame, since unless it's
+   a dummy frame, it won't have any output regs in it.
 
    We never have to bother with %l (local) regs, since the called routine's
    locals get tossed, and the calling routine's locals are already saved
@@ -1729,7 +1730,7 @@ fill_fpregset (gdb_fpregset_t *fpregsetp, int regno)
     {
       if ((regno == -1) || (regno == regi))
        {
-         from = (char *) &registers[REGISTER_BYTE (regi)];
+         from = (char *) &deprecated_registers[REGISTER_BYTE (regi)];
          to = (char *) &fpregsetp->pr_fr.pr_regs[regi - FP0_REGNUM];
          memcpy (to, from, REGISTER_RAW_SIZE (regi));
        }
@@ -1738,7 +1739,7 @@ fill_fpregset (gdb_fpregset_t *fpregsetp, int regno)
   if (!(GDB_TARGET_IS_SPARC64)) /* FIXME: does Sparc64 have this register? */
     if ((regno == -1) || (regno == FPS_REGNUM))
       {
-       from = (char *)&registers[REGISTER_BYTE (FPS_REGNUM)];
+       from = (char *)&deprecated_registers[REGISTER_BYTE (FPS_REGNUM)];
        to = (char *) &fpregsetp->pr_fsr;
        memcpy (to, from, REGISTER_RAW_SIZE (FPS_REGNUM));
       }
@@ -1871,8 +1872,8 @@ sparc_print_register_hook (int regno)
     {
       char value[16];
 
-      if (frame_register_read (selected_frame, regno, value)
-         && frame_register_read (selected_frame, regno + 1, value + 4))
+      if (frame_register_read (deprecated_selected_frame, regno, value)
+         && frame_register_read (deprecated_selected_frame, regno + 1, value + 4))
        {
          printf_unfiltered ("\t");
          print_floating (value, builtin_type_double, gdb_stdout);
@@ -1880,8 +1881,8 @@ sparc_print_register_hook (int regno)
 #if 0                          /* FIXME: gdb doesn't handle long doubles */
       if ((regno & 3) == 0)
        {
-         if (frame_register_read (selected_frame, regno + 2, value + 8)
-             && frame_register_read (selected_frame, regno + 3, value + 12))
+         if (frame_register_read (deprecated_selected_frame, regno + 2, value + 8)
+             && frame_register_read (deprecated_selected_frame, regno + 3, value + 12))
            {
              printf_unfiltered ("\t");
              print_floating (value, builtin_type_long_double, gdb_stdout);
@@ -1900,8 +1901,8 @@ sparc_print_register_hook (int regno)
     {
       char value[16];
 
-      if (frame_register_read (selected_frame, regno, value)
-         && frame_register_read (selected_frame, regno + 1, value + 8))
+      if (frame_register_read (deprecated_selected_frame, regno, value)
+         && frame_register_read (deprecated_selected_frame, regno + 1, value + 8))
        {
          printf_unfiltered ("\t");
          print_floating (value, builtin_type_long_double, gdb_stdout);
@@ -2150,7 +2151,7 @@ sparc_print_registers_info (struct gdbarch *gdbarch,
 void
 sparc_do_registers_info (int regnum, int all)
 {
-  sparc_print_registers_info (current_gdbarch, gdb_stdout, selected_frame,
+  sparc_print_registers_info (current_gdbarch, gdb_stdout, deprecated_selected_frame,
                              regnum, all);
 }
 
@@ -2166,8 +2167,8 @@ sparclet_print_registers_info (struct gdbarch *gdbarch,
 void
 sparclet_do_registers_info (int regnum, int all)
 {
-  sparclet_print_registers_info (current_gdbarch, gdb_stdout, selected_frame,
-                                regnum, all);
+  sparclet_print_registers_info (current_gdbarch, gdb_stdout,
+                                deprecated_selected_frame, regnum, all);
 }
 
 \f
@@ -3149,10 +3150,8 @@ sparc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
   set_gdbarch_fp_regnum (gdbarch, SPARC_FP_REGNUM);
   set_gdbarch_fp0_regnum (gdbarch, SPARC_FP0_REGNUM);
-  set_gdbarch_frame_args_address (gdbarch, default_frame_address);
   set_gdbarch_frame_chain (gdbarch, sparc_frame_chain);
   set_gdbarch_frame_init_saved_regs (gdbarch, sparc_frame_init_saved_regs);
-  set_gdbarch_frame_locals_address (gdbarch, default_frame_address);
   set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
   set_gdbarch_frame_saved_pc (gdbarch, sparc_frame_saved_pc);
   set_gdbarch_frameless_function_invocation (gdbarch, 
@@ -3181,7 +3180,7 @@ sparc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
   set_gdbarch_skip_prologue (gdbarch, sparc_skip_prologue);
   set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM);
-  set_gdbarch_use_generic_dummy_frames (gdbarch, 0);
+  set_gdbarch_deprecated_use_generic_dummy_frames (gdbarch, 0);
   set_gdbarch_write_pc (gdbarch, generic_target_write_pc);
 
   /*
@@ -3199,7 +3198,7 @@ sparc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       /* 32-bit machine types: */
 
 #ifdef SPARC32_CALL_DUMMY_ON_STACK
-      set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_on_stack);
+      set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_on_stack);
       set_gdbarch_call_dummy_address (gdbarch, sparc_call_dummy_address);
       set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0x30);
       set_gdbarch_call_dummy_length (gdbarch, 0x38);
@@ -3250,11 +3249,10 @@ sparc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
       set_gdbarch_call_dummy_words (gdbarch, call_dummy_32);
 #else
-      set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_at_entry_point);
+      set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_at_entry_point);
       set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
       set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
       set_gdbarch_call_dummy_length (gdbarch, 0);
-      set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
       set_gdbarch_call_dummy_words (gdbarch, call_dummy_nil);
 #endif
       set_gdbarch_call_dummy_stack_adjust (gdbarch, 68);
@@ -3298,7 +3296,7 @@ sparc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
     default:   /* Any new machine type is likely to be 64-bit.  */
 
 #ifdef SPARC64_CALL_DUMMY_ON_STACK
-      set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_on_stack);
+      set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_on_stack);
       set_gdbarch_call_dummy_address (gdbarch, sparc_call_dummy_address);
       set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 8 * 4);
       set_gdbarch_call_dummy_length (gdbarch, 192);
@@ -3306,11 +3304,10 @@ sparc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       set_gdbarch_call_dummy_start_offset (gdbarch, 148);
       set_gdbarch_call_dummy_words (gdbarch, call_dummy_64);
 #else
-      set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_at_entry_point);
+      set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_at_entry_point);
       set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
       set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
       set_gdbarch_call_dummy_length (gdbarch, 0);
-      set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
       set_gdbarch_call_dummy_start_offset (gdbarch, 0);
       set_gdbarch_call_dummy_words (gdbarch, call_dummy_nil);
 #endif
This page took 0.029555 seconds and 4 git commands to generate.