X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gdb%2Fprintcmd.c;h=df44ff474a8c4ce1941ad80141c0c40336014246;hb=5aa03310cef09e8c41aaa05152d9570dfe62ba81;hp=1cc248d70f60091eb2f1be4f7a1297ff7cfaec32;hpb=6fbe845e0c00ca40e98aa23401e0b5490717a646;p=platform%2Fupstream%2Fbinutils.git diff --git a/gdb/printcmd.c b/gdb/printcmd.c index 1cc248d7..df44ff4 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -1,6 +1,6 @@ /* Print values for GNU debugger GDB. - Copyright (C) 1986-2013 Free Software Foundation, Inc. + Copyright (C) 1986-2014 Free Software Foundation, Inc. This file is part of GDB. @@ -18,7 +18,6 @@ along with this program. If not, see . */ #include "defs.h" -#include "gdb_string.h" #include "frame.h" #include "symtab.h" #include "gdbtypes.h" @@ -37,12 +36,9 @@ #include "objfiles.h" /* ditto */ #include "completer.h" /* for completion functions */ #include "ui-out.h" -#include "gdb_assert.h" #include "block.h" #include "disasm.h" #include "dfp.h" -#include "valprint.h" -#include "exceptions.h" #include "observer.h" #include "solist.h" #include "parser-defs.h" @@ -632,7 +628,7 @@ build_address_symbolic (struct gdbarch *gdbarch, int *line, /* OUT */ int *unmapped) /* OUT */ { - struct minimal_symbol *msymbol; + struct bound_minimal_symbol msymbol; struct symbol *symbol; CORE_ADDR name_location = 0; struct obj_section *section = NULL; @@ -662,7 +658,7 @@ build_address_symbolic (struct gdbarch *gdbarch, save some memory, but for many debug format--ELF/DWARF or anything/stabs--it would be inconvenient to eliminate those minimal symbols anyway). */ - msymbol = lookup_minimal_symbol_by_pc_section (addr, section).minsym; + msymbol = lookup_minimal_symbol_by_pc_section (addr, section); symbol = find_pc_sect_function (addr, section); if (symbol) @@ -681,40 +677,40 @@ build_address_symbolic (struct gdbarch *gdbarch, name_temp = SYMBOL_LINKAGE_NAME (symbol); } - if (msymbol != NULL - && MSYMBOL_HAS_SIZE (msymbol) - && MSYMBOL_SIZE (msymbol) == 0 - && MSYMBOL_TYPE (msymbol) != mst_text - && MSYMBOL_TYPE (msymbol) != mst_text_gnu_ifunc - && MSYMBOL_TYPE (msymbol) != mst_file_text) - msymbol = NULL; + if (msymbol.minsym != NULL + && MSYMBOL_HAS_SIZE (msymbol.minsym) + && MSYMBOL_SIZE (msymbol.minsym) == 0 + && MSYMBOL_TYPE (msymbol.minsym) != mst_text + && MSYMBOL_TYPE (msymbol.minsym) != mst_text_gnu_ifunc + && MSYMBOL_TYPE (msymbol.minsym) != mst_file_text) + msymbol.minsym = NULL; - if (msymbol != NULL) + if (msymbol.minsym != NULL) { - if (SYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL) + if (BMSYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL) { /* If this is a function (i.e. a code address), strip out any non-address bits. For instance, display a pointer to the first instruction of a Thumb function as ; the second instruction will be , even though the pointer is . This matches the ISA behavior. */ - if (MSYMBOL_TYPE (msymbol) == mst_text - || MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc - || MSYMBOL_TYPE (msymbol) == mst_file_text - || MSYMBOL_TYPE (msymbol) == mst_solib_trampoline) + if (MSYMBOL_TYPE (msymbol.minsym) == mst_text + || MSYMBOL_TYPE (msymbol.minsym) == mst_text_gnu_ifunc + || MSYMBOL_TYPE (msymbol.minsym) == mst_file_text + || MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline) addr = gdbarch_addr_bits_remove (gdbarch, addr); /* The msymbol is closer to the address than the symbol; use the msymbol instead. */ symbol = 0; - name_location = SYMBOL_VALUE_ADDRESS (msymbol); + name_location = BMSYMBOL_VALUE_ADDRESS (msymbol); if (do_demangle || asm_demangle) - name_temp = SYMBOL_PRINT_NAME (msymbol); + name_temp = MSYMBOL_PRINT_NAME (msymbol.minsym); else - name_temp = SYMBOL_LINKAGE_NAME (msymbol); + name_temp = MSYMBOL_LINKAGE_NAME (msymbol.minsym); } } - if (symbol == NULL && msymbol == NULL) + if (symbol == NULL && msymbol.minsym == NULL) return 1; /* If the nearest symbol is too far away, don't print anything symbolic. */ @@ -986,16 +982,11 @@ print_command_1 (const char *exp, int voidprint) struct value_print_options opts; int histindex = record_latest_value (val); - if (histindex >= 0) - annotate_value_history_begin (histindex, value_type (val)); - else - annotate_value_begin (value_type (val)); + annotate_value_history_begin (histindex, value_type (val)); - if (histindex >= 0) - printf_filtered ("$%d = ", histindex); + printf_filtered ("$%d = ", histindex); - if (histindex >= 0) - annotate_value_history_value (); + annotate_value_history_value (); get_formatted_print_options (&opts, format); opts.raw = fmt.raw; @@ -1003,10 +994,7 @@ print_command_1 (const char *exp, int voidprint) print_formatted (val, fmt.size, &opts, gdb_stdout); printf_filtered ("\n"); - if (histindex >= 0) - annotate_value_history_end (); - else - annotate_value_end (); + annotate_value_history_end (); } do_cleanups (old_chain); @@ -1135,10 +1123,10 @@ sym_info (char *arg, int from_tty) struct cleanup *old_chain; matches = 1; - offset = sect_addr - SYMBOL_VALUE_ADDRESS (msymbol); + offset = sect_addr - MSYMBOL_VALUE_ADDRESS (objfile, msymbol); mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped"); sec_name = osect->the_bfd_section->name; - msym_name = SYMBOL_PRINT_NAME (msymbol); + 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". */ @@ -1151,8 +1139,8 @@ sym_info (char *arg, int from_tty) a pagination request inside printf_filtered. */ old_chain = make_cleanup (xfree, loc_string); - gdb_assert (osect->objfile && osect->objfile->name); - obj_name = osect->objfile->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)) @@ -1201,7 +1189,7 @@ address_info (char *exp, int from_tty) struct gdbarch *gdbarch; int regno; struct symbol *sym; - struct minimal_symbol *msymbol; + struct bound_minimal_symbol msymbol; long val; struct obj_section *section; CORE_ADDR load_addr, context_pc = 0; @@ -1227,14 +1215,14 @@ address_info (char *exp, int from_tty) return; } - msymbol = lookup_minimal_symbol (exp, NULL, NULL); + msymbol = lookup_bound_minimal_symbol (exp); - if (msymbol != NULL) + if (msymbol.minsym != NULL) { - struct objfile *objfile = msymbol_objfile (msymbol); + struct objfile *objfile = msymbol.objfile; gdbarch = get_objfile_arch (objfile); - load_addr = SYMBOL_VALUE_ADDRESS (msymbol); + load_addr = BMSYMBOL_VALUE_ADDRESS (msymbol); printf_filtered ("Symbol \""); fprintf_symbol_filtered (gdb_stdout, exp, @@ -1242,7 +1230,7 @@ address_info (char *exp, int from_tty) printf_filtered ("\" is at "); fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout); printf_filtered (" in a file compiled without debugging"); - section = SYMBOL_OBJ_SECTION (objfile, msymbol); + section = MSYMBOL_OBJ_SECTION (objfile, msymbol.minsym); if (section_is_overlay (section)) { load_addr = overlay_unmapped_address (load_addr, section); @@ -1375,15 +1363,15 @@ address_info (char *exp, int from_tty) printf_filtered ("unresolved"); else { - section = SYMBOL_OBJ_SECTION (msym.objfile, msym.minsym); - load_addr = SYMBOL_VALUE_ADDRESS (msym.minsym); + section = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym); + load_addr = BMSYMBOL_VALUE_ADDRESS (msym); if (section && (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0) printf_filtered (_("a thread-local variable at offset %s " "in the thread-local storage for `%s'"), paddress (gdbarch, load_addr), - section->objfile->name); + objfile_name (section->objfile)); else { printf_filtered (_("static storage at address ")); @@ -1556,7 +1544,7 @@ display_command (char *arg, int from_tty) new->enabled_p = 1; display_chain = new; - if (from_tty && target_has_execution) + if (from_tty) do_one_display (new); dont_repeat (); @@ -1627,7 +1615,7 @@ map_display_numbers (char *args, while (!state.finished) { - char *p = state.string; + const char *p = state.string; num = get_number_or_range (&state); if (num == 0) @@ -1940,21 +1928,24 @@ disable_display_command (char *args, int from_tty) an item by re-parsing .exp_string field in the new execution context. */ static void -clear_dangling_display_expressions (struct so_list *solib) +clear_dangling_display_expressions (struct objfile *objfile) { - struct objfile *objfile = solib->objfile; struct display *d; + struct program_space *pspace; /* With no symbol file we cannot have a block or expression from it. */ if (objfile == NULL) return; + pspace = objfile->pspace; if (objfile->separate_debug_objfile_backlink) - objfile = objfile->separate_debug_objfile_backlink; - gdb_assert (objfile->pspace == solib->pspace); + { + objfile = objfile->separate_debug_objfile_backlink; + gdb_assert (objfile->pspace == pspace); + } for (d = display_chain; d != NULL; d = d->next) { - if (d->pspace != solib->pspace) + if (d->pspace != pspace) continue; if (lookup_objfile_from_block (d->block) == objfile @@ -2458,6 +2449,7 @@ static void printf_command (char *arg, int from_tty) { ui_printf (arg, gdb_stdout); + gdb_flush (gdb_stdout); } /* Implement the "eval" command. */ @@ -2486,7 +2478,7 @@ _initialize_printcmd (void) current_display_number = -1; - observer_attach_solib_unloaded (clear_dangling_display_expressions); + observer_attach_free_objfile (clear_dangling_display_expressions); add_info ("address", address_info, _("Describe where symbol SYM is stored."));