aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2018-03-22Get rid of VEC(static_tracepoint_marker_p)Simon Marchi14-195/+183
This patch replaces VEC(static_tracepoint_marker_p) with std::vector, and does some c++ification around that. I thought a new overload of hex2str was useful, so I added it as well as corresponding unit tests. I also added an overload of ui_out::field_string that takes an std::string directly. gdb/ChangeLog: * tracepoint.h (struct static_tracepoint_marker): Initialize fields, define default constructor, move constructor and move assignment, disable the rest. <str_id, extra>: Make std::string. (release_static_tracepoint_marker): Remove. (free_current_marker): Remove. * tracepoint.c (free_current_marker): Remove. (parse_static_tracepoint_marker_definition): Adjust to std::string, use new hex2str overload. (release_static_tracepoint_marker): Remove. (print_one_static_tracepoint_marker): Get marker by reference and adjust to std::string. (info_static_tracepoint_markers_command): Adjust to std::vector changes * target.h (static_tracepoint_marker_p): Remove typedef. (DEF_VEC_P(static_tracepoint_marker_p)): Remove. (struct target_ops) <to_static_tracepoint_marker_at>: Return bool. <to_static_tracepoint_markers_by_strid>: Return std::vector. * target-debug.h (target_debug_print_VEC_static_tracepoint_marker_p_p): Remove. (target_debug_print_std_vector_static_tracepoint_marker): New. (target_debug_print_struct_static_tracepoint_marker_p): Rename to... (target_debug_print_static_tracepoint_marker_p): ... this. * target-delegates.c: Re-generate. * breakpoint.h (struct tracepoint) <static_trace_marker_id>: Make std::string. * breakpoint.c (init_breakpoint_sal): Adjust to std::string. (decode_static_tracepoint_spec): Adjust to std::vector. (tracepoint_print_one_detail): Adjust to std::string. (strace_marker_decode_location): Adjust to std::string. (update_static_tracepoint): Adjust to std::string, remove call to release_static_tracepoint_marker. * linux-nat.c (linux_child_static_tracepoint_markers_by_strid): Adjust to std::vector. * remote.c (remote_static_tracepoint_marker_at): Return bool. (remote_static_tracepoint_markers_by_strid): Adjust to std::vector. * common/rsp-low.h (hex2str): New overload with explicit count of bytes. * common/rsp-low.c (hex2str): New overload with explicit count of bytes. * unittests/rsp-low-selftests.c (test_hex2str): New function. (_initialize_rsp_low_selftests): Add test_hex2str test. * unittests/tracepoint-selftests.c (test_parse_static_tracepoint_marker_definition): Adjust to std::string.
2018-03-22Make parse_static_tracepoint_marker_definition work with multiple static ↵Simon Marchi4-3/+91
tracepoint definitions Since I modify the parse_static_tracepoint_marker_definition function in the next patch, I wanted to write a unit test for it. Doing so showed that it doesn't handle multiple consecutive static tracepoint definitions separated by commas. However, the RSP documentation [1] states that servers may return multiple definitions, like: 1234:6d61726b657231:6578747261207374756666,abba:6d61726b657232: The problem is that the function uses strlen to compute the length of the last field (the extra field). If there are additional definitions in addition to the one we are currently parsing, the returned length will include those definitions, and we'll try to hex-decode past the extra field. This patch changes parse_static_tracepoint_marker_definition to consider the case where the current definition is followed by a comma and more definitions. It also adds the unit test that found the issue in the first place. I don't think this causes any backwards compatibility issues, because the previous code only handled single static tracepoint definitions, and the new code handles that correctly. gdb/ChangeLog: * tracepoint.c (parse_static_tracepoint_marker_definition): Consider case where the definition is followed by more definitions. * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add tracepoint-selftests.c. * unittests/tracepoint-selftests.c: New. [1] https://sourceware.org/gdb/onlinedocs/gdb/Tracepoint-Packets.html#qTfSTM
2018-03-21Add myself as a write-after-approval GDB maintainer.Pedro Franco de Carvalho2-0/+6
gdb/ChangeLog: 2018-03-21 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> * MAINTAINERS (Write After Approval): Add Pedro Franco de Carvalho.
2018-03-21S390: Make IPA recognize tdescs with guarded storageAndreas Arnez3-2/+23
The in-process agent does not handle tdescs with guarded storage yet. This is fixed. gdb/gdbserver/ChangeLog: * linux-s390-ipa.c (get_ipa_tdesc): Add handling for S390_TDESC_GS. * linux-s390-low.c (s390_get_ipa_tdesc_idx): Likewise. (initialize_low_tracepoint): Call init_registers_s390x_gs_linux64 and init_registers_s390_gs_linux64.
2018-03-21S390: gdbserver: Don't write guarded storage registersAndreas Arnez2-24/+12
On S390, the guarded storage register set is only valid if guarded storage is active. Reading/writing the register set yields errors if this is not the case. Then gdbserver emits warnings like these: Warning: ptrace(regsets_store_inferior_registers): No data available Apart from confusing the user, this can also lead to test case failures due to unexpected output. To suppress this, make the guarded storage regsets read-only for now. gdb/gdbserver/ChangeLog: * linux-s390-low.c (s390_fill_gs): Remove function. (s390_fill_gsbc): Remove function. (s390_regsets): Set fill functions for the guarded storage regsets to NULL.
2018-03-21S390: Enable re-attaching with native-extended-gdbserverAndreas Arnez2-44/+62
On s390x, when running attach.exp with native-extended-gdbserver, gdbserver crashes in find_regno like this: .../regcache.c:252: A problem internal to GDBserver has been detected. Unknown register tdb0 requested On the GDB side it looks like this: (gdb) attach 31568 Attaching to process 31568 Remote connection closed The test case attempts to attach to a new process via the already running gdbserver. Thus s390_arch_setup is called a second time, and that's where the problem occurs. In order to determine the word width (32 or 64 bits), s390_arch_setup reads the pswm register through the regcache. For that it uses a temporary tdesc which is supposed to work for all s390 targets, since the actual tdesc has not been determined yet. But in this second round this doesn't work, because s390_regsets has been updated already and now contains regsets not described by the temporary tdesc, such as the one containing tdb0. This is fixed by rearranging the logic in s390_arch_setup. gdb/gdbserver/ChangeLog: * linux-s390-low.c (s390_get_hwcap): Replace tdesc parameter by the word size. Add comment. (s390_get_wordsize): New function. (s390_arch_setup): No longer select a temporary tdesc to fetch the pswm with it. Instead, use s390_get_wordsize to determine the word size first and derive the correct tdesc from that directly.
2018-03-20Fix misleading indentation error.Stephen Roberts2-12/+16
This patch fixes a compile error introduced by my previous change, which caused the indentation of the following code block to become incorrect. ChangeLog: 2018-03-20 Stephen Roberts <stephen.roberts@arm.com> * gdb/symtab.c (find_pc_sect_line): fixed indentation.
2018-03-20Replace the linear search in find_pc_sect_line with a binary search.Stephen Roberts6-11/+216
This patch addresses slowness when setting breakpoints, especially in heavily templatized code. Profiling showed that find_pc_sect_line in symtab.c was the performance bottleneck. The original logic performed a linear search over ordered data. This patch uses a binary search, as suggested by comments around the function. There are no behavioural changes, but gdb is now faster at setting breakpoints in template code. Tested using on make check on an x86 target. The optimisation speeds up the included template-breakpoints.py performance test by a factor of 7 on my machine. ChangeLog: 2018-03-20 Stephen Roberts <stephen.roberts@arm.com> * gdb/symtab.c (find_pc_sect_line): now uses binary search. gdb/testsuite/ * gdb.perf/template-breakpoints.cc: New file. * gdb.perf/template-breakpoints.exp: New file. * gdb.perf/template-breakpoints.py: New file.
2018-03-19Support bare-identifier field initializers in RustTom Tromey5-0/+36
In Rust one can initialize a struct member from an identically-named local variable by simply mentioning the member name in the initializer, like: let x = 0; let y = Struct { x }; This initializes "Struct::x" from "x". This patch adds this form of initializer to the Rust expression parser and adds a test. Tested on x86-64 Fedora 26 using rustc 1.23. 2018-03-19 Tom Tromey <tom@tromey.com> * rust-exp.y (struct_expr_tail, struct_expr_list): Add plain "IDENT" production. 2018-03-19 Tom Tromey <tom@tromey.com> * gdb.rust/simple.rs (main): Add local variables field1, field2, y0. * gdb.rust/simple.exp: Test bare identifier form of struct initializer.
2018-03-19Convert observers to C++Tom Tromey86-1234/+999
This converts observers from using a special source-generating script to be plain C++. This version of the patch takes advantage of C++11 by using std::function and variadic templates; incorporates Pedro's patches; and renames the header file to "observable.h" (this change eliminates the need for a clean rebuild). Note that Pedro's patches used a template lambda in tui-hooks.c, but this failed to compile on some buildbot instances (presumably due to differing C++ versions); I replaced this with an ordinary template function. Regression tested on the buildbot. gdb/ChangeLog 2018-03-19 Pedro Alves <palves@redhat.com> Tom Tromey <tom@tromey.com> * unittests/observable-selftests.c: New file. * common/observable.h: New file. * observable.h: New file. * ada-lang.c, ada-tasks.c, agent.c, aix-thread.c, annotate.c, arm-tdep.c, auto-load.c, auxv.c, break-catch-syscall.c, breakpoint.c, bsd-uthread.c, cli/cli-interp.c, cli/cli-setshow.c, corefile.c, dummy-frame.c, event-loop.c, event-top.c, exec.c, extension.c, frame.c, gdbarch.c, guile/scm-breakpoint.c, infcall.c, infcmd.c, inferior.c, inflow.c, infrun.c, jit.c, linux-tdep.c, linux-thread-db.c, m68klinux-tdep.c, mi/mi-cmd-break.c, mi/mi-interp.c, mi/mi-main.c, objfiles.c, ppc-linux-nat.c, ppc-linux-tdep.c, printcmd.c, procfs.c, python/py-breakpoint.c, python/py-finishbreakpoint.c, python/py-inferior.c, python/py-unwind.c, ravenscar-thread.c, record-btrace.c, record-full.c, record.c, regcache.c, remote.c, riscv-tdep.c, sol-thread.c, solib-aix.c, solib-spu.c, solib.c, spu-multiarch.c, spu-tdep.c, stack.c, symfile-mem.c, symfile.c, symtab.c, thread.c, top.c, tracepoint.c, tui/tui-hooks.c, tui/tui-interp.c, valops.c: Update all users. * tui/tui-hooks.c (tui_bp_created_observer) (tui_bp_deleted_observer, tui_bp_modified_observer) (tui_inferior_exit_observer, tui_before_prompt_observer) (tui_normal_stop_observer, tui_register_changed_observer): Remove. (tui_observers_token): New global. (attach_or_detach, tui_attach_detach_observers): New functions. (tui_install_hooks, tui_remove_hooks): Use tui_attach_detach_observers. * record-btrace.c (record_btrace_thread_observer): Remove. (record_btrace_thread_observer_token): New global. * observer.sh: Remove. * observer.c: Rename to observable.c. * observable.c (namespace gdb_observers): Define new objects. (observer_debug): Move into gdb_observers namespace. (struct observer, struct observer_list, xalloc_observer_list_node) (xfree_observer_list_node, generic_observer_attach) (generic_observer_detach, generic_observer_notify): Remove. (_initialize_observer): Update. Don't include observer.inc. * Makefile.in (generated_files): Remove observer.h, observer.inc. (clean mostlyclean): Likewise. (observer.h, observer.inc): Remove targets. (SUBDIR_UNITTESTS_SRCS): Add observable-selftests.c. (COMMON_SFILES): Use observable.c, not observer.c. * .gitignore: Remove observer.h. gdb/doc/ChangeLog 2018-03-19 Tom Tromey <tom@tromey.com> * observer.texi: Remove. gdb/testsuite/ChangeLog 2018-03-19 Tom Tromey <tom@tromey.com> * gdb.gdb/observer.exp: Remove.
2018-03-19Testsuite: Fix ambiguous "break" due to libinproctraceAndreas Arnez26-50/+79
Some of GDB's trace test cases define a function end() and place a breakpoint there with "break end". However, when libinproctrace is linked to the binary, there are multiple methods named "end", such as std::string::end() from the C++ library or format_pieces::end() from common/format.h. GDB then creates multiple breakpoints instead of just a single one, and some FAILs result, such as these: FAIL: gdb.trace/trace-mt.exp: ftrace on: break end FAIL: gdb.trace/trace-mt.exp: ftrace off: break end Fix this by adding the "-qualified" option to the break commands. For consistency, change all occurrences of "break end" (and similar) in all trace test cases, even if the current behavior does not cause problems. Also, consequently use the gdb_breakpoint convenience proc. gdb/testsuite/ChangeLog: * gdb.trace/actions-changed.exp: Call gdb_breakpoint with the "qualified" option when setting breakpoints. * gdb.trace/backtrace.exp: Likewise. * gdb.trace/circ.exp: Likewise. * gdb.trace/collection.exp: Likewise. * gdb.trace/disconnected-tracing.exp: Likewise. * gdb.trace/ftrace-lock.exp: Likewise. * gdb.trace/ftrace.exp: Likewise. * gdb.trace/infotrace.exp: Likewise. * gdb.trace/packetlen.exp: Likewise. * gdb.trace/passc-dyn.exp: Likewise. * gdb.trace/qtro.exp: Likewise. * gdb.trace/read-memory.exp: Likewise. * gdb.trace/report.exp: Likewise. * gdb.trace/signal.exp: Likewise. * gdb.trace/status-stop.exp: Likewise. * gdb.trace/strace.exp: Likewise. * gdb.trace/tfind.exp: Likewise. * gdb.trace/trace-break.exp: Likewise. * gdb.trace/trace-condition.exp: Likewise. * gdb.trace/trace-mt.exp: Likewise. * gdb.trace/tstatus.exp: Likewise. * gdb.trace/tsv.exp: Likewise. * gdb.trace/unavailable-dwarf-piece.exp: Likewise. * gdb.trace/unavailable.exp: Likewise. * gdb.trace/while-dyn.exp: Likewise.
2018-03-18Remove some cleanups from solib.cTom Tromey2-6/+10
This removes some cleanups from solib.c, replacing them with gdb::def_vector. Regression tested by the buildbot. gdb/ChangeLog 2018-03-18 Tom Tromey <tom@tromey.com> * solib.c (gdb_bfd_lookup_symbol_from_symtab): Use gdb::def_vector. (bfd_lookup_symbol_from_dyn_symtab): Likewise.
2018-03-17Change auto_load_objfile_script_1 to use std::stringTom Tromey2-18/+12
This replaces some manual string manipulation in auto_load_objfile_script_1 with std::string, simplifying the code and allowing the removal of some cleanups. Tested by the buildbot. 2018-03-17 Tom Tromey <tom@tromey.com> * auto-load.c (auto_load_objfile_script_1): Use std::string.
2018-03-17Remove target_fileio_close_cleanupTom Tromey2-16/+38
This removes target_fileio_close_cleanup in favor of a new RAII class. The new class is similar to scoped_fd but calls target_fileio_close_cleanup rather than close. Regression tested by the buildbot. gdb/ChangeLog 2018-03-17 Tom Tromey <tom@tromey.com> * target.c (class scoped_target_fd): New. (target_fileio_close_cleanup): Remove. (target_fileio_read_alloc_1): Use scoped_target_fd.
2018-03-16Add silent Makefile rulesSimon Marchi9-57/+180
Many projects (e.g. the Linux kernel) and build systems use "silent" rules, which means that they'll only print a summary of what's being done instead of printing all the detailed command lines. While chatting on the #gdb IRC channel, I realized a few people (including me) thought it would be nice to have it in GDB too. The idea is that too much text is not useful, the important information gets lost. If there's only the essential information, it's more likely to be useful. Most of the time, when I look at the build output, it's to see how it's progressing. By just printing a brief summary of each operation, I can easily spot what's currently being compiled and therefore how the build progresses (with time you know the order in which files are compiled almost by heart). As with other projects (Linux, automake-based things, probably others), it's possible to print the complete command lines by passing V=1 to make (or any other non-zero value). I had one hesitation about this: when people report build failures, we are more likely to miss the full compile command line. We'll probably sometimes need to ask people to include the build log with "make V=1". I don't think it's a big downside, if other projects the size of the Linux kernel can live with it, I'm sure we can too. gdb/ChangeLog: * silent-rules.mk: New. * Makefile.in: Include silent-rules.mk (srcdir, VPATH, top_srcdir): Move up. (COMPILE): Add ECHO_CXX. (test-cp-name-parser$(EXEEXT)): Add ECHO_CXXLD. (init.c): Add ECHO_INIT_C. (gdb$(EXEEXT)): Add SILENCE and ECHO_CXXLD. (version.c): Add ECHO_GEN. (printcmd.o): Add ECHO_CXX. (target-float.o): Add ECHO_CXX. (ada-exp.o): Add ECHO_CXX. (stamp-xml): Add SILENCE and ECHO_GEN_XML_BUILTIN. (insight$(EXEEXT)): Add ECHO_CXXLD. * gnulib/configure.ac: Add AM_SILENT_RULES. * gnulib/aclocal.m4: Re-generate. * gnulib/configure: Re-generate. * gnulib/import/Makefile.in: Re-generate. gdb/gdbserver/ChangeLog: * Makefile.in: Include silent-rules.mk. (srcdir, abs_top_srcdir, abs_srcdir, VPATH): Move up. (COMPILE): Add ECHO_CXX. (gdbserver$(EXEEXT)): Add SILENCE and ECHO_CXXLD. (gdbreplay$(EXEEXT)): Add SILENCE and ECHO_CXXLD. ($(IPA_LIB)): Add SILENCE and ECHO_CXXLD. (version-generated.c): Add ECHO_GEN. (stamp-xml): Add SILENCE and ECHO_GEN_XML_BUILTIN_GENERATED. (IPAGENT_COMPILE): Add ECHO_CXX. (%-generated.c): Add ECHO_REGDAT.
2018-03-16Remove make_cleanup_free_section_addr_infoTom Tromey12-261/+180
This removes make_cleanup_free_section_addr_info. Instead -- per Simon's suggestion -- this changes section_addr_info to be a std::vector. Regression tested by the buildbot. gdb/ChangeLog 2018-03-16 Tom Tromey <tom@tromey.com> * xcoffread.c (xcoff_symfile_offsets): Change type of "addrs". * utils.h (make_cleanup_free_section_addr_info): Don't declare. * utils.c (do_free_section_addr_info) (make_cleanup_free_section_addr_info): Remove. * symfile.h (struct other_sections): Add constructor. (struct section_addr_info): Remove. (section_addr_info): New typedef. (struct sym_fns) <sym_offsets>: Change type of parameter. (build_section_addr_info_from_objfile) (relative_addr_info_to_section_offsets, addr_info_make_relative) (default_symfile_offsets, symbol_file_add) (symbol_file_add_from_bfd) (build_section_addr_info_from_section_table): Update. (alloc_section_addr_info, free_section_addr_info): Don't declare. * symfile.c (alloc_section_addr_info): Remove. (build_section_addr_info_from_section_table): Change return type. Update. (build_section_addr_info_from_bfd) (build_section_addr_info_from_objfile): Likewise. (free_section_addr_info): Remove. (relative_addr_info_to_section_offsets): Change type of "addrs". (addrs_section_compar): Now a std::sort comparator. (addrs_section_sort): Change return type. (addr_info_make_relative): Change type of "addrs". Update. (default_symfile_offsets, syms_from_objfile_1) (syms_from_objfile, symbol_file_add_with_addrs): Likewise. (symbol_file_add_separate): Update. (symbol_file_add): Change type of "addrs". Update. (add_symbol_file_command): Update. Remove cleanups. * symfile-mem.c (symbol_file_add_from_memory): Update. Remove cleanups. * symfile-debug.c (debug_sym_offsets): Change type of "info". * solib.c (solib_read_symbols): Update. * objfiles.c (objfile_relocate): Update. Remove cleanups. * machoread.c (macho_symfile_offsets): Update. * jit.c (jit_bfd_try_read_symtab): Update.
2018-03-16Fix tspeed test case: copy libinproctrace to targetAndreas Arnez2-0/+6
The tspeed test case does not execute correctly because libinproctrace.so is not copied to the target. This is fixed. gdb/testsuite/ChangeLog: * gdb.trace/tspeed.exp: Add invocation of gdb_load_shlib to ensure that libinproctrace is copied to the target.
2018-03-15Add selftest for substitute_path_componentSimon Marchi3-0/+66
This patch add some unit tests for the substitute_path_component function. gdb/ChangeLog: * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add unittests/utils-selftests.c. * unittests/utils-selftests.c: New file.
2018-03-14Special case NULL when using printf's %s formatTom Tromey7-0/+39
This changes the printf command's %s and %ls formats to special-case NULL, and print "(null)" for these. This is PR cli/14977. This behavior seems a bit friendlier; I was undecided on whether other invalid pointers should be handled specially somehow, so for the time being I've left those out. gdb/ChangeLog 2018-03-14 Tom Tromey <tom@tromey.com> PR cli/14977: * printcmd.c (printf_c_string, printf_wide_c_string): Special case for NULL. gdb/gdbserver/ChangeLog 2018-03-14 Tom Tromey <tom@tromey.com> PR cli/14977: * ax.c (ax_printf): Special case for NULL. gdb/testsuite/ChangeLog 2018-03-14 Tom Tromey <tom@tromey.com> PR cli/14977: * gdb.base/printcmds.exp (test_printf): Add printf test of %s with a null pointer. * gdb.base/wchar.exp: Likewise.
2018-03-14Allow - in %p for printfTom Tromey4-2/+18
PR cli/19918 points out that a printf format like "%-5p" will cause a gdb crash. The bug is problem is that printf_pointer doesn't take the "-" flag into account. gdb/ChangeLog 2018-03-14 Tom Tromey <tom@tromey.com> PR cli/19918: * printcmd.c (printf_pointer): Allow "-" in format. gdb/testsuite/ChangeLog 2018-03-14 Tom Tromey <tom@tromey.com> PR cli/19918: * gdb.base/printcmds.exp (test_printf): Add printf test using '-' flag.
2018-03-14Add usage to printf commandTom Tromey2-2/+7
This patch adds the "Usage:" text to the printf command's help text, and tries to improve the text a tiny bit. gdb/ChangeLog 2018-03-14 Tom Tromey <tom@tromey.com> * printcmd.c (_initialize_printcmd): Add usage to printf.
2018-03-14Update my email addressYao Qi2-4/+8
gdb: 2018-03-14 Yao Qi <qiyao@sourceware.org> * MAINTAINERS: Update my email address.
2018-03-13Remove two cleanups using std::stringTom Tromey3-37/+26
This patches removes cleanups from a couple of spots by using std::string rather than manual memory management. Regression tested by the buildbot, though note that I don't believe the buildbot actually exercises the machoread code. gdb/ChangeLog 2018-03-13 Tom Tromey <tom@tromey.com> * machoread.c (macho_check_dsym): Change filenamep to a std::string*. (macho_symfile_read): Update. * symfile.c (load_command): Use std::string.
2018-03-12gdb/riscv: Fix some ARI issuesAndrew Burgess2-9/+19
Fix some ARI issues in recently added riscv code, the ARI email is: https://sourceware.org/ml/gdb-patches/2018-03/msg00156.html gdb/ChangeLog: * riscv-tdep.c (riscv_sw_breakpoint_from_kind): Add localization to error message string. (riscv_register_name): Use xsnprintf instead of sprintf. (riscv_insn::fetch_instruction): Use gdb_assert instead of internal_error. (riscv_print_arg_location): Use gdb_assert_not_reached instead of error. (riscv_push_dummy_call): Likewise.
2018-03-12Use gdb::byte_vector when reading section dataTom Tromey3-42/+32
This changes a couple of spots that read section data to use gdb::byte_vector rather than a cleanup. Regression tested by the buildbot. I am not certain that the buildbot actually tests the code in question, so I recommend careful review. gdb/ChangeLog 2018-03-12 Tom Tromey <tom@tromey.com> * rs6000-aix-tdep.c (rs6000_aix_core_xfer_shared_libraries_aix): Use gdb::byte_vector. * arm-tdep.c (arm_exidx_new_objfile): Use gdb::byte_vector.
2018-03-12Fix ia64 GDB buildYao Qi3-2/+9
Commit 849d0ba8 breaks GDB build for ia64 with --with-libunwind-ia64=yes. This patch fixes it. gdb: 2018-03-12 Yao Qi <yao.qi@linaro.org> * ia64-libunwind-tdep.c (libunwind_get_reg_special): Change parameter type to readable_regcache. * ia64-libunwind-tdep.h (libunwind_get_reg_special): Update the declaration.
2018-03-11Use std::vector for field lists in dwarf2read.cTom Tromey2-193/+112
This changes dwarf2read.c to use std::vector rather than a linked list when managing the fields and base classes to be added to a type. This removes some bookkeeping types and also allows the removal of some cleanups. gdb/ChangeLog 2018-03-11 Tom Tromey <tom@tromey.com> * dwarf2read.c (struct nextfield): Add initializers. (struct nextfnfield): Remove. (struct fnfieldlist): Add initializers. Remove "length" and "head", use std::vector. (struct decl_field_list): Remove. (struct field_info): Add initializers. <fields, baseclasses>: Now std::vector. <nbaseclasses, nfnfields, typedef_field_list_count, nested_types_list_count>: Remove. (dwarf2_add_field, dwarf2_add_type_defn) (dwarf2_attach_fields_to_type, dwarf2_add_member_fn) (dwarf2_attach_fn_fields_to_type, handle_struct_member_die) (process_structure_scope): Update.
2018-03-11Remove cleanup from build_type_psymtabs_1Tom Tromey2-20/+15
This removes a cleanup from build_type_psymtabs_1, by using std::vector rather than manual memory management. gdb/ChangeLog 2018-03-11 Tom Tromey <tom@tromey.com> * dwarf2read.c (sort_tu_by_abbrev_offset): Change to be suitable for use by std::sort. (build_type_psymtabs_1): Use std::vector.
2018-03-09Update "gdb --configuration" with recently added featuresEli Zaretskii2-9/+41
This adds display of a few recently added optional features. gdb/ChangeLog: 2018-03-09 Eli Zaretskii <eliz@gnu.org> * top.c (print_gdb_configuration): Reflect LIBIPT, LIBMEMCHECK, and LIBMPFR in the printed configuration.
2018-03-08Use scoped_fd in more placesTom Tromey4-46/+37
This changes a few more places to use scoped_fd. This allows the removal of some cleanups. Regression tested by the buildbot, though note that I'm not sure whether the buildbot actually builds anything using all of these files. gdb/ChangeLog 2018-03-08 Tom Tromey <tom@tromey.com> * source.c (get_filename_and_charpos): Use scoped_fd. * nto-procfs.c (procfs_open_1): Use scoped_fd. (procfs_pidlist): Likewise. * procfs.c (proc_get_LDT_entry): Use scoped_fd. (iterate_over_mappings): Likewise.
2018-03-08Change enable_thread_stack_temporaries to an RAII classTom Tromey5-84/+77
This started as a patch to change enable_thread_stack_temporaries to be an RAII class, but then I noticed that this code used a VEC, so I went ahead and did a bit more C++-ification, changing stack_temporaries_enabled to a bool and changing stack_temporaries to a std::vector. Regression tested by the buildbot. gdb/ChangeLog 2018-03-08 Tom Tromey <tom@tromey.com> * infcall.c (struct call_return_meta_info) <stack_temporaries_enabled>: Remove. (get_call_return_value, call_function_by_hand_dummy): Update. * thread.c (disable_thread_stack_temporaries): Remove. (enable_thread_stack_temporaries): Remove. (thread_stack_temporaries_enabled_p): Return bool. (push_thread_stack_temporary, value_in_thread_stack_temporaries) (get_last_thread_stack_temporary): Update. * eval.c (evaluate_subexp): Update. * gdbthread.h (class enable_thread_stack_temporaries): Now a class, not a function. (value_ptr, value_vec): Remove typedefs. (class thread_info) <stack_temporaries_enabled>: Now bool. <stack_temporaries>: Now a std::vector. (thread_stack_temporaries_enabled_p) (value_in_thread_stack_temporaries): Return bool.
2018-03-08Fix misreporting of omitted bytes for large remote packetsSimon Marchi2-10/+11
In remote.c, when the output of "set debug remote" is truncated, the number of characters reported is incorrect. What is reported is the number of characters added by the quoting, not the number of characters that were truncated. gdb/ChangeLog: * remote.c (putpkt_binary): Fix omitted bytes reporting. (getpkt_or_notif_sane_1): Likewise.
2018-03-08Use std::string to simplify build_id_to_debug_bfdSimon Marchi2-22/+15
Using std::string here makes the string building simpler thank playing with char*. A stack allocation is replaced with heap allocation, but I don't think this is really performance-critical code. gdb/ChangeLog: * build-id.c (build_id_to_debug_bfd): Use std::string.
2018-03-08Make find_separate_debug_file* return std::stringSimon Marchi7-70/+66
This patch makes the find_separate_debug_file* functions return std::string, which allows to get rid of some manual memory management and one cleanup. gdb/ChangeLog: * build-id.c (find_separate_debug_file_by_buildid): Return std::string. * build-id.h (find_separate_debug_file_by_buildid): Return std::string. * coffread.c (coff_symfile_read): Adjust to std::string. * elfread.c (elf_symfile_read): Adjust to std::string. * symfile.c (separate_debug_file_exists): Change parameter to std::string. (find_separate_debug_file): Return std::string. (find_separate_debug_file_by_debuglink): Return std::string. * symfile.h (find_separate_debug_file_by_debuglink): Return std::string.
2018-03-08Add xml_escape_text_append and use itSimon Marchi6-17/+58
[This patch should go on top of "linux_qxfer_libraries_svr4: Use std::string", I should have sent them together as a series.] I noticed that linux_qxfer_libraries_svr4 used xml_escape_text, which returns an std::string. That string is then copied into a larger buffer. It would be more efficient if we had a version of xml_escape_text which appended to an existing string instead of returning a new one. This is what this patch does. I manually verified that the output of linux_qxfer_libraries_svr4 didn't change before/after the patch. gdb/ChangeLog: * common/xml-utils.c (xml_escape_text): Move code to... (xml_escape_text_append): ... this new function. * common/xml-utils.h (xml_escape_text_append): New declaration. * unittests/xml-utils-selftests.c (test_xml_escape_text_append): New function. (_initialize_xml_utils): register test_xml_escape_text_append as a selftest. gdb/gdbserver/ChangeLog: * linux-low.c (linux_qxfer_libraries_svr4): Use xml_escape_text_append.
2018-03-08linux_qxfer_libraries_svr4: Use std::stringSimon Marchi2-34/+16
Use std::string, removing some manual memory management. gdb/gdbserver/ChangeLog: * linux-low.c (linux_qxfer_libraries_svr4): Use std::string.
2018-03-08remote-stdio-gdbserver: Pass "target" to remote_exec to delete fileSimon Marchi2-1/+7
As described here https://sourceware.org/bugzilla/show_bug.cgi?id=22841 there seems to be situations where the remote-stdio-gdbserver board fails to delete the uploaded binary file. Passing "target" fixes the issue for Christian who reported the bug. I did not experience this problem, but passing "target" to remote_exec still works for me, so I'm fine with changing it. Any objection? gdb/testsuite/ChangeLog: PR gdb/22841 * boards/remote-stdio-gdbserver.exp (${board}_file): Pass "target" to remote_exec.
2018-03-08Don't redefine upload/download/file in gdbserver-baseSimon Marchi2-22/+6
Before patch Make native gdbserver boards no longer be "remote" (in DejaGnu terms) 739b3f1d8ff7072dcc66240c25b026c6433bda1a the local gdbserver boards (except native-extended-gdbserver...) were considered as remote by DejaGNU. To avoid DejaGNU trying to use ssh/scp to download the files to the target (which is actually local), the gdbserver-base.exp file defined some _download, _upload and _file board operations to override the default behavior, and instead just use local operations. The same patch also changed remote-stdio-gdbserver.exp to make it inherit from gdbserver-base.exp. Since then, this board (which is actually remote) uses the overrides with local file operations. As a result, files are never actually copied to the target. I think we can simply remove the overrides from gdbserver-base.exp. Because all boards should be properly considered local or remote by DejaGNU, it should by default use the right method for transferring files. gdb/testsuite/ChangeLog: PR gdb/22841 * boards/gdbserver-base.exp (${board}_file, ${board}_download, ${board}_upload): Remove.
2018-03-08Remove MAX_REGISTER_SIZE defineAlan Hayward4-8/+7
gdb/ * defs.h: Remove MAX_REGISTER_SIZE. * regcache.c (init_regcache_descr): Remove MAX_REGISTER_SIZE asserts. * python/py-unwind.c (pyuw_sniffer): Likewise.
2018-03-07Return gdb::optional<std::string> from target_fileio_readlinkTom Tromey7-51/+45
This changes to_fileio_readlink and target_fileio_readlink to return a gdb::optional<std::sring>, and then fixes up the callers and implementations. This allows the removal of some cleanups. Regression tested by the buildbot. gdb/ChangeLog 2018-03-07 Tom Tromey <tom@tromey.com> * linux-tdep.c (linux_info_proc): Update. * target.h (struct target_ops) <to_fileio_readlink>: Return optional<string>. (target_fileio_readlink): Return optional<string>. * remote.c (remote_hostio_readlink): Return optional<string>. * inf-child.c (inf_child_fileio_readlink): Return optional<string>. * target.c (target_fileio_readlink): Return optional<string>.
2018-03-07gdb: Add riscv to list of architectures with a save_reggroupAndrew Burgess2-1/+7
The regcache cooked_read test needs to know which architectures have a save_reggroup, riscv does and needs adding to the list. gdb/ChangeLog: * regcache.c (cooked_read_test): Add riscv to the list of architectures that have a save_reggroup.
2018-03-07Fix watching structs in C++Andreas Arnez5-2/+76
Some of the watchpoint logic depends on the fact that the head of the value chain represents the user-specified value to watch. Thus no additional values should be added to the value chain after that. However, if a watchpoint is defined for a C++ structure/class object, then run-time type information (RTTI) may be present. Thus, while constructing the value chain for the watchpoint, the dynamic type is fetched by gnuv3_rrti_type, which invokes value_addr, which then adds a new value to the head of the value chain. This new value represents the pointer to the structure instead of the structure itself. With such a "polluted" value chain the watchpoint logic does not recognize when the user intended to watch a struct, and can_use_hardware_watchpoint returns zero. Instead of a hardware watchpoint, a software watchpoint will then be set for no apparent reason. This is fixed by adding an early exit to gnuv3_rtti_type when the input value is not a dynamic class object. gdb/testsuite/ChangeLog: * gdb.cp/watch-cp.cc: New test. * gdb.cp/watch-cp.exp: New file. gdb/ChangeLog: * gnu-v3-abi.c (gnuv3_rtti_type): Add early exit if the given value is not a dynamic class object.
2018-03-06Formatting fixes in rust-exp.yTom Tromey2-10/+13
I noticed a few formatting buglets in rust-exp.y: A couple of lines were too long, and a couple of parser rules did not follow the same formatting as the rest of the code. I'm checking this in as obvious. Tested by rebuilding. 2018-03-06 Tom Tromey <tom@tromey.com> * rust-exp.y: Formatting fixes.
2018-03-06gdb/riscv: Remove partial target description supportAndrew Burgess2-37/+6
Some parts of the target description support were committed with the initial riscv patch. As target descriptions are not currently supported on riscv this commit removes the two pieces for code that relate to target description support. It is expected that target description support will be added in the future, at which point this, or similar code will be added back. gdb/ChangeLog: * riscv-tdep.c (riscv_register_name): Remove target description support. (riscv_gdbarch_init): Remove target description check.
2018-03-06gdb/riscv: Remove 'Contributed by....' commentsAndrew Burgess3-10/+6
The GDB coding standard states these lines should never have been added. gdb/ChangeLog: * riscv-tdep.c: Remove 'Contributed by ...' lines from header comment. * riscv-tdep.h: Likewise.
2018-03-06gdb/riscv: Remove use of pseudo registersAndrew Burgess2-25/+6
The code making use of pseudo registers was initially intended to support running 32-bit ABI files on 64-bit riscv targets. However, the implementation was incomplete, and broken. For now I've removed all reference to pseudo registers from the riscv target, we've not lost any functionality, and this cleans up failures in the selftests. Once the riscv target has matured a little we'll probably end up bringing back some of the use of pseudo registers in order to better support running 32-bit executables on a 64-bit target. gdb/ChangeLog: * riscv-tdep.c (riscv_pseudo_register_read): Delete. (riscv_pseudo_register_write): Delete. (riscv_gdbarch_init): Remove all use of pseudo registers.
2018-03-06btrace: Remove ui_out cleanupsSimon Marchi4-82/+35
This patch replaces the cleanups that close the list and tuple of the btrace instruction history output with ui_out_emit_tuple and ui_out_emit_list. This allows removing make_cleanup_ui_out_tuple_begin_end and make_cleanup_ui_out_list_begin_end. This patch (along with the previous ones in the series) was regtested on the buildbot. gdb/ChangeLog: * record-btrace.c (btrace_print_lines): Replace cleanup parameter with RAII equivalents. (btrace_insn_history): Replace cleanup with RAII equivalents. * ui-out.h (make_cleanup_ui_out_list_begin_end, make_cleanup_ui_out_tuple_begin_end): Remove. * ui-out.c (struct ui_out_end_cleanup_data, do_cleanup_end, make_cleanup_ui_out_end, make_cleanup_ui_out_tuple_begin_end, make_cleanup_ui_out_list_begin_end): Remove.
2018-03-06btrace: Remove VEC cleanupsSimon Marchi3-35/+72
This patch replaces two VEC(tp_t) with std::vector<thread_info *>, which allows to remove two cleanups. To make it easier to map the old code to the new code, I added the ordered_remove and unordered_remove functions, which operate on std::vector and do the same as VEC's ordered_remove/unordered_remove. gdb/ChangeLog: * record-btrace.c (record_btrace_maybe_mark_async_event): Change parameter types to std::vector. Use bool. (record_btrace_wait): Replace VEC(tp_t) with std::vector<thread_info *>. * common/gdb_vecs.h (unordered_remove, ordered_remove): New.
2018-03-06btrace: Remove btrace disable cleanupSimon Marchi2-14/+39
This patch removes a cleanup that disables btrace on threads in case of failure, so we don't leave it enabled for some the threads and disabled for the rest. gdb/ChangeLog: * record-btrace.c (record_btrace_disable_callback): Remove. (struct scoped_btrace_disable): New. (record_btrace_open): Use scoped_btrace_disable.
2018-03-06gdb/riscv: Fix type when reading register from regcacheAndrew Burgess2-1/+6
Should use a ULONGEST when reading from the regcache. gdb/ChangeLog: * riscv-tdep.c (riscv_return_value): Change type to ULONGEST for reading values from registers.