1. Feb 02, 2017
    • Pedro Alves's avatar
      Fix "-gdb-set logging redirect on" crash · 5be5dbf0
      Pedro Alves authored
      This commit fixes a "-gdb-set logging redirect on" crash by not
      handling "logging redirect on" on the fly.
      
      Previous discussion here:
       https://sourceware.org/ml/gdb-patches/2017-01/msg00467.html
      
      Code for handling "logging redirect on" on the fly was added here:
       https://sourceware.org/ml/gdb-patches/2010-08/msg00202.html
      
      Meanwhile, MI gained support for logging, but flipping redirect "on"
      on the fly was not considered.  The result is that this sequence of
      commands crashes GDB:
      
       -gdb-set logging on
       -gdb-set logging redirect on
      
       Program received signal SIGSEGV, Segmentation fault.
       0x00000000008dd7bc in gdb_flush (file=0x2a097f0) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/ui-file.c:95
       194       file->to_flush (file);
       (top-gdb) bt
       #0  0x00000000008dd7bc in gdb_flush(ui_file*) (file=0x2a097f0) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/ui-file.c:95
       #1  0x00000000007b5f34 in gdb_wait_for_event(int) (block=0) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/event-loop.c:752
       #2  0x00000000007b52b6 in gdb_do_one_event() () at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/event-loop.c:322
       #3  0x00000000007b5362 in start_event_loop() () at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/event-loop.c:371
       #4  0x000000000082704a in captured_command_loop(void*) (data=0x0) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/main.c:325
       #5  0x00000000007b8d7c in catch_errors(int (*)(void*), void*, char*, return_mask) (func=0x827008 <captured_command_loop(void*)>, func_args=0x0, errstring=0x11dee51 "", mask=RETURN_MASK_ALL) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/exceptions.c:236
       #6  0x000000000082839b in captured_main(void*) (data=0x7fffffffd820) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/main.c:1148
       During symbol reading, cannot get low and high bounds for subprogram DIE at 24065.
       #7  0x00000000008283c4 in gdb_main(captured_main_args*) (args=0x7fffffffd820) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/main.c:1158
       #8  0x0000000000412d4d in main(int, char**) (argc=4, argv=0x7fffffffd928) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/gdb.c:32
      
      The handling of redirect on the fly is not really a use case we need
      to handle, IMO.  Its inconsistent (other "set logging foo" commands
      aren't handled on the fly), and complicates the code significantly.
      Instead of complicating it further for MI, go back to the original
      idea of warning, only:
      
        https://sourceware.org/ml/gdb-patches/2010-08/msg00083.html
      
      New test included.
      
      gdb/ChangeLog:
      2017-02-02  Pedro Alves  <palves@redhat.com>
      
      	* cli/cli-logging.c (maybe_warn_already_logging): New factored out
      	from ...
      	(set_logging_overwrite): ... here.
      	(logging_no_redirect_file): Delete.
      	(set_logging_redirect): Don't handle redirection on the fly.
      	Instead warn that "logging off" / "logging on" is necessary.
      	(pop_output_files): Delete references to logging_no_redirect_file.
      	(show_logging_command): Always speak in terms of what will happen
      	once logging is reenabled.
      
      gdb/testsuite/ChangeLog:
      2017-02-02  Pedro Alves  <palves@redhat.com>
      
      	* gdb.mi/mi-logging.exp: Add "redirect while already logging"
      	tests.
      5be5dbf0
    • Pedro Alves's avatar
      Tweak pretty_print_disassembler's intro comment · c99cc448
      Pedro Alves authored
      gdb/ChangeLog:
      2017-02-02  Pedro Alves  <palves@redhat.com>
      
      	* disasm.h (gdb_pretty_print_disassembler): Tweak intro comment.
      c99cc448
    • Pedro Alves's avatar
      Reuse buffers across gdb_pretty_print_insn calls · 8b172ce7
      Pedro Alves authored
      gdb_pretty_print_insn allocates and destroys a couple local buffers
      each time it is called, which can be many times when disassembling a
      region of memory.  Avoid that overhead by adding a new class that
      holds the buffers and making gdb_pretty_print_insn a method of that
      class, so that the buffers can be reused across calls.
      
      gdb/ChangeLog:
      2017-02-02  Pedro Alves  <palves@redhat.com>
      
      	* disasm.c (gdb_pretty_print_insn): Rename to ...
      	(gdb_pretty_print_disassembler::pretty_print_insn): ... this.
      	Remove gdbarch parameter.  Adapt to clear the object's buffers
      	instead of allocating new buffers, and to print using the object's
      	gdb_disassembler instead of calling gdb_print_insn.
      	(dump_insns): Use gdb_pretty_print_disassembler.
      	* disasm.h (gdb_pretty_print_insn): Delete declaration.
      	(gdb_pretty_print_disassembler): New class.
      	* record-btrace.c (btrace_insn_history): Use
      	gdb_pretty_print_disassembler.
      8b172ce7
    • Pedro Alves's avatar
      Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy · d7e74731
      Pedro Alves authored
      This patch starts from the desire to eliminate
      make_cleanup_ui_file_delete, but then goes beyond.  It makes ui_file &
      friends a real C++ class hierarchy, and switches temporary
      ui_file-like objects to stack-based allocation.
      
      - mem_fileopen -> string_file
      
      mem_fileopen is replaced with a new string_file class that is treated
      as a value class created on the stack.  This alone eliminates most
      make_cleanup_ui_file_delete calls, and, simplifies code a whole lot
      (diffstat shows around 1k loc dropped.)
      
      string_file's internal buffer is a std::string, thus the "string" in
      the name.  This simplifies the implementation much, compared to
      mem_fileopen, which managed growing its internal buffer manually.
      
      - ui_file_as_string, ui_file_strdup, ui_file_obsavestring all gone
      
      The new string_file class has a string() method that provides direct
      writable access to the internal std::string buffer.  This replaced
      ui_file_as_string, which forced a copy of the same data the stream had
      inside.  With direct access via a writable reference, we can instead
      move the string out of the string_stream, avoiding deep string
      copying.
      
      Related, ui_file_xstrdup calls are replaced with xstrdup'ping the
      stream's string, and ui_file_obsavestring is replaced by
      obstack_copy0.
      
      With all those out of the way, getting rid of the weird ui_file_put
      mechanism was possible.
      
      - New ui_file::printf, ui_file::puts, etc. methods
      
      These simplify / clarify client code.  I considered splitting
      client-code changes, like these, e.g.:
      
        -  stb = mem_fileopen ();
        -  fprintf_unfiltered (stb, "%s%s%s",
        -		      _("The valid values are:\n"),
        -		      regdesc,
        -		      _("The default is \"std\"."));
        +  string_file stb;
        +  stb.printf ("%s%s%s",
        +	      _("The valid values are:\n"),
        +	      regdesc,
        +	      _("The default is \"std\"."));
      
      In two steps, with the first step leaving fprintf_unfiltered (etc.)
      calls in place, and only afterwards do a pass to change all those to
      call stb.printf etc..  I didn't do that split, because (when I tried),
      it turned out to be pointless make-work: the first pass would have to
      touch the fprintf_unfiltered line anyway, to replace "stb" with
      "&stb".
      
      - gdb_fopen replaced with stack-based objects
      
      This avoids the need for cleanups or unique_ptr's.  I.e., this:
      
            struct ui_file *file = gdb_fopen (filename, "w");
            if (filename == NULL)
       	perror_with_name (filename);
            cleanups = make_cleanup_ui_file_delete (file);
            // use file.
            do_cleanups (cleanups);
      
      is replaced with this:
      
            stdio_file file;
            if (!file.open (filename, "w"))
       	perror_with_name (filename);
            // use file.
      
      - odd contorsions in null_file_write / null_file_fputs around when to
        call to_fputs / to_write eliminated.
      
      - Global null_stream object
      
      A few places that were allocating a ui_file in order to print to
      "nowhere" are adjusted to instead refer to a new 'null_stream' global
      stream.
      
      - TUI's tui_sfileopen eliminated.  TUI's ui_file much simplified
      
      The TUI's ui_file was serving a dual purpose.  It supported being used
      as string buffer, and supported being backed by a stdio FILE.  The
      string buffer part is gone, replaced by using of string_file.  The
      'FILE *' support is now much simplified, by making the TUI's ui_file
      inherit from stdio_file.
      
      gdb/ChangeLog:
      2017-02-02  Pedro Alves  <palves@redhat.com>
      
      	* ada-lang.c (type_as_string): Use string_file.
      	* ada-valprint.c (ada_print_floating): Use string_file.
      	* ada-varobj.c (ada_varobj_scalar_image)
      	(ada_varobj_get_value_image): Use string_file.
      	* aix-thread.c (aix_thread_extra_thread_info): Use string_file.
      	* arm-tdep.c (_initialize_arm_tdep): Use string_printf.
      	* breakpoint.c (update_inserted_breakpoint_locations)
      	(insert_breakpoint_locations, reattach_breakpoints)
      	(print_breakpoint_location, print_one_detail_ranged_breakpoint)
      	(print_it_watchpoint): Use string_file.
      	(save_breakpoints): Use stdio_file.
      	* c-exp.y (oper): Use string_file.
      	* cli/cli-logging.c (set_logging_redirect): Use ui_file_up and
      	tee_file.
      	(pop_output_files): Use delete.
      	(handle_redirections): Use stdio_file and tee_file.
      	* cli/cli-setshow.c (do_show_command): Use string_file.
      	* compile/compile-c-support.c (c_compute_program): Use
      	string_file.
      	* compile/compile-c-symbols.c (generate_vla_size): Take a
      	'string_file &' instead of a 'ui_file *'.
      	(generate_c_for_for_one_variable): Take a 'string_file &' instead
      	of a 'ui_file *'.  Use string_file.
      	(generate_c_for_variable_locations): Take a 'string_file &'
      	instead of a 'ui_file *'.
      	* compile/compile-internal.h (generate_c_for_for_one_variable):
      	Take a 'string_file &' instead of a 'ui_file *'.
      	* compile/compile-loc2c.c (push, pushf, unary, binary)
      	(print_label, pushf_register_address, pushf_register)
      	(do_compile_dwarf_expr_to_c): Take a 'string_file &' instead of a
      	'ui_file *'.  Adjust.
      	* compile/compile.c (compile_to_object): Use string_file.
      	* compile/compile.h (compile_dwarf_expr_to_c)
      	(compile_dwarf_bounds_to_c): Take a 'string_file &' instead of a
      	'ui_file *'.
      	* cp-support.c (inspect_type): Use string_file and obstack_copy0.
      	(replace_typedefs_qualified_name): Use string_file and
      	obstack_copy0.
      	* disasm.c (gdb_pretty_print_insn): Use string_file.
      	(gdb_disassembly): Adjust reference the null_stream global.
      	(do_ui_file_delete): Delete.
      	(gdb_insn_length): Use null_stream.
      	* dummy-frame.c (maintenance_print_dummy_frames): Use stdio_file.
      	* dwarf2loc.c (dwarf2_compile_property_to_c)
      	(locexpr_generate_c_location, loclist_generate_c_location): Take a
      	'string_file &' instead of a 'ui_file *'.
      	* dwarf2loc.h (dwarf2_compile_property_to_c): Likewise.
      	* dwarf2read.c (do_ui_file_peek_last): Delete.
      	(dwarf2_compute_name): Use string_file.
      	* event-top.c (gdb_setup_readline): Use stdio_file.
      	* gdbarch.sh (verify_gdbarch): Use string_file.
      	* gdbtypes.c (safe_parse_type): Use null_stream.
      	* guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Use
      	string_file.
      	* guile/scm-disasm.c (gdbscm_print_insn_from_port): Take a
      	'string_file *' instead of a 'ui_file *'.
      	(gdbscm_arch_disassemble): Use string_file.
      	* guile/scm-frame.c (frscm_print_frame_smob): Use string_file.
      	* guile/scm-ports.c (class ioscm_file_port): Now a class that
      	inherits from ui_file.
      	(ioscm_file_port_delete, ioscm_file_port_rewind)
      	(ioscm_file_port_put): Delete.
      	(ioscm_file_port_write): Rename to ...
      	(ioscm_file_port::write): ... this.  Remove file_port_magic
      	checks.
      	(ioscm_file_port_new): Delete.
      	(ioscm_with_output_to_port_worker): Use ioscm_file_port and
      	ui_file_up.
      	* guile/scm-type.c (tyscm_type_name): Use string_file.
      	* guile/scm-value.c (vlscm_print_value_smob, gdbscm_value_print):
      	Use string_file.
      	* infcmd.c (print_return_value_1): Use string_file.
      	* infrun.c (print_target_wait_results): Use string_file.
      	* language.c (add_language): Use string_file.
      	* location.c (explicit_to_string_internal): Use string_file.
      	* main.c (captured_main_1): Use null_file.
      	* maint.c (maintenance_print_architecture): Use stdio_file.
      	* mi/mi-cmd-stack.c (list_arg_or_local): Use string_file.
      	* mi/mi-common.h (struct mi_interp) <out, err, log, targ,
      	event_channel>: Change type to mi_console_file pointer.
      	* mi/mi-console.c (mi_console_file_fputs, mi_console_file_flush)
      	(mi_console_file_delete): Delete.
      	(struct mi_console_file): Delete.
      	(mi_console_file_magic): Delete.
      	(mi_console_file_new): Delete.
      	(mi_console_file::mi_console_file): New.
      	(mi_console_file_delete): Delete.
      	(mi_console_file_fputs): Delete.
      	(mi_console_file::write): New.
      	(mi_console_raw_packet): Delete.
      	(mi_console_file::flush): New.
      	(mi_console_file_flush): Delete.
      	(mi_console_set_raw): Rename to ...
      	(mi_console_file::set_raw): ... this.
      	* mi/mi-console.h (class mi_console_file): New class.
      	(mi_console_file_new, mi_console_set_raw): Delete.
      	* mi/mi-interp.c (mi_interpreter_init): Use mi_console_file.
      	(mi_set_logging): Use delete and tee_file.  Adjust.
      	* mi/mi-main.c (output_register): Use string_file.
      	(mi_cmd_data_evaluate_expression): Use string_file.
      	(mi_cmd_data_read_memory): Use string_file.
      	(mi_cmd_execute, print_variable_or_computed): Use string_file.
      	* mi/mi-out.c (mi_ui_out::main_stream): New.
      	(mi_ui_out::rewind): Use main_stream and
      	string_file.
      	(mi_ui_out::put): Use main_stream and string_file.
      	(mi_ui_out::mi_ui_out): Remove 'stream' parameter.
      	Allocate a 'string_file' instead.
      	(mi_out_new): Don't allocate a mem_fileopen stream here.
      	* mi/mi-out.h (mi_ui_out::mi_ui_out): Remove 'stream' parameter.
      	(mi_ui_out::main_stream): Declare method.
      	* printcmd.c (eval_command): Use string_file.
      	* psymtab.c (maintenance_print_psymbols): Use stdio_file.
      	* python/py-arch.c (archpy_disassemble): Use string_file.
      	* python/py-breakpoint.c (bppy_get_commands): Use string_file.
      	* python/py-frame.c (frapy_str): Use string_file.
      	* python/py-framefilter.c (py_print_type, py_print_single_arg):
      	Use string_file.
      	* python/py-type.c (typy_str): Use string_file.
      	* python/py-unwind.c (unwind_infopy_str): Use string_file.
      	* python/py-value.c (valpy_str): Use string_file.
      	* record-btrace.c (btrace_insn_history): Use string_file.
      	* regcache.c (regcache_print): Use stdio_file.
      	* reggroups.c (maintenance_print_reggroups): Use stdio_file.
      	* remote.c (escape_buffer): Use string_file.
      	* rust-lang.c (rust_get_disr_info): Use string_file.
      	* serial.c (serial_open_ops_1): Use stdio_file.
      	(do_serial_close): Use delete.
      	* stack.c (print_frame_arg): Use string_file.
      	(print_frame_args): Remove local mem_fileopen stream, not used.
      	(print_frame): Use string_file.
      	* symmisc.c (maintenance_print_symbols): Use stdio_file.
      	* symtab.h (struct symbol_computed_ops) <generate_c_location>:
      	Take a 'string_file *' instead of a 'ui_file *'.
      	* top.c (new_ui): Use stdio_file and stderr_file.
      	(free_ui): Use delete.
      	(execute_command_to_string): Use string_file.
      	(quit_confirm): Use string_file.
      	* tracepoint.c (collection_list::append_exp): Use string_file.
      	* tui/tui-disasm.c (tui_disassemble): Use string_file.
      	* tui/tui-file.c: Don't include "ui-file.h".
      	(enum streamtype, struct tui_stream): Delete.
      	(tui_file_new, tui_file_delete, tui_fileopen, tui_sfileopen)
      	(tui_file_isatty, tui_file_rewind, tui_file_put): Delete.
      	(tui_file::tui_file): New method.
      	(tui_file_fputs): Delete.
      	(tui_file_get_strbuf): Delete.
      	(tui_file::puts): New method.
      	(tui_file_adjust_strbuf): Delete.
      	(tui_file_flush): Delete.
      	(tui_file::flush): New method.
      	* tui/tui-file.h: Tweak intro comment.
      	Include ui-file.h.
      	(tui_fileopen, tui_sfileopen, tui_file_get_strbuf)
      	(tui_file_adjust_strbuf): Delete declarations.
      	(class tui_file): New class.
      	* tui/tui-io.c (tui_initialize_io): Use tui_file.
      	* tui/tui-regs.c (tui_restore_gdbout): Use delete.
      	(tui_register_format): Use string_stream.
      	* tui/tui-stack.c (tui_make_status_line): Use string_file.
      	(tui_get_function_from_frame): Use string_file.
      	* typeprint.c (type_to_string): Use string_file.
      	* ui-file.c (struct ui_file, ui_file_magic, ui_file_new): Delete.
      	(null_stream): New global.
      	(ui_file_delete): Delete.
      	(ui_file::ui_file): New.
      	(null_file_isatty): Delete.
      	(ui_file::~ui_file): New.
      	(null_file_rewind): Delete.
      	(ui_file::printf): New.
      	(null_file_put): Delete.
      	(null_file_flush): Delete.
      	(ui_file::putstr): New.
      	(null_file_write): Delete.
      	(ui_file::putstrn): New.
      	(null_file_read): Delete.
      	(ui_file::putc): New.
      	(null_file_fputs): Delete.
      	(null_file_write_async_safe): Delete.
      	(ui_file::vprintf): New.
      	(null_file_delete): Delete.
      	(null_file::write): New.
      	(null_file_fseek): Delete.
      	(null_file::puts): New.
      	(ui_file_data): Delete.
      	(null_file::write_async_safe): New.
      	(gdb_flush, ui_file_isatty): Adjust.
      	(ui_file_put, ui_file_rewind): Delete.
      	(ui_file_write): Adjust.
      	(ui_file_write_for_put): Delete.
      	(ui_file_write_async_safe, ui_file_read): Adjust.
      	(ui_file_fseek): Delete.
      	(fputs_unfiltered): Adjust.
      	(set_ui_file_flush, set_ui_file_isatty, set_ui_file_rewind)
      	(set_ui_file_put, set_ui_file_write, set_ui_file_write_async_safe)
      	(set_ui_file_read, set_ui_file_fputs, set_ui_file_fseek)
      	(set_ui_file_data): Delete.
      	(string_file::~string_file, string_file::write)
      	(struct accumulated_ui_file, do_ui_file_xstrdup, ui_file_xstrdup)
      	(do_ui_file_as_string, ui_file_as_string): Delete.
      	(do_ui_file_obsavestring, ui_file_obsavestring): Delete.
      	(struct mem_file): Delete.
      	(mem_file_new): Delete.
      	(stdio_file::stdio_file): New.
      	(mem_file_delete): Delete.
      	(stdio_file::stdio_file): New.
      	(mem_fileopen): Delete.
      	(stdio_file::~stdio_file): New.
      	(mem_file_rewind): Delete.
      	(stdio_file::set_stream): New.
      	(mem_file_put): Delete.
      	(stdio_file::open): New.
      	(mem_file_write): Delete.
      	(stdio_file_magic, struct stdio_file): Delete.
      	(stdio_file_new, stdio_file_delete, stdio_file_flush): Delete.
      	(stdio_file::flush): New.
      	(stdio_file_read): Rename to ...
      	(stdio_file::read): ... this.  Adjust.
      	(stdio_file_write): Rename to ...
      	(stdio_file::write): ... this.  Adjust.
      	(stdio_file_write_async_safe): Rename to ...
      	(stdio_file::write_async_safe) ... this.  Adjust.
      	(stdio_file_fputs): Rename to ...
      	(stdio_file::puts) ... this.  Adjust.
      	(stdio_file_isatty): Delete.
      	(stdio_file_fseek): Delete.
      	(stdio_file::isatty): New.
      	(stderr_file_write): Rename to ...
      	(stderr_file::write) ... this.  Adjust.
      	(stderr_file_fputs): Rename to ...
      	(stderr_file::puts) ... this.  Adjust.
      	(stderr_fileopen, stdio_fileopen, gdb_fopen): Delete.
      	(stderr_file::stderr_file): New.
      	(tee_file_magic): Delete.
      	(struct tee_file): Delete.
      	(tee_file::tee_file): New.
      	(tee_file_new): Delete.
      	(tee_file::~tee_file): New.
      	(tee_file_delete): Delete.
      	(tee_file_flush): Rename to ...
      	(tee_file::flush): ... this.  Adjust.
      	(tee_file_write): Rename to ...
      	(tee_file::write): ... this.  Adjust.
      	(tee_file::write_async_safe): New.
      	(tee_file_fputs): Rename to ...
      	(tee_file::puts): ... this.  Adjust.
      	(tee_file_isatty): Rename to ...
      	(tee_file::isatty): ... this.  Adjust.
      	* ui-file.h (struct obstack, struct ui_file): Don't
      	forward-declare.
      	(ui_file_new, ui_file_flush_ftype, set_ui_file_flush)
      	(ui_file_write_ftype)
      	(set_ui_file_write, ui_file_fputs_ftype, set_ui_file_fputs)
      	(ui_file_write_async_safe_ftype, set_ui_file_write_async_safe)
      	(ui_file_read_ftype, set_ui_file_read, ui_file_isatty_ftype)
      	(set_ui_file_isatty, ui_file_rewind_ftype, set_ui_file_rewind)
      	(ui_file_put_method_ftype, ui_file_put_ftype, set_ui_file_put)
      	(ui_file_delete_ftype, set_ui_file_data, ui_file_fseek_ftype)
      	(set_ui_file_fseek): Delete.
      	(ui_file_data, ui_file_delete, ui_file_rewind)
      	(struct ui_file): New.
      	(ui_file_up): New.
      	(class null_file): New.
      	(null_stream): Declare.
      	(ui_file_write_for_put, ui_file_put): Delete.
      	(ui_file_xstrdup, ui_file_as_string, ui_file_obsavestring):
      	Delete.
      	(ui_file_fseek, mem_fileopen, stdio_fileopen, stderr_fileopen)
      	(gdb_fopen, tee_file_new): Delete.
      	(struct string_file): New.
      	(struct stdio_file): New.
      	(stdio_file_up): New.
      	(struct stderr_file): New.
      	(class tee_file): New.
      	* ui-out.c (ui_out::field_stream): Take a 'string_file &' instead
      	of a 'ui_file *'.  Adjust.
      	* ui-out.h (class ui_out) <field_stream>: Likewise.
      	* utils.c (do_ui_file_delete, make_cleanup_ui_file_delete)
      	(null_stream): Delete.
      	(error_stream): Take a 'string_file &' instead of a 'ui_file *'.
      	Adjust.
      	* utils.h (struct ui_file): Delete forward declaration..
      	(make_cleanup_ui_file_delete, null_stream): Delete declarations.
      	(error_stream): Take a 'string_file &' instead of a
      	'ui_file *'.
      	* varobj.c (varobj_value_get_print_value): Use string_file.
      	* xtensa-tdep.c (xtensa_verify_config): Use string_file.
      	* gdbarch.c: Regenerate.
      d7e74731
    • Pedro Alves's avatar
      Add back gdb_pretty_print_insn · 187808b0
      Pedro Alves authored
      ui_file_rewind is a ui_file method that only really works with mem
      buffer files, and is a nop on other ui_file types.  It'd be desirable
      to eliminate it from the base ui_file interface, and move it to the
      "mem_fileopen" subclass of ui_file instead.  A following patch does
      just that.
      
      Unfortunately, there are a couple references to ui_file_rewind inside
      gdb_disassembler::pretty_print_insn that were made harder to eliminate
      with the recent addition of the gdb_disassembler wrapper.
      
      Before the gdb_disassembler wrapper was added, in commit
      e47ad6c0 ("Refactor disassembly code"), gdb_pretty_print_insn
      used to be passed a ui_file pointer as argument, and it was simple to
      adjust that pointer be a "mem_fileopen" ui_file pointer instead, since
      there's only one gdb_pretty_print_insn caller.
      
      That commit made gdb_pretty_print_insn be a method of
      gdb_disassembler, and removed the method's ui_file parameter at the
      same time, replaced by referencing the gdb_disassembler's stream
      instead.  The trouble is that a gdb_disassembler can be instantiated
      with a pointer any kind of ui_file.  Casting the gdb_disassembler's
      stream to a mem_fileopen ui_file inside
      gdb_disassembler::pretty_print_insn in order to call the reset method
      would be gross hack.
      
      The fix here is to:
      
       - make gdb_disassembler::pretty_print_insn a be free function again
         instead of a method of gdb_disassembler.  I.e., bring back
         gdb_pretty_print_insn.
      
       - but, don't add back the ui_file * parameter.  Instead, move the
         mem_fileopen allocation inside.  That is a better interface, given
         that the ui_file is only ever used as temporary scratch buffer as
         an implementation detail of gdb_pretty_print_insn.  The function's
         real "where to send output" parameter is the ui_out pointer.  (A
         following patch will add back buffer reuse across invocations
         differently).
      
       - don't add back a disassemble_info pointer either.  That used to be
         necessary for this bit:
      
      	  err = m_di.read_memory_func (pc, &data, 1, &m_di);
      	  if (err != 0)
      	    m_di.memory_error_func (err, pc, &m_di);
      
         ... but AFAIK, it's not really necessary.  We can replace those
         three lines with a call to read_code.  This seems to fix a
         regression even, because before commit d8b49cf0 ("Don't throw
         exception in dis_asm_memory_error"), that memory_error_func call
         would throw an error/exception, but now it only records the error
         in the gdb_disassembler's m_err_memaddr field.  (read_code throws
         on error.)
      
      With all these, gdb_pretty_print_insn is completely layered on top of
      gdb_disassembler only using the latter's public API.
      
      gdb/ChangeLog:
      2017-02-02  Pedro Alves  <palves@redhat.com>
      
      	* disasm.c (gdb_disassembler::pretty_print_insn): Rename to...
      	(gdb_pretty_print_insn): ... this.  Now a free function.  Add back
      	a 'gdbarch' parameter.  Allocate a mem_fileopen stream here.
      	Adjust to call gdb_print_insn instead of
      	gdb_disassembler::print_insn.
      	(dump_insns, do_mixed_source_and_assembly_deprecated)
      	(do_mixed_source_and_assembly, do_assembly_only): Add back a
      	'gdbarch' parameter.  Remove gdb_disassembler parameter.
      	(gdb_disassembly): Don't allocate a gdb_disassembler here.
      	* disasm.h (gdb_disassembler::pretty_print_insn): Delete
      	declaration.
      	(gdb_pretty_print_insn): Re-add declaration.
      	* record-btrace.c (btrace_insn_history): Don't allocate a
      	gdb_disassembler here.  Adjust to call gdb_pretty_print_insn.
      187808b0
    • Jiong Wang's avatar
      [ld, testsuite] Restrict dl1*main and dl6*main tests on platforms which have libdl support · fd121c5c
      Jiong Wang authored
      ld/
      	* testsuite/lib/ld-lib.exp (check_libdl_available): New function.
      	* testsuite/ld-elf/shared.exp (run_tests): Split tests which require
      	dlopen support into "dlopen_run_tests".  These tests include dl1*main
      	and dl6*main.
      	(dlopen_run_tests): New and only run it when check_libdl_available
      	returns true.  XFAIL on *-*-netbsdelf*.
      fd121c5c
    • Simon Marchi's avatar
      Remove unused file_string parameter in gdb_disassembly · 7a8eb317
      Simon Marchi authored
      The file_string parameter was added in 8f0eea0e (sorry, no title back
      then) and has never actually been used.
      
      gdb/ChangeLog:
      
      	* disasm.h (gdb_disassembly): Remove file_string parameter.
      	* disasm.c (gdb_disassembly): Likewise.
      	* cli/cli-cmds.c (print_disassembly): Adapt.
      	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Likewise.
      	* stack.c (do_gdb_disassembly): Likewise.
      7a8eb317
    • GDB Administrator's avatar
      Automatic date update in version.in · 981d5de7
      GDB Administrator authored
      981d5de7
    • Maciej W. Rozycki's avatar
      MIPS/LD/testsuite: Correct relocation addends in VxWorks tests · c0c237fc
      Maciej W. Rozycki authored
      Fix commit 171191ba ("Add support for STT_IFUNC"),
      <https://sourceware.org/ml/binutils/2008-12/msg00052.html>, commit
      e04d7088 ("PR ld/14088: Always display addend as signed hex
      number"), <https://sourceware.org/ml/binutils/2012-05/msg00123.html> and
      commit 343dbc36 ("Print addend as signed in objdump"),
      <https://sourceware.org/ml/binutils/2012-05/msg00163.html> regressions:
      
      FAIL: VxWorks executable test 1 (dynamic)
      FAIL: ld-mips-elf/vxworks-forced-local-1
      
      seen with `mips-vxworks' and `mipsel-vxworks' targets and adjust dump
      patterns according to changes made to the presentation of relocation
      addends in `readelf -r' and `objdump -r' output.
      
      	ld/
      	* testsuite/ld-mips-elf/vxworks-forced-local-1.d: Correct the
      	presentation of relocation addends.
      	* testsuite/ld-mips-elf/vxworks1-lib.rd: Likewise.
      	* testsuite/ld-mips-elf/vxworks1.dd: Likewise.
      	* testsuite/ld-mips-elf/vxworks1.rd: Likewise.
      c0c237fc
    • Maciej W. Rozycki's avatar
      MIPS/LD/testsuite: Fix a `tls-multi-got-1-1.s' build failure · 5139cfdb
      Maciej W. Rozycki authored
      Correct a commit ec9ab52c ("gas: consistently emit diagnostics for
      non-zero data emission to .bss/.struct"),
      <https://sourceware.org/ml/binutils/2015-12/msg00073.html> regression:
      
      .../ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s: Assembler messages:
      .../ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s:39: Error: attempt to store non-zero value in section `.tbss'
      ERROR: -EB -march=mips1 -32 -KPIC .../ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s: assembly failed
      UNRESOLVED: Shared library with multiple GOTs and TLS
      
      in MIPS target testing and move `tlsvar_ld' to `.tdata' section, in line
      with the remaining local dynamic definitions introduced with the set of
      tests added with commit f4e584bd ("TLS support for MIPS"),
      <https://sourceware.org/ml/binutils/2005-02/msg00607.html>.
      
      	ld/
      	* testsuite/ld-mips-elf/tls-multi-got-1-1.s: Place `tlsvar_ld'
      	in `.tdata' section.
      	* testsuite/ld-mips-elf/tls-multi-got-1.got: Adjust accordingly.
      	* testsuite/ld-mips-elf/tls-multi-got-1.r: Likewise.
      5139cfdb
  2. Feb 01, 2017
    • Andreas Arnez's avatar
      Big-endian targets: Don't ignore offset into DW_OP_implicit_value · 7346ef59
      Andreas Arnez authored
      When a variable's location is expressed as DW_OP_implicit_value, but the
      given value is longer than needed, which bytes should be used?  GDB's
      current logic was introduced with a patch from 2011 and uses the "least
      significant" bytes:
      
        https://sourceware.org/ml/gdb-patches/2011-08/msg00123.html
      
      Now consider a sub-value from such a location at a given offset, accessed
      through DW_OP_implicit_pointer.  Which bytes should be used for that?  The
      patch above *always* uses the last bytes on big-endian targets, ignoring
      the offset.
      
      E.g., given the code snippet
      
        const char foo[] = "Hello, world!";
        const char *a = &foo[0];
        const char *b = &foo[7];
      
      assume that `foo' is described as DW_OP_implicit_value and `a' and `b'
      each as DW_OP_implicit_pointer into that value.  Then with current GDB
      `*a' and `*b' yield the same result -- the string's zero terminator.
      
      This patch basically reverts the portion of the patch above that deals
      with DW_OP_implicit_value.  This fixes the offset handling and also goes
      back to dropping the last instead of the first bytes on big-endian targets
      if the implicit value is longer than needed.  The latter aspect of the
      change probably doesn't matter for actual programs, but simplifies the
      logic.
      
      The patch also cleans up the original code a bit and adds appropriate test
      cases.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.dwarf2/dw2-op-stack-value.exp: Adjust expected result of
      	taking a 2-byte value out of a 4-byte DWARF implicit value on
      	big-endian targets.
      	* gdb.dwarf2/nonvar-access.exp: Add more comments to existing
      	logic.  Add test cases for DW_OP_implicit.
      
      gdb/ChangeLog:
      
      	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): For
      	DWARF_VALUE_LITERAL, no longer ignore the offset on big-endian
      	targets.  And if the implicit value is longer than needed, extract
      	the first bytes instead of the "least significant" ones.
      7346ef59
    • Markus Metzger's avatar
      testsuite: diagnose a running GDB in gdb_skip_xml_tests · 787f0025
      Markus Metzger authored
      If GDB is running when gdb_skip_xml_tests is called with
      --target_board=native-extended-gdbserer.exp, it fails with:
      
          (gdb) FAIL: ....exp: set tdesc filename .../trivial.xml (got interactive prompt)
          monitor exit
      
      Diagnose this in gdb_skip_xml_tests to generate a more meaningful error message:
      
          ERROR: tcl error sourcing ....exp.
          ERROR: GDB must not be running in gdb_skip_xml_tests.
              while executing
          [...]
      
      testsuite/
      	* lib/gdb.exp (gdb_skip_xml_tests): Error if GDB is running.
      787f0025
    • Markus Metzger's avatar
      btrace, testsuite: fix extended-remote fail · 68777c29
      Markus Metzger authored
      Parts of gdb.btrace/enable.exp are only valid for native debug.  The check for
      skip_gdbserver_tests is done while GDB is running, though, which causes it to
      fail with --target_board=native-extended-gdbserver.  Exit GDB before that check.
      
      testsuite/
      	* gdb.btrace/enable.exp: Call gdb_exit before skip_gdbserver_tests.
      68777c29
    • Markus Metzger's avatar
      btrace, testsuite: fix extended-remote non-stop test · 0a1c7e28
      Markus Metzger authored
      With --target_board=native-extended-gdbserver non-stop tests are failing with
      
          UNTESTED: gdb.btrace/non-stop.exp: failed to run to main
      
      Fix that by adding '-ex "set non-stop on"' to GDBFLAGS before restarting.
      
      testsuite/
      	* gdb.btrace/non-stop.exp: Add '-ex "set non-stop on"' to GDBFLAGS.
      0a1c7e28
    • Markus Metzger's avatar
      btrace: add unsupported/untested messages when skipping tests · b5ac99b0
      Markus Metzger authored
      We may silently skip gdb.btrace tests if
      
        - the target does not support record-btrace
        - the target does not support TSX
        - the target does not support gdbserver
        - we fail to compile the test
        - we fail to run to main
      
      Add unsupported/untested messages for each of those.
      
      testsuite/
      	* gdb.btrace/buffer-size.exp: Add unsupported/untested message if
      	the test is skipped.
      	* gdb.btrace/data.exp: Likewise.
      	* gdb.btrace/delta.exp: Likewise.
      	* gdb.btrace/dlopen.exp: Likewise.
      	* gdb.btrace/enable-running.exp: Likewise.
      	* gdb.btrace/enable.exp: Likewise.
      	* gdb.btrace/exception.exp: Likewise.
      	* gdb.btrace/function_call_history.exp: Likewise.
      	* gdb.btrace/gcore.exp: Likewise.
      	* gdb.btrace/instruction_history.exp: Likewise.
      	* gdb.btrace/multi-thread-step.exp: Likewise.
      	* gdb.btrace/nohist.exp: Likewise.
      	* gdb.btrace/non-stop.exp: Likewise.
      	* gdb.btrace/reconnect.exp: Likewise.
      	* gdb.btrace/record_goto-step.exp: Likewise.
      	* gdb.btrace/record_goto.exp: Likewise.
      	* gdb.btrace/rn-dl-bind.exp: Likewise.
      	* gdb.btrace/segv.exp: Likewise.
      	* gdb.btrace/step.exp: Likewise.
      	* gdb.btrace/stepi.exp: Likewise.
      	* gdb.btrace/tailcall-only.exp: Likewise.
      	* gdb.btrace/tailcall.exp: Likewise.
      	* gdb.btrace/tsx.exp: Likewise.
      	* gdb.btrace/unknown_functions.exp: Likewise.
      	* gdb.btrace/vdso.exp: Likewise.
      b5ac99b0
    • Markus Metzger's avatar
      btrace: allow recording to be started (and stopped) for running threads · cd4007e4
      Markus Metzger authored
      When recording is started for a running thread, GDB was able to start tracing
      but then failed to read registers to insert the initial entry for the current
      PC.  We don't really need that initial entry if we don't know where exactly we
      started recording.  Skip that step to allow recording to be started while
      threads are running.
      
      If we do run into errors, we need to undo the tracing enable to not leak this
      thread.  The operation did not complete so our caller won't clean up this
      thread.
      
      For the BTRACE_FORMAT_PT btrace format, we don't need that initial entry since
      it will be recorded in the trace.  We can omit the call to btrace_add_pc.
      
      gdb/
      	* btrace.c (btrace_enable): Do not call btrace_add_pc for
      	BTRACE_FORMAT_PT or if can_access_registers_ptid returns false.
      	(btrace_fetch): Assert can_access_registers_ptid.
      	* record-btrace.c (require_btrace_thread, record_btrace_info): Call
      	validate_registers_access.
      
      testsuite/
      	* gdb.btrace/enable-running.c: New.
      	* gdb.btrace/enable-running.exp: New.
      cd4007e4
    • Markus Metzger's avatar
      thread: add can_access_registers_ptid · cf77c34e
      Markus Metzger authored
      Add a function can_access_registers_ptid that behaves like
      validate_registers_access but returns a boolean value instead of throwing an
      exception.
      
      gdb/
      	* gdbthread.h (can_access_registers_ptid): New.
      	* thread.c (can_access_registers_ptid): New.
      cf77c34e
    • Jiong Wang's avatar
      [ld, testsuite] Append $board_cflags in one more place in ld-unique/unique.exp · ce790370
      Jiong Wang authored
      ld/
      	* testsuite/ld-unique/unique.exp (Could not link a dynamic executable):
      	Append $board_cflags to link commands.
      ce790370
    • Senthil Kumar Selvaraj's avatar
      Fix failing print-memory-usage-1 on Windows · 067869b6
      Senthil Kumar Selvaraj authored
      ld/
      
      2017-01-31  Senthil Kumar Selvaraj <senthilkumar.selvaraj@microchip.com>
      
      	* testsuite/ld-scripts/print-memory-usage-1.l: Relax
      	check for digit in second decimal place.
      067869b6
    • Cary Coutant's avatar
      Don't allow mov-to-lea optimization for __ehdr_start. · ed35cc4a
      Cary Coutant authored
      gold/
      	PR gold/21090
      	* x86_64.cc (Target_x86_64::can_convert_mov_to_lea): Add check
      	for predefined symbol.
      	(Target_x86_64::Relocate::relocate): Fix formatting.
      ed35cc4a
    • Maciej W. Rozycki's avatar
      PR ld/20828: LD/testsuite: Correct indentation · 15a00b13
      Maciej W. Rozycki authored
      	ld/
      	PR ld/20828
      	* testsuite/ld-elf/shared.exp: Correct PR ld/20828 test
      	indentation.
      15a00b13
    • Pedro Alves's avatar
      [ob/pushed] Use gdb_insn_length instead of creating dummy stream · be85ce7d
      Pedro Alves authored
      gdb/ChangeLog:
      2017-02-01  Pedro Alves  <palves@redhat.com>
      
      	* i386-tdep.c (i386_fast_tracepoint_valid_at): Use gdb_insn_length.
      be85ce7d
    • GDB Administrator's avatar
      Automatic date update in version.in · a8128fa6
      GDB Administrator authored
      a8128fa6
    • Pedro Alves's avatar
      gdb/mi/mi-interp.c: Fix typos · 29b0b251
      Pedro Alves authored
      gdb/ChangeLog:
      2017-01-31  Pedro Alves  <palves@redhat.com>
      
      	* mi/mi-interp.c (mi_breakpoint_created, mi_breakpoint_modified):
      	Fix typos.
      29b0b251
    • Pedro Alves's avatar
      gdb/stack.c: Remove unused mem_fileopen · 289b5b24
      Pedro Alves authored
      gdb/ChangeLog:
      2017-01-31  Pedro Alves  <palves@redhat.com>
      
      	* stack.c (print_frame_args): Remove local mem_fileopen stream,
      	not used.
      289b5b24
    • Pedro Alves's avatar
      gdb/varobj.c: Fix leak · b47413b4
      Pedro Alves authored
      Whoops, this function returns a std::string.
      
      gdb/ChangeLog:
      2017-01-31  Pedro Alves  <palves@redhat.com>
      
      	* varobj.c (varobj_value_get_print_value): Remove xstrdup call.
      b47413b4
    • Pedro Alves's avatar
      gdb: make_scoped_restore and types convertible to T · 60adb36c
      Pedro Alves authored
      A following patch will want to do
      
         string_file str_file;
      
         scoped_restore save_stdout
          = make_scoped_restore (&gdb_stdout, &str_file);
      
      where gdb_stdout is a ui_file *, and string_file is a type that
      inherits from ui_file, but that doesn't compile today:
      
        src/gdb/top.c: In function ‘std::__cxx11::string execute_command_to_string(char*, int)’:
        src/gdb/top.c:710:50: error: no matching function for call to ‘make_scoped_restore(ui_file**, string_file*)’
             = make_scoped_restore (&gdb_stdout, &str_file);
      						    ^
        [...]
        In file included from src/gdb/utils.h:25:0,
      		   from src/gdb/defs.h:732,
      		   from src/gdb/top.c:20:
        src/gdb/common/scoped_restore.h:94:24: note: candidate: template<class T> scoped_restore_tmpl<T> make_scoped_restore(T*, T)
         scoped_restore_tmpl<T> make_scoped_restore (T *var, T value)
      			  ^
        src/gdb/common/scoped_restore.h:94:24: note:   template argument deduction/substitution failed:
        src/gdb/top.c:710:50: note:   deduced conflicting types for parameter ‘T’ (‘ui_file*’ and ‘string_file*’)
             = make_scoped_restore (&gdb_stdout, &str_file);
      						    ^
      
      This commit makes code such as the above possible.
      
      gdb/ChangeLog:
      2017-01-31  Pedro Alves  <palves@redhat.com>
      
      	* common/scoped_restore.h
      	(scoped_restore_tmpl::scoped_restore_tmpl): Template on T2, and
      	change the value's parameter type to T2.
      	(make_scoped_restore): Likewise.
      60adb36c
  3. Jan 31, 2017
    • Nick Clifton's avatar
      Fix buffer overflows in ld when printing translated strings. · 1273da04
      Nick Clifton authored
      ld	* ldmain.c (add_archive_element): Eliminate string buffer.
      	* ldlang.c (lang_print_asneeded): Likewise.
      1273da04
    • GDB Administrator's avatar
      Automatic date update in version.in · 07fbc63d
      GDB Administrator authored
      07fbc63d
    • Maciej W. Rozycki's avatar
      MIPS: Add options to control branch ISA checks · 8b10b0b3
      Maciej W. Rozycki authored
      Complement commit 9d862524 ("MIPS: Verify the ISA mode and alignment
      of branch and jump targets") and add GAS and LD options to control the
      checks for invalid branches between ISA modes introduced there, to help
      with some handwritten code lacking `.insn' annotation for labels used as
      branch targets and code produced by older versions of GCC which suffers
      from the issue with branches to code that has been optimized away,
      addressed with GCC commit 242424 ("MIPS/GCC: Mark trailing labels with
      `.insn'"), <https://gcc.gnu.org/ml/gcc-patches/2016-11/msg01061.html>.
      
      	bfd/
      	* elfxx-mips.h (_bfd_mips_elf_insn32): Rename prototype to...
      	(_bfd_mips_elf_linker_flags): ... this.  Add another parameter.
      	* elfxx-mips.c (mips_elf_link_hash_table): Add
      	`ignore_branch_isa' member.
      	(mips_elf_perform_relocation): Do not treat an ISA mode mismatch
      	in branch relocation calculation as an error if
      	`ignore_branch_isa' has been set.
      	(_bfd_mips_elf_insn32): Rename to...
      	(_bfd_mips_elf_linker_flags): ... this.  Rename the `on'
      	parameter to `insn32' and add an `ignore_branch_isa' parameter.
      	Handle the new parameter.
      
      	gas/
      	* config/tc-mips.c (mips_ignore_branch_isa): New variable.
      	(options): Add OPTION_IGNORE_BRANCH_ISA and
      	OPTION_NO_IGNORE_BRANCH_ISA enum values.
      	(md_longopts): Add "mignore-branch-isa" and
      	"mno-ignore-branch-isa" options.
      	(md_parse_option): Handle OPTION_IGNORE_BRANCH_ISA and
      	OPTION_NO_IGNORE_BRANCH_ISA.
      	(fix_bad_cross_mode_branch_p): Return FALSE if
      	`mips_ignore_branch_isa' has been set.
      	(md_show_usage): Add `-mignore-branch-isa' and
      	`-mno-ignore-branch-isa'.
      
      	* doc/as.texinfo (Target MIPS options): Add
      	`-mignore-branch-isa' and `-mno-ignore-branch-isa' options.
      	(-mignore-branch-isa, -mno-ignore-branch-isa): New options.
      	* doc/c-mips.texi (MIPS Options): Add `-mignore-branch-isa' and
      	`-mno-ignore-branch-isa' options.
      
      	* testsuite/gas/mips/branch-local-ignore-2.d: New test.
      	* testsuite/gas/mips/branch-local-ignore-3.d: New test.
      	* testsuite/gas/mips/branch-local-ignore-n32-2.d: New test.
      	* testsuite/gas/mips/branch-local-ignore-n32-3.d: New test.
      	* testsuite/gas/mips/branch-local-ignore-n64-2.d: New test.
      	* testsuite/gas/mips/branch-local-ignore-n64-3.d: New test.
      	* testsuite/gas/mips/mips.exp: Run the new tests.
      
      	ld/
      	* emultempl/mipself.em (ignore_branch_isa): New variable.
      	(mips_create_output_section_statements): Rename
      	`_bfd_mips_elf_insn32' called to `_bfd_mips_elf_linker_flags',
      	add `ignore_branch_isa' argument.
      	(PARSE_AND_LIST_PROLOGUE): Add OPTION_IGNORE_BRANCH_ISA and
      	OPTION_NO_IGNORE_BRANCH_ISA enum values.
      	(PARSE_AND_LIST_LONGOPTS): Add "ignore-branch-isa" and
      	"no-ignore-branch-isa" options.
      	(PARSE_AND_LIST_OPTIONS): Add `--ignore-branch-isa' and
      	`--no-ignore-branch-isa'.
      	(PARSE_AND_LIST_ARGS_CASES): Handle OPTION_IGNORE_BRANCH_ISA and
      	OPTION_NO_IGNORE_BRANCH_ISA.
      
      	* ld.texinfo (Options specific to MIPS targets): Add
      	`--ignore-branch-isa' and `--no-ignore-branch-isa' options.
      	(ld and the MIPS family): Likewise.
      
      	* testsuite/ld-mips-elf/bal-jalx-pic-ignore.d: New test.
      	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-n32.d: New test.
      	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-n64.d: New test.
      	* testsuite/ld-mips-elf/unaligned-branch-ignore-2.d: New test.
      	* testsuite/ld-mips-elf/unaligned-branch-ignore-r6-1: New test.
      	* testsuite/ld-mips-elf/unaligned-branch-ignore-mips16: New
      	test.
      	* testsuite/ld-mips-elf/unaligned-branch-ignore-micromips: New
      	test.
      	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
      8b10b0b3
    • Maciej W. Rozycki's avatar
      MIPS/GAS/testsuite: Convert branch local list tests to dump tests · 7795a8f8
      Maciej W. Rozycki authored
      	gas/
      	* testsuite/gas/mips/branch-local-2.d: New test.
      	* testsuite/gas/mips/branch-local-3.d: New test.
      	* testsuite/gas/mips/branch-local-n32-2.d: New test.
      	* testsuite/gas/mips/branch-local-n32-3.d: New test.
      	* testsuite/gas/mips/branch-local-n64-2.d: New test.
      	* testsuite/gas/mips/branch-local-n64-3.d: New test.
      	* testsuite/gas/mips/mips.exp: Fold corresponding list tests
      	into the new tests.
      7795a8f8
  4. Jan 30, 2017
  5. Jan 29, 2017
  6. Jan 28, 2017
  7. Jan 27, 2017
    • Walfred Tedeschi's avatar
      amd64-linux: expose system register FS_BASE and GS_BASE for Linux. · 2735833d
      Walfred Tedeschi authored
      
      
      This patch allows examination of the registers FS_BASE and GS_BASE
      for Linux Systems running on 64bit. Tests for simple read and write
      of the new registers is also added with this patch.
      
      2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>
      	    Richard Henderson  <rth@redhat.com>
      
      gdb/ChangeLog:
      
      	* amd64-linux-nat.c (PTRACE_ARCH_PRCTL): New define.
      	(amd64_linux_fetch_inferior_registers): Add case to fetch FS_BASE
      	GS_BASE for older kernels.
      	(amd64_linux_store_inferior_registers): Add case to store FS_BASE
      	GS_BASE for older kernels.
      	* amd64-linux-tdep.c (amd64_linux_gregset_reg_offset): Add FS_BASE
      	and GS_BASE to the offset table.
      	(amd64_linux_register_reggroup_p): Add FS_BASE and GS_BASE to the
      	system register group.
      	* amd64-nat.c (amd64_native_gregset_reg_offset): Implements case
      	for older kernels.
      	* amd64-tdep.c (amd64_init_abi): Add segment registers for the
      	amd64 ABI.
      	* amd64-tdep.h (amd64_regnum): Add AMD64_FSBASE_REGNUM and
      	AMD64_GSBASE_REGNUM.
      	(AMD64_NUM_REGS): Set to AMD64_GSBASE_REGNUM + 1.
      	* features/Makefile (amd64-linux.dat, amd64-avx-linux.dat)
      	(amd64-mpx-linux.dat, amd64-avx512-linux.dat, x32-linux.dat)
      	(x32-avx-linux.dat, x32-avx512-linux.dat): Add
      	i386/64bit-segments.xml in those rules.
      	* features/i386/64bit-segments.xml: New file.
      	* features/i386/amd64-avx-mpx-linux.xml: Add 64bit-segments.xml.
      	* features/i386/amd64-avx-linux.xml: Add 64bit-segments.xml.
      	* features/i386/amd64-avx512-linux.xml: Add 64bit-segments.xml.
      	* features/i386/amd64-mpx-linux.xml: Add 64bit-segments.xml.
      	* features/i386/x32-avx512-linux.xml: Add 64bit-segments.xml.
      	* features/i386/x32-avx-linux.xml: Add 64bit-segments.xml.
      	* features/i386/amd64-linux.xml: Add 64bit-segments.xml.
      	* features/i386/amd64-avx-linux.c: Regenerated.
      	* features/i386/amd64-avx-mpx-linux.c: Regenerated.
      	* features/i386/amd64-avx-mpx.c: Regenerated.
      	* features/i386/amd64-avx512-linux.c: Regenerated.
      	* features/i386/amd64-linux.c: Regenerated.
      	* features/i386/amd64-mpx-linux.c: Regenerated.
      	* features/i386/i386-avx-mpx-linux.c: Regenerated.
      	* features/i386/i386-avx-mpx.c: Regenerated.
      	* features/i386/x32-avx-linux.c: Regenerated.
      	* features/i386/x32-avx512-linux.c: Regenerated.
      	* regformats/i386/amd64-avx-linux.dat: Regenerated.
      	* regformats/i386/amd64-avx-mpx-linux.dat: Regenerated.
      	* regformats/i386/amd64-avx512-linux.dat: Regenerated.
      	* regformats/i386/amd64-linux.dat: Regenerated.
      	* regformats/i386/amd64-mpx-linux.dat: Regenerated.
      	* regformats/i386/x32-avx-linux.dat: Regenerated.
      	* regformats/i386/x32-avx512-linux.dat: Regenerated.
      	* regformats/i386/x32-linux.dat: Regenerated.
      
      gdb/doc/ChangeLog:
      
      	* gdb.texinfo (i386 Features): Add system segment registers
      	as feature.
      
      gdb/gdbserver/ChangeLog:
      
      	* linux-x86-low.c (x86_64_regmap): Add fs_base and gs_base
      	to the register table.
      	(x86_fill_gregset): Add support for old kernels for the
      	fs_base and gs_base system registers.
      	(x86_store_gregset): Likewise.
      	* configure.srv (srv_i386_64bit_xmlfiles): Add 64bit-segments.xml.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.arch/amd64-gs_base.c: New file.
      	* gdb.arch/amd64-gs_base.exp: New file.
      
      Change-Id: I2e0eeb93058a2320d4d3b045082643cfe4aff963
      Signed-off-by: default avatarWalfred Tedeschi <walfred.tedeschi@intel.com>
      2735833d