* dbxread.c (process_one_symbol): Handle stabs-in-som just like
authorJeff Law <law@redhat.com>
Mon, 27 Dec 1993 04:46:05 +0000 (04:46 +0000)
committerJeff Law <law@redhat.com>
Mon, 27 Dec 1993 04:46:05 +0000 (04:46 +0000)
        stabs-in-elf.
        (pastab_build_psymtabs): Likewise.

        * hppa-tdep.c: Change all comments to reference %r3 or frame pointer
        rather than %r4.
        (frame_chain, skip_prologue, dig_rp_from_stack): Handle %r3 as the
        frame pointer.

        * config/pa/tm-hppa.h (FP_REGNUM): Define as %r3.
        (FIND_FRAME_SAVED_REGS): Handle %r3 as frame pointer.
        (CALL_DUMMY): Likewise.

gdb/ChangeLog
gdb/dbxread.c
gdb/hppa-tdep.c

index b28c0065483073d8fb44dffa0b80b2a4806e1a11..a09d52454bbe3e8f5a65e2ef6a7bc1a77f87daa5 100644 (file)
@@ -1,3 +1,18 @@
+Sun Dec 26 20:44:02 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)
+
+       * dbxread.c (process_one_symbol): Handle stabs-in-som just like
+       stabs-in-elf.
+       (pastab_build_psymtabs): Likewise.
+
+       * hppa-tdep.c: Change all comments to reference %r3 or frame
+       pointer rather than %r4.
+       (frame_chain, skip_prologue, dig_rp_from_stack): Handle %r3 as the
+       frame pointer.
+
+       * config/pa/tm-hppa.h (FP_REGNUM): Define as %r3.
+       (FIND_FRAME_SAVED_REGS): Handle %r3 as frame pointer.
+       (CALL_DUMMY): Likewise.
+
 Sun Dec 26 16:59:39 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
 
        * exec.c (exec_file_command): If error occurs after we have opened
index 073e993ee8585f8b8808ea8c53c5c9a693c044c4..e6623b27c7ef89aaf323dd873641b1cb2ebdff0a 100644 (file)
@@ -1545,7 +1545,8 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
      since it would be silly to do things differently from Solaris), and
      false for SunOS4 and other a.out file formats.  */
   block_address_function_relative =
-    0 == strncmp (bfd_get_target (objfile->obfd), "elf", 3);
+    (0 == strncmp (bfd_get_target (objfile->obfd), "elf", 3))
+     || (0 == strncmp (bfd_get_target (objfile->obfd), "som", 3));
 
   if (!block_address_function_relative)
     /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
@@ -1634,33 +1635,38 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
       if (!VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
        local_symbols = new->locals;
 
-      /* If this is not the outermost LBRAC...RBRAC pair in the
-        function, its local symbols preceded it, and are the ones
-        just recovered from the context stack.  Defined the block for them.
-
-        If this is the outermost LBRAC...RBRAC pair, there is no
-        need to do anything; leave the symbols that preceded it
-        to be attached to the function's own block.  However, if
-        it is so, we need to indicate that we just moved outside
-        of the function.  */
-      if (local_symbols
-         && (context_stack_depth
-             > !VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation)))
+      if (context_stack_depth
+         > !VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
        {
-         /* FIXME Muzzle a compiler bug that makes end < start.  */
-         if (new->start_addr > valu)
+         /* This is not the outermost LBRAC...RBRAC pair in the function,
+            its local symbols preceded it, and are the ones just recovered
+            from the context stack.  Define the block for them (but don't
+            bother if the block contains no symbols.  Should we complain
+            on blocks without symbols?  I can't think of any useful purpose
+            for them).  */
+         if (local_symbols != NULL)
            {
-             complain (&lbrac_rbrac_complaint);
-             new->start_addr = valu;
+             /* Muzzle a compiler bug that makes end < start.  (which
+                compilers?  Is this ever harmful?).  */
+             if (new->start_addr > valu)
+               {
+                 complain (&lbrac_rbrac_complaint);
+                 new->start_addr = valu;
+               }
+             /* Make a block for the local symbols within.  */
+             finish_block (0, &local_symbols, new->old_blocks,
+                           new->start_addr, valu, objfile);
            }
-         /* Make a block for the local symbols within.  */
-         finish_block (0, &local_symbols, new->old_blocks,
-                       new->start_addr, valu, objfile);
        }
       else
        {
+         /* This is the outermost LBRAC...RBRAC pair.  There is no
+            need to do anything; leave the symbols that preceded it
+            to be attached to the function's own block.  We need to
+            indicate that we just moved outside of the function.  */
          within_function = 0;
        }
+
       if (VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
        /* Now pop locals of block just finished.  */
        local_symbols = new->locals;
@@ -2157,6 +2163,9 @@ pastab_build_psymtabs (objfile, section_offsets, mainline)
   free_header_files ();
   init_header_files ();
 
+  /* This is needed to debug objects assembled with gas2.  */
+  processing_acc_compilation = 1;
+
   /* In a PA file, we've already installed the minimal symbols that came
      from the PA (non-stab) symbol table, so always act like an
      incremental load here. */
index 93509b6323d587af681e8a4e238106b203635738..e8e01e1bd574e390ade5abdc0b0afdf1d9821993 100644 (file)
@@ -580,12 +580,12 @@ frame_chain (frame)
      several areas on the stack.
 
      Walk from the current frame to the innermost frame examining 
-     unwind descriptors to determine if %r4 ever gets saved into the
+     unwind descriptors to determine if %r3 ever gets saved into the
      stack.  If so return whatever value got saved into the stack.
-     If it was never saved in the stack, then the value in %r4 is still
+     If it was never saved in the stack, then the value in %r3 is still
      valid, so use it. 
 
-     We use information from unwind descriptors to determine if %r4
+     We use information from unwind descriptors to determine if %r3
      is saved into the stack (Entry_GR field has this information).  */
 
   while (frame)
@@ -603,8 +603,8 @@ frame_chain (frame)
        }
 
       /* Entry_GR specifies the number of callee-saved general registers
-        saved in the stack.  It starts at %r3, so %r4 would be 2.  */
-      if (u->Entry_GR >= 2 || u->Save_SP)
+        saved in the stack.  It starts at %r3, so %r3 would be 1.  */
+      if (u->Entry_GR >= 1 || u->Save_SP)
        break;
       else
        frame = frame->next;
@@ -616,15 +616,15 @@ frame_chain (frame)
         pointer.  */
       if (u->Save_SP)
        return read_memory_integer (frame->frame, 4);
-      /* %r4 was saved somewhere in the stack.  Dig it out.  */
+      /* %r3 was saved somewhere in the stack.  Dig it out.  */
       else 
        return dig_fp_from_stack (frame, u);
     }
   else
     {
-      /* The value in %r4 was never saved into the stack (thus %r4 still
+      /* The value in %r3 was never saved into the stack (thus %r3 still
         holds the value of the previous frame pointer).  */
-      return read_register (4);
+      return read_register (FP_REGNUM);
     }
 }
 
@@ -639,14 +639,14 @@ dig_fp_from_stack (frame, u)
 {
   CORE_ADDR pc = u->region_start;
 
-  /* Search the function for the save of %r4.  */
+  /* Search the function for the save of %r3.  */
   while (pc != u->region_end)
     {
       char buf[4];
       unsigned long inst;
       int status;
 
-      /* We need only look for the standard stw %r4,X(%sp) instruction,
+      /* We need only look for the standard stw %r3,X(%sp) instruction,
         the other variants (eg stwm) are only used on the first register
         save (eg %r3).  */
       status = target_read_memory (pc, buf, 4);
@@ -655,10 +655,10 @@ dig_fp_from_stack (frame, u)
       if (status != 0)
        memory_error (status, pc);
 
-      /* Check for stw %r4,X(%sp).  */
-      if ((inst & 0xffffc000) == 0x6bc40000)
+      /* Check for stw %r3,X(%sp).  */
+      if ((inst & 0xffffc000) == 0x6bc30000)
        {
-         /* Found the instruction which saves %r4.  The offset (relative
+         /* Found the instruction which saves %r3.  The offset (relative
             to this frame) is framesize + immed14 (derived from the 
             store instruction).  */
          int offset = (u->Total_frame_size << 3) + extract_14 (inst);
@@ -670,7 +670,7 @@ dig_fp_from_stack (frame, u)
       pc += 4;
     }
 
-  warning ("Unable to find %%r4 in stack.\n");
+  warning ("Unable to find %%r3 in stack.\n");
   return 0;
 }
 
@@ -1223,14 +1223,14 @@ skip_prologue(pc)
 
   if (inst == 0x6BC23FD9)      /* stw rp,-20(sp) */
     {
-      if (read_memory_integer (pc + 4, 4) == 0x8040241)        /* copy r4,r1 */
+      if (read_memory_integer (pc + 4, 4) == 0x8030241)        /* copy r3,r1 */
        pc += 16;
-      else if ((read_memory_integer (pc + 4, 4) & ~MASK_14) == 0x68810000) /* stw r1,(r4) */
+      else if ((read_memory_integer (pc + 4, 4) & ~MASK_14) == 0x68710000) /* stw r1,(r3) */
        pc += 8;
     }
-  else if (read_memory_integer (pc, 4) == 0x8040241) /* copy r4,r1 */
+  else if (read_memory_integer (pc, 4) == 0x8030241) /* copy r3,r1 */
     pc += 12;
-  else if ((read_memory_integer (pc, 4) & ~MASK_14) == 0x68810000) /* stw r1,(r4) */
+  else if ((read_memory_integer (pc, 4) & ~MASK_14) == 0x68710000) /* stw r1,(r3) */
     pc += 4;
 
   return pc;
This page took 0.033811 seconds and 4 git commands to generate.