* win32-low.c (create_process): New.
[deliverable/binutils-gdb.git] / gdb / printcmd.c
index 94d31e40781993898bd93762cae4752fc9317eb5..9fc716b88200bdb49f4181b623d5c7462be3c1b4 100644 (file)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -17,9 +17,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 #include "gdb_string.h"
@@ -70,6 +68,10 @@ static char last_size = 'w';
 
 static CORE_ADDR next_address;
 
+/* Number of delay instructions following current disassembled insn.  */
+
+static int branch_delay_insns;
+
 /* Last address examined.  */
 
 static CORE_ADDR last_examine_address;
@@ -212,14 +214,14 @@ decode_format (char **string_ptr, int oformat, int osize)
       case 'a':
       case 's':
        /* Pick the appropriate size for an address.  */
-       if (TARGET_PTR_BIT == 64)
+       if (gdbarch_ptr_bit (current_gdbarch) == 64)
          val.size = osize ? 'g' : osize;
-       else if (TARGET_PTR_BIT == 32)
+       else if (gdbarch_ptr_bit (current_gdbarch) == 32)
          val.size = osize ? 'w' : osize;
-       else if (TARGET_PTR_BIT == 16)
+       else if (gdbarch_ptr_bit (current_gdbarch) == 16)
          val.size = osize ? 'h' : osize;
        else
-         /* Bad value for TARGET_PTR_BIT.  */
+         /* Bad value for gdbarch_ptr_bit.  */
          internal_error (__FILE__, __LINE__,
                          _("failed internal consistency check"));
        break;
@@ -277,8 +279,9 @@ print_formatted (struct value *val, int format, int size,
 
       /* We often wrap here if there are long symbolic names.  */
       wrap_here ("    ");
-      next_address = VALUE_ADDRESS (val)
-       + gdb_print_insn (VALUE_ADDRESS (val), stream);
+      next_address = (VALUE_ADDRESS (val)
+                     + gdb_print_insn (VALUE_ADDRESS (val), stream,
+                                       &branch_delay_insns));
       break;
 
     default:
@@ -346,9 +349,9 @@ print_scalar_formatted (const void *valaddr, struct type *type,
 
   /* If the value is a pointer, and pointers and addresses are not the
      same, then at this point, the value's length (in target bytes) is
-     TARGET_ADDR_BIT/TARGET_CHAR_BIT, not TYPE_LENGTH (type).  */
+     gdbarch_addr_bit/TARGET_CHAR_BIT, not TYPE_LENGTH (type).  */
   if (TYPE_CODE (type) == TYPE_CODE_PTR)
-    len = TARGET_ADDR_BIT / TARGET_CHAR_BIT;
+    len = gdbarch_addr_bit (current_gdbarch) / TARGET_CHAR_BIT;
 
   /* If we are printing it as unsigned, truncate it in case it is actually
      a negative signed value (e.g. "print/u (short)-1" should print 65535
@@ -560,7 +563,6 @@ build_address_symbolic (CORE_ADDR addr,  /* IN */
 {
   struct minimal_symbol *msymbol;
   struct symbol *symbol;
-  struct symtab *symtab = 0;
   CORE_ADDR name_location = 0;
   asection *section = 0;
   char *name_temp = "";
@@ -608,7 +610,6 @@ build_address_symbolic (CORE_ADDR addr,  /* IN */
          /* The msymbol is closer to the address than the symbol;
             use the msymbol instead.  */
          symbol = 0;
-         symtab = 0;
          name_location = SYMBOL_VALUE_ADDRESS (msymbol);
          if (do_demangle || asm_demangle)
            name_temp = SYMBOL_PRINT_NAME (msymbol);
@@ -645,16 +646,6 @@ build_address_symbolic (CORE_ADDR addr,  /* IN */
          *filename = xstrdup (sal.symtab->filename);
          *line = sal.line;
        }
-      else if (symtab && symbol && symbol->line)
-       {
-         *filename = xstrdup (symtab->filename);
-         *line = symbol->line;
-       }
-      else if (symtab)
-       {
-         *filename = xstrdup (symtab->filename);
-         *line = -1;
-       }
     }
   return 0;
 }
@@ -669,7 +660,7 @@ deprecated_print_address_numeric (CORE_ADDR addr, int use_local,
     fputs_filtered (paddress (addr), stream);
   else
     {
-      int addr_bit = TARGET_ADDR_BIT;
+      int addr_bit = gdbarch_addr_bit (current_gdbarch);
 
       if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
        addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
@@ -800,6 +791,10 @@ do_examine (struct format_data fmt, CORE_ADDR addr)
            release_value (last_examine_value);
 
          print_formatted (last_examine_value, format, size, gdb_stdout);
+
+         /* Display any branch delay slots following the final insn.  */
+         if (format == 'i' && count == 1)
+           count += branch_delay_insns;
        }
       printf_filtered ("\n");
       gdb_flush (gdb_stdout);
@@ -1511,7 +1506,7 @@ do_one_display (struct display *d)
       print_expression (d->exp, gdb_stdout);
       annotate_display_expression_end ();
 
-      if (d->format.count != 1)
+      if (d->format.count != 1 || d->format.format == 'i')
        printf_filtered ("\n");
       else
        printf_filtered ("  ");
@@ -1519,7 +1514,7 @@ do_one_display (struct display *d)
       val = evaluate_expression (d->exp);
       addr = value_as_address (val);
       if (d->format.format == 'i')
-       addr = ADDR_BITS_REMOVE (addr);
+       addr = gdbarch_addr_bits_remove (current_gdbarch, addr);
 
       annotate_display_value ();
 
This page took 0.025368 seconds and 4 git commands to generate.