X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fprintcmd.c;h=a1451f8ab2f60ef80de4d7c9b53223a924ffdae1;hb=e04de5e3b55b9f481ff2b9939995301ba6b1c748;hp=ec0d6c1188f021e94489abcf995ba4e105f5ad5f;hpb=efd66ac6698323d9523a4dce352008c4c835812e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/printcmd.c b/gdb/printcmd.c index ec0d6c1188..a1451f8ab2 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -1,6 +1,6 @@ /* Print values for GNU debugger GDB. - Copyright (C) 1986-2014 Free Software Foundation, Inc. + Copyright (C) 1986-2015 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 #include "frame.h" #include "symtab.h" #include "gdbtypes.h" @@ -37,11 +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 "exceptions.h" #include "observer.h" #include "solist.h" #include "parser-defs.h" @@ -631,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; @@ -661,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) @@ -680,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 (MSYMBOL_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 = MSYMBOL_VALUE_ADDRESS (msymbol); + name_location = BMSYMBOL_VALUE_ADDRESS (msymbol); if (do_demangle || asm_demangle) - name_temp = MSYMBOL_PRINT_NAME (msymbol); + name_temp = MSYMBOL_PRINT_NAME (msymbol.minsym); else - name_temp = MSYMBOL_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. */ @@ -930,7 +927,7 @@ do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr) } static void -validate_format (struct format_data fmt, char *cmdname) +validate_format (struct format_data fmt, const char *cmdname) { if (fmt.size != 0) error (_("Size letters are meaningless in \"%s\" command."), cmdname); @@ -949,7 +946,6 @@ validate_format (struct format_data fmt, char *cmdname) static void print_command_1 (const char *exp, int voidprint) { - struct expression *expr; struct cleanup *old_chain = make_cleanup (null_cleanup, NULL); char format = 0; struct value *val; @@ -972,6 +968,8 @@ print_command_1 (const char *exp, int voidprint) if (exp && *exp) { + struct expression *expr; + expr = parse_expression (exp); make_cleanup (free_current_contents, &expr); val = evaluate_expression (expr); @@ -1126,7 +1124,7 @@ sym_info (char *arg, int from_tty) struct cleanup *old_chain; matches = 1; - offset = sect_addr - MSYMBOL_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 = MSYMBOL_PRINT_NAME (msymbol); @@ -1225,7 +1223,7 @@ address_info (char *exp, int from_tty) struct objfile *objfile = msymbol.objfile; gdbarch = get_objfile_arch (objfile); - load_addr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym); + load_addr = BMSYMBOL_VALUE_ADDRESS (msymbol); printf_filtered ("Symbol \""); fprintf_symbol_filtered (gdb_stdout, exp, @@ -1254,8 +1252,11 @@ address_info (char *exp, int from_tty) current_language->la_language, DMGL_ANSI); printf_filtered ("\" is "); val = SYMBOL_VALUE (sym); - section = SYMBOL_OBJ_SECTION (SYMBOL_OBJFILE (sym), sym); - gdbarch = get_objfile_arch (SYMBOL_SYMTAB (sym)->objfile); + if (SYMBOL_OBJFILE_OWNED (sym)) + section = SYMBOL_OBJ_SECTION (symbol_objfile (sym), sym); + else + section = NULL; + gdbarch = symbol_arch (sym); if (SYMBOL_COMPUTED_OPS (sym) != NULL) { @@ -1367,7 +1368,7 @@ address_info (char *exp, int from_tty) else { section = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym); - load_addr = MSYMBOL_VALUE_ADDRESS (msym.minsym); + load_addr = BMSYMBOL_VALUE_ADDRESS (msym); if (section && (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0) @@ -1496,7 +1497,7 @@ display_command (char *arg, int from_tty) { struct format_data fmt; struct expression *expr; - struct display *new; + struct display *newobj; int display_it = 1; const char *exp = arg; @@ -1535,20 +1536,20 @@ display_command (char *arg, int from_tty) innermost_block = NULL; expr = parse_expression (exp); - new = (struct display *) xmalloc (sizeof (struct display)); + newobj = (struct display *) xmalloc (sizeof (struct display)); - new->exp_string = xstrdup (exp); - new->exp = expr; - new->block = innermost_block; - new->pspace = current_program_space; - new->next = display_chain; - new->number = ++display_number; - new->format = fmt; - new->enabled_p = 1; - display_chain = new; + newobj->exp_string = xstrdup (exp); + newobj->exp = expr; + newobj->block = innermost_block; + newobj->pspace = current_program_space; + newobj->next = display_chain; + newobj->number = ++display_number; + newobj->format = fmt; + newobj->enabled_p = 1; + display_chain = newobj; - if (from_tty && target_has_execution) - do_one_display (new); + if (from_tty) + do_one_display (newobj); dont_repeat (); } @@ -1618,7 +1619,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) @@ -1692,15 +1693,14 @@ do_one_display (struct display *d) if (d->exp == NULL) { - volatile struct gdb_exception ex; - TRY_CATCH (ex, RETURN_MASK_ALL) + TRY { innermost_block = NULL; d->exp = parse_expression (d->exp_string); d->block = innermost_block; } - if (ex.reason < 0) + CATCH (ex, RETURN_MASK_ALL) { /* Can't re-parse the expression. Disable this display item. */ d->enabled_p = 0; @@ -1708,6 +1708,7 @@ do_one_display (struct display *d) d->exp_string, ex.message); return; } + END_CATCH } if (d->block) @@ -1731,7 +1732,6 @@ do_one_display (struct display *d) printf_filtered (": "); if (d->format.size) { - volatile struct gdb_exception ex; annotate_display_format (); @@ -1755,7 +1755,7 @@ do_one_display (struct display *d) annotate_display_value (); - TRY_CATCH (ex, RETURN_MASK_ERROR) + TRY { struct value *val; CORE_ADDR addr; @@ -1766,13 +1766,15 @@ do_one_display (struct display *d) addr = gdbarch_addr_bits_remove (d->exp->gdbarch, addr); do_examine (d->format, d->exp->gdbarch, addr); } - if (ex.reason < 0) - fprintf_filtered (gdb_stdout, _("\n"), ex.message); + CATCH (ex, RETURN_MASK_ERROR) + { + fprintf_filtered (gdb_stdout, _("\n"), ex.message); + } + END_CATCH } else { struct value_print_options opts; - volatile struct gdb_exception ex; annotate_display_format (); @@ -1791,15 +1793,19 @@ do_one_display (struct display *d) get_formatted_print_options (&opts, d->format.format); opts.raw = d->format.raw; - TRY_CATCH (ex, RETURN_MASK_ERROR) + TRY { struct value *val; val = evaluate_expression (d->exp); print_formatted (val, d->format.size, &opts, gdb_stdout); } - if (ex.reason < 0) - fprintf_filtered (gdb_stdout, _(""), ex.message); + CATCH (ex, RETURN_MASK_ERROR) + { + fprintf_filtered (gdb_stdout, _(""), ex.message); + } + END_CATCH + printf_filtered ("\n"); } @@ -1975,13 +1981,12 @@ print_variable_and_value (const char *name, struct symbol *var, struct frame_info *frame, struct ui_file *stream, int indent) { - volatile struct gdb_exception except; if (!name) name = SYMBOL_PRINT_NAME (var); fprintf_filtered (stream, "%s%s = ", n_spaces (2 * indent), name); - TRY_CATCH (except, RETURN_MASK_ERROR) + TRY { struct value *val; struct value_print_options opts; @@ -1995,9 +2000,13 @@ print_variable_and_value (const char *name, struct symbol *var, function. */ frame = NULL; } - if (except.reason < 0) - fprintf_filtered(stream, "", name, - except.message); + CATCH (except, RETURN_MASK_ERROR) + { + fprintf_filtered(stream, "", name, + except.message); + } + END_CATCH + fprintf_filtered (stream, "\n"); }