Change all_objfiles adapter to be a method on program_space
[deliverable/binutils-gdb.git] / gdb / printcmd.c
index 8c999188d71edc4d20674a34b5dfc56c02e167b5..e6fdbcf344e107773d1d43b802cf1ab7ab173c6a 100644 (file)
@@ -1,6 +1,6 @@
 /* Print values for GNU debugger GDB.
 
-   Copyright (C) 1986-2018 Free Software Foundation, Inc.
+   Copyright (C) 1986-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #include "arch-utils.h"
 #include "cli/cli-utils.h"
 #include "cli/cli-script.h"
+#include "cli/cli-style.h"
 #include "format.h"
 #include "source.h"
 #include "common/byte-vector.h"
+#include "cli/cli-style.h"
 
 /* Last specified output format.  */
 
@@ -534,7 +536,7 @@ print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
     fputs_filtered ("<*", stream);
   else
     fputs_filtered ("<", stream);
-  fputs_filtered (name.c_str (), stream);
+  fputs_styled (name.c_str (), function_name_style.style (), stream);
   if (offset != 0)
     fprintf_filtered (stream, "+%u", (unsigned int) offset);
 
@@ -542,10 +544,10 @@ print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
      line # of this addr, if we have it; else line # of the nearest symbol.  */
   if (print_symbol_filename && !filename.empty ())
     {
+      fputs_filtered (line == -1 ? " in " : " at ", stream);
+      fputs_styled (filename.c_str (), file_name_style.style (), stream);
       if (line != -1)
-       fprintf_filtered (stream, " at %s:%d", filename.c_str (), line);
-      else
-       fprintf_filtered (stream, " in %s", filename.c_str ());
+       fprintf_filtered (stream, ":%d", line);
     }
   if (unmapped)
     fputs_filtered ("*>", stream);
@@ -691,7 +693,7 @@ void
 print_address (struct gdbarch *gdbarch,
               CORE_ADDR addr, struct ui_file *stream)
 {
-  fputs_filtered (paddress (gdbarch, addr), stream);
+  fputs_styled (paddress (gdbarch, addr), address_style.style (), stream);
   print_address_symbolic (gdbarch, addr, stream, asm_demangle, " ");
 }
 
@@ -724,7 +726,7 @@ print_address_demangle (const struct value_print_options *opts,
 {
   if (opts->addressprint)
     {
-      fputs_filtered (paddress (gdbarch, addr), stream);
+      fputs_styled (paddress (gdbarch, addr), address_style.style (), stream);
       print_address_symbolic (gdbarch, addr, stream, do_demangle, " ");
     }
   else
@@ -1271,7 +1273,6 @@ static void
 info_symbol_command (const char *arg, int from_tty)
 {
   struct minimal_symbol *msymbol;
-  struct objfile *objfile;
   struct obj_section *osect;
   CORE_ADDR addr, sect_addr;
   int matches = 0;
@@ -1281,78 +1282,81 @@ info_symbol_command (const char *arg, int from_tty)
     error_no_arg (_("address"));
 
   addr = parse_and_eval_address (arg);
-  ALL_OBJSECTIONS (objfile, osect)
-  {
-    /* Only process each object file once, even if there's a separate
-       debug file.  */
-    if (objfile->separate_debug_objfile_backlink)
-      continue;
-
-    sect_addr = overlay_mapped_address (addr, osect);
-
-    if (obj_section_addr (osect) <= sect_addr
-       && sect_addr < obj_section_endaddr (osect)
-       && (msymbol
-           = lookup_minimal_symbol_by_pc_section (sect_addr, osect).minsym))
+  for (objfile *objfile : current_program_space->objfiles ())
+    ALL_OBJFILE_OSECTIONS (objfile, osect)
       {
-       const char *obj_name, *mapped, *sec_name, *msym_name;
-       const char *loc_string;
-
-       matches = 1;
-       offset = sect_addr - MSYMBOL_VALUE_ADDRESS (objfile, msymbol);
-       mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped");
-       sec_name = osect->the_bfd_section->name;
-       msym_name = MSYMBOL_PRINT_NAME (msymbol);
-
-       /* Don't print the offset if it is zero.
-          We assume there's no need to handle i18n of "sym + offset".  */
-       std::string string_holder;
-       if (offset)
+       /* Only process each object file once, even if there's a separate
+          debug file.  */
+       if (objfile->separate_debug_objfile_backlink)
+         continue;
+
+       sect_addr = overlay_mapped_address (addr, osect);
+
+       if (obj_section_addr (osect) <= sect_addr
+           && sect_addr < obj_section_endaddr (osect)
+           && (msymbol
+               = lookup_minimal_symbol_by_pc_section (sect_addr,
+                                                      osect).minsym))
          {
-           string_holder = string_printf ("%s + %u", msym_name, offset);
-           loc_string = string_holder.c_str ();
-         }
-       else
-         loc_string = msym_name;
-
-       gdb_assert (osect->objfile && objfile_name (osect->objfile));
-       obj_name = objfile_name (osect->objfile);
-
-       if (MULTI_OBJFILE_P ())
-         if (pc_in_unmapped_range (addr, osect))
-           if (section_is_overlay (osect))
-             printf_filtered (_("%s in load address range of "
-                                "%s overlay section %s of %s\n"),
-                              loc_string, mapped, sec_name, obj_name);
-           else
-             printf_filtered (_("%s in load address range of "
-                                "section %s of %s\n"),
-                              loc_string, sec_name, obj_name);
-         else
-           if (section_is_overlay (osect))
-             printf_filtered (_("%s in %s overlay section %s of %s\n"),
-                              loc_string, mapped, sec_name, obj_name);
-           else
-             printf_filtered (_("%s in section %s of %s\n"),
-                              loc_string, sec_name, obj_name);
-       else
-         if (pc_in_unmapped_range (addr, osect))
-           if (section_is_overlay (osect))
-             printf_filtered (_("%s in load address range of %s overlay "
-                                "section %s\n"),
-                              loc_string, mapped, sec_name);
+           const char *obj_name, *mapped, *sec_name, *msym_name;
+           const char *loc_string;
+
+           matches = 1;
+           offset = sect_addr - MSYMBOL_VALUE_ADDRESS (objfile, msymbol);
+           mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped");
+           sec_name = osect->the_bfd_section->name;
+           msym_name = MSYMBOL_PRINT_NAME (msymbol);
+
+           /* Don't print the offset if it is zero.
+              We assume there's no need to handle i18n of "sym + offset".  */
+           std::string string_holder;
+           if (offset)
+             {
+               string_holder = string_printf ("%s + %u", msym_name, offset);
+               loc_string = string_holder.c_str ();
+             }
            else
-             printf_filtered (_("%s in load address range of section %s\n"),
-                              loc_string, sec_name);
-         else
-           if (section_is_overlay (osect))
-             printf_filtered (_("%s in %s overlay section %s\n"),
-                              loc_string, mapped, sec_name);
+             loc_string = msym_name;
+
+           gdb_assert (osect->objfile && objfile_name (osect->objfile));
+           obj_name = objfile_name (osect->objfile);
+
+           if (MULTI_OBJFILE_P ())
+             if (pc_in_unmapped_range (addr, osect))
+               if (section_is_overlay (osect))
+                 printf_filtered (_("%s in load address range of "
+                                    "%s overlay section %s of %s\n"),
+                                  loc_string, mapped, sec_name, obj_name);
+               else
+                 printf_filtered (_("%s in load address range of "
+                                    "section %s of %s\n"),
+                                  loc_string, sec_name, obj_name);
+             else
+               if (section_is_overlay (osect))
+                 printf_filtered (_("%s in %s overlay section %s of %s\n"),
+                                  loc_string, mapped, sec_name, obj_name);
+               else
+                 printf_filtered (_("%s in section %s of %s\n"),
+                                  loc_string, sec_name, obj_name);
            else
-             printf_filtered (_("%s in section %s\n"),
-                              loc_string, sec_name);
+             if (pc_in_unmapped_range (addr, osect))
+               if (section_is_overlay (osect))
+                 printf_filtered (_("%s in load address range of %s overlay "
+                                    "section %s\n"),
+                                  loc_string, mapped, sec_name);
+               else
+                 printf_filtered
+                   (_("%s in load address range of section %s\n"),
+                    loc_string, sec_name);
+             else
+               if (section_is_overlay (osect))
+                 printf_filtered (_("%s in %s overlay section %s\n"),
+                                  loc_string, mapped, sec_name);
+               else
+                 printf_filtered (_("%s in section %s\n"),
+                                  loc_string, sec_name);
+         }
       }
-  }
   if (matches == 0)
     printf_filtered (_("No symbol matches %s.\n"), arg);
 }
@@ -1402,14 +1406,17 @@ info_address_command (const char *exp, int from_tty)
          fprintf_symbol_filtered (gdb_stdout, exp,
                                   current_language->la_language, DMGL_ANSI);
          printf_filtered ("\" is at ");
-         fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
+         fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
+                       gdb_stdout);
          printf_filtered (" in a file compiled without debugging");
          section = MSYMBOL_OBJ_SECTION (objfile, msymbol.minsym);
          if (section_is_overlay (section))
            {
              load_addr = overlay_unmapped_address (load_addr, section);
              printf_filtered (",\n -- loaded at ");
-             fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
+             fputs_styled (paddress (gdbarch, load_addr),
+                           address_style.style (),
+                           gdb_stdout);
              printf_filtered (" in overlay section %s",
                               section->the_bfd_section->name);
            }
@@ -1449,12 +1456,14 @@ info_address_command (const char *exp, int from_tty)
     case LOC_LABEL:
       printf_filtered ("a label at address ");
       load_addr = SYMBOL_VALUE_ADDRESS (sym);
-      fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
+      fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
+                   gdb_stdout);
       if (section_is_overlay (section))
        {
          load_addr = overlay_unmapped_address (load_addr, section);
          printf_filtered (",\n -- loaded at ");
-         fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
+         fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
+                       gdb_stdout);
          printf_filtered (" in overlay section %s",
                           section->the_bfd_section->name);
        }
@@ -1483,12 +1492,14 @@ info_address_command (const char *exp, int from_tty)
     case LOC_STATIC:
       printf_filtered (_("static storage at address "));
       load_addr = SYMBOL_VALUE_ADDRESS (sym);
-      fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
+      fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
+                   gdb_stdout);
       if (section_is_overlay (section))
        {
          load_addr = overlay_unmapped_address (load_addr, section);
          printf_filtered (_(",\n -- loaded at "));
-         fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
+         fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
+                       gdb_stdout);
          printf_filtered (_(" in overlay section %s"),
                           section->the_bfd_section->name);
        }
@@ -1520,12 +1531,14 @@ info_address_command (const char *exp, int from_tty)
     case LOC_BLOCK:
       printf_filtered (_("a function at address "));
       load_addr = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
-      fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
+      fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
+                   gdb_stdout);
       if (section_is_overlay (section))
        {
          load_addr = overlay_unmapped_address (load_addr, section);
          printf_filtered (_(",\n -- loaded at "));
-         fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
+         fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
+                       gdb_stdout);
          printf_filtered (_(" in overlay section %s"),
                           section->the_bfd_section->name);
        }
@@ -1555,12 +1568,15 @@ info_address_command (const char *exp, int from_tty)
              {
                load_addr = BMSYMBOL_VALUE_ADDRESS (msym);
                printf_filtered (_("static storage at address "));
-               fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
+               fputs_styled (paddress (gdbarch, load_addr),
+                             address_style.style (), gdb_stdout);
                if (section_is_overlay (section))
                  {
                    load_addr = overlay_unmapped_address (load_addr, section);
                    printf_filtered (_(",\n -- loaded at "));
-                   fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
+                   fputs_styled (paddress (gdbarch, load_addr),
+                                 address_style.style (),
+                                 gdb_stdout);
                    printf_filtered (_(" in overlay section %s"),
                                     section->the_bfd_section->name);
                  }
@@ -2156,7 +2172,10 @@ print_variable_and_value (const char *name, struct symbol *var,
   if (!name)
     name = SYMBOL_PRINT_NAME (var);
 
-  fprintf_filtered (stream, "%s%s = ", n_spaces (2 * indent), name);
+  fputs_filtered (n_spaces (2 * indent), stream);
+  fputs_styled (name, variable_name_style.style (), stream);
+  fputs_filtered (" = ", stream);
+
   TRY
     {
       struct value *val;
@@ -2609,6 +2628,8 @@ static void
 printf_command (const char *arg, int from_tty)
 {
   ui_printf (arg, gdb_stdout);
+  reset_terminal_style (gdb_stdout);
+  wrap_here ("");
   gdb_flush (gdb_stdout);
 }
 
This page took 0.028781 seconds and 4 git commands to generate.