aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2018-06-21Enable hardware watchpoints on attach for aarch64Richard Bunt5-0/+145
This commit fixes a bug whereby hardware watchpoints are not used on aarch64 when attaching to a target. The fix adds an aarch64 specialization of post_attach which records the number of available hardware debug registers using aarch64_linux_get_debug_reg_capacity. This implementation mirrors that of aarch64_linux_child_post_startup_inferior which successfully enables the use of hardware watchpoints when launching the target under the debugger. gdb/ChangeLog: * aarch64-linux-nat.c (post_attach): New. (aarch64_linux_nat_target::post_attach): Override post_attach to record the number of hardware debug registers. gdb/testsuite/ChangeLog: * gdb.base/watchpoint-hw-attach.c: New test. * gdb.base/watchpoint-hw-attach.exp: New file.
2018-06-20Fix a memory leak in py-param.cTom Tromey2-11/+14
Mark Wielaard pointed out this memory leak to me: ==17633== 775 bytes in 1 blocks are definitely lost in loss record 13,346 of 13,967 ==17633== at 0x4C2DB6B: malloc (vg_replace_malloc.c:299) ==17633== by 0x6652B7: xmalloc (common-utils.c:45) ==17633== by 0xC4C889: xstrdup (xstrdup.c:34) ==17633== by 0x5A71FD: unicode_to_encoded_string(_object*, char const*) (py-utils.c:81) ==17633== by 0x5A73EB: python_string_to_host_string(_object*) (py-utils.c:158) ==17633== by 0x59CC6C: get_doc_string(_object*, _object*) (py-param.c:334) ==17633== by 0x59D2AA: parmpy_init(_object*, _object*, _object*) (py-param.c:728) The bug here is that parmpy_init is written as though add_setshow_generic takes ownership of its doc-string arguments. However, it does not. This patch fixes the bug in a straightforward way and also applies some missing constification to make the problem more apparent. Tested on x86-64 Fedora 26. gdb/ChangeLog 2018-06-20 Tom Tromey <tom@tromey.com> * python/py-param.c (add_setshow_generic): Make parameters const. (parmpy_init): Update.
2018-06-20Rename regcache_cooked_read_ftype and make a function_viewSimon Marchi5-38/+47
regcache_cooked_read_ftype can be converted to a function_view, which allows us to use lambda functions and therefore avoid having to pass an opaque pointer parameter. Adjusting the fallouts showed that the "const regcache &" passed to the readonly_detached_regcache constructor is cast to non-const in do_cooked_read. I changed the constructor parameter to be non-const. Finally, I renamed the typedef from regcache_cooked_read_ftype to register_read_ftype, since there is nothing that forces us to use it only for regcaches nor cooked registers. gdb/ChangeLog: * regcache.h (regcache_cooked_read_ftype): Rename to... (register_read_ftype): ...this, change type to function_view. (class reg_buffer) <save>: Remove src parameter. (readonly_detached_regcache) <readonly_detached_regcache>: Make parameter non-const in first overload. Remove src parameter in second overload. * regcache.c (do_cooked_read): Remove. (readonly_detached_regcache::readonly_detached_regcache): Make parameter non-const, adjust call to other constructor. (reg_buffer::save): Remove src parameter. * frame.c (do_frame_register_read): Remove. (frame_save_as_regcache): Use lambda function. * ppc-linux-tdep.c (ppu2spu_unwind_register): Change type of src parameter to ppu2spu_data *. (ppu2spu_sniffer): Use lambda function.
2018-06-20testsuite: Fix cc-with-tweaks.sh being executed in the wrong shellSimon Marchi4-6/+13
The cc-with-tweaks.sh script needs to be executed with bash. When trying to run this: make check RUNTESTFLAGS="--target_board=dwarf4-gdb-index" TESTS="gdb.base/return.exp" I get: gdb compile failed, /home/emaisin/src/binutils-gdb/gdb/contrib/cc-with-tweaks.sh: 174: /home/emaisin/src/binutils-gdb/gdb/contrib/cc-with-tweaks.sh: Bad substitution The reason is that the board files execute cc-with-tweaks.sh using /bin/sh, which points to dash on my machine. Remove the /bin/sh part and let the shebang choose the right interpreter. gdb/testsuite/ChangeLog: * boards/cc-with-tweaks.exp: Don't call cc-with-tweaks.sh through /bin/sh. * boards/dwarf4-gdb-index.exp: Likewise. * boards/fission-dwp.exp: Likewise.
2018-06-20Remove struct keyword in range-based for-loopSimon Marchi2-1/+6
Fix this with gcc 6.3.0, and make the loop variable const while at it: /home/simark/src/binutils-gdb/gdb/record-full.c: In member function 'virtual int record_full_target::insert_breakpoint(gdbarch*, bp_target_info*)': /home/simark/src/binutils-gdb/gdb/record-full.c:1789:8: error: types may not be defined in a for-range-declaration [-Werror] for (struct record_full_breakpoint &bp : record_full_breakpoints) gdb/ChangeLog: * record-full.c (record_full_target::insert_breakpoint): Remove "struct" keyword, add const.
2018-06-20Improve gdb.base/float128.exp failure messageUlrich Weigand2-1/+20
If the "print large128" sub-test fails in a manner that typically indicates internal overflow due to GDB being built without MPFR support, explicitly state this in the failure message. gdb/testsuite/ChangeLog: 2018-06-20 Ulrich Weigand <uweigand@de.ibm.com> * gdb.base/float128.exp: Add comment and improved fail message to the failure case of "print large128" test.
2018-06-19Bump to autoconf 2.69 and automake 1.15.1Simon Marchi20-2988/+4590
When trying to run the update-gnulib.sh script in gdb, I get this: Error: Wrong automake version (Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/\${ <-- HERE ([^ =:+{}]+)}/ at /opt/automake/1.11.1/bin/automake line 4113.), we need 1.11.1. Aborting. Apparently, it's an issue with a regex in automake that triggers a warning starting with Perl 5.22. It has been fixed in automake 1.15.1. So I think it's a good excuse to bump the versions of autoconf and automake used in the gnulib import. And to avoid requiring multiple builds of autoconf/automake, it was suggested that we bump the required version of those tools for all binutils-gdb. For autoconf, the 2.69 version is universally available, so it's an easy choice. For automake, different distros and distro versions have different automake versions. But 1.15.1 seems to be the most readily available as a package. In any case, it's easy to build it from source. I removed the version checks from AUTOMAKE_OPTIONS and AC_PREREQ, because I don't think they are useful in our case. They only specify a lower bound for the acceptable version of automake/autoconf. That's useful if you let the user choose the version of the tool they want to use, but want to set a minimum version (because you use a feature that was introduced in that version). In our case, we force people to use a specific version anyway. For the autoconf version, we have the check in config/override.m4 that enforces the version we want. It will be one less thing to update next time we change autotools version. I hit a few categories of problems that required some changes. They are described below along with the chosen solutions. Problem 1: configure.ac:17: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated. For more info, see: configure.ac:17: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation Solution 1: Adjust the code based on the example at that URL. Problem 2 (in zlib/): Makefile.am: error: required file './INSTALL' not found Makefile.am: 'automake --add-missing' can install 'INSTALL' Makefile.am: error: required file './NEWS' not found Makefile.am: error: required file './AUTHORS' not found Makefile.am: error: required file './COPYING' not found Makefile.am: 'automake --add-missing' can install 'COPYING' Solution 2: Add the foreign option to AUTOMAKE_OPTIONS. Problem 3: doc/Makefile.am:20: error: support for Cygnus-style trees has been removed Solution 3: Remove the cygnus options. Problem 4: Makefile.am:656: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS') Solution 4: Rename "INCLUDES = " to "AM_CPPFLAGS += " (because AM_CPPFLAGS is already defined earlier). Problem 5: doc/Makefile.am:71: warning: suffix '.texinfo' for Texinfo files is discouraged; use '.texi' instead doc/Makefile.am: warning: Oops! doc/Makefile.am: It appears this file (or files included by it) are triggering doc/Makefile.am: an undocumented, soon-to-be-removed automake hack. doc/Makefile.am: Future automake versions will no longer place in the builddir doc/Makefile.am: (rather than in the srcdir) the generated '.info' files that doc/Makefile.am: appear to be cleaned, by e.g. being listed in CLEANFILES or doc/Makefile.am: DISTCLEANFILES. doc/Makefile.am: If you want your '.info' files to be placed in the builddir doc/Makefile.am: rather than in the srcdir, you have to use the shiny new doc/Makefile.am: 'info-in-builddir' automake option. Solution 5: Rename .texinfo files to .texi. Problem 6: doc/Makefile.am: warning: Oops! doc/Makefile.am: It appears this file (or files included by it) are triggering doc/Makefile.am: an undocumented, soon-to-be-removed automake hack. doc/Makefile.am: Future automake versions will no longer place in the builddir doc/Makefile.am: (rather than in the srcdir) the generated '.info' files that doc/Makefile.am: appear to be cleaned, by e.g. being listed in CLEANFILES or doc/Makefile.am: DISTCLEANFILES. doc/Makefile.am: If you want your '.info' files to be placed in the builddir doc/Makefile.am: rather than in the srcdir, you have to use the shiny new doc/Makefile.am: 'info-in-builddir' automake option. Solution 6: Remove the hack at the bottom of doc/Makefile.am and use the info-in-builddir automake option. Problem 7: doc/Makefile.am:35: error: required file '../texinfo.tex' not found doc/Makefile.am:35: 'automake --add-missing' can install 'texinfo.tex' Solution 7: Use the no-texinfo.tex automake option. We also have one in texinfo/texinfo.tex, not sure if we should point to that, or move it (or a newer version of it added with automake --add-missing) to top-level. Problem 8: Makefile.am:131: warning: source file 'config/tc-aarch64.c' is in a subdirectory, Makefile.am:131: but option 'subdir-objects' is disabled automake: warning: possible forward-incompatibility. automake: At least a source file is in a subdirectory, but the 'subdir-objects' automake: automake option hasn't been enabled. For now, the corresponding output automake: object file(s) will be placed in the top-level directory. However, automake: this behaviour will change in future Automake versions: they will automake: unconditionally cause object files to be placed in the same subdirectory automake: of the corresponding sources. automake: You are advised to start using 'subdir-objects' option throughout your automake: project, to avoid future incompatibilities. Solution 8: Use subdir-objects, that means adjusting references to some .o that will now be in config/. Problem 9: configure.ac:375: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body ../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from... ../../lib/autoconf/general.m4:2601: _AC_COMPILE_IFELSE is expanded from... ../../lib/autoconf/general.m4:2617: AC_COMPILE_IFELSE is expanded from... ../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from... ../../lib/autoconf/general.m4:2042: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:2063: AC_CACHE_CHECK is expanded from... configure.ac:375: the top level Solution 9: Use AC_LANG_SOURCE, or use proper quoting. Problem 10 (in intl/): configure.ac:7: warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS /usr/share/aclocal/threadlib.m4:36: gl_THREADLIB_EARLY_BODY is expanded from... /usr/share/aclocal/threadlib.m4:29: gl_THREADLIB_EARLY is expanded from... /usr/share/aclocal/threadlib.m4:318: gl_THREADLIB is expanded from... /usr/share/aclocal/lock.m4:9: gl_LOCK is expanded from... /usr/share/aclocal/intl.m4:211: gt_INTL_SUBDIR_CORE is expanded from... /usr/share/aclocal/intl.m4:25: AM_INTL_SUBDIR is expanded from... /usr/share/aclocal/gettext.m4:57: AM_GNU_GETTEXT is expanded from... configure.ac:7: the top level Solution 10: Add AC_USE_SYSTEM_EXTENSIONS in configure.ac. ChangeLog: * libtool.m4: Use AC_LANG_SOURCE. * configure.ac: Remove AC_PREREQ, use AC_LANG_SOURCE. * README-maintainer-mode: Update version requirements. * ar-lib: New file. * test-driver: New file. * configure: Re-generate. bfd/ChangeLog: * Makefile.am (AUTOMAKE_OPTIONS): Remove 1.11. (INCLUDES): Rename to ... (AM_CPPFLAGS): ... this. * configure.ac: Remove AC_PREREQ. * doc/Makefile.am (AUTOMAKE_OPTIONS): Remove 1.9, cygnus, add info-in-builddir no-texinfo.tex. (info_TEXINFOS): Rename bfd.texinfo to bfd.texi. * doc/bfd.texinfo: Rename to ... * doc/bfd.texi: ... this. * Makefile.in: Re-generate. * aclocal.m4: Re-generate. * config.in: Re-generate. * configure: Re-generate. * doc/Makefile.in: Re-generate. binutils/ChangeLog: * configure.ac: Remove AC_PREREQ. * doc/Makefile.am (AUTOMAKE_OPTIONS): Remove cygnus, add info-in-builddir no-texinfo.tex. * Makefile.in: Re-generate. * aclocal.m4: Re-generate. * config.in: Re-generate. * configure: Re-generate. * doc/Makefile.in: Re-generate. config/ChangeLog: * override.m4 (_GCC_AUTOCONF_VERSION): Bump from 2.64 to 2.69. etc/ChangeLog: * configure.in: Remove AC_PREREQ. * configure: Re-generate. gas/ChangeLog: * Makefile.am (AUTOMAKE_OPTIONS): Remove 1.11, add subdir-objects. (TARG_CPU_O, OBJ_FORMAT_O, ATOF_TARG_O): Add config/ prefix. * configure.ac (TARG_CPU_O, OBJ_FORMAT_O, ATOF_TARG_O, emfiles, extra_objects): Add config/ prefix. * doc/as.texinfo: Rename to... * doc/as.texi: ... this. * doc/Makefile.am: Rename as.texinfo to as.texi throughout. Remove DISTCLEANFILES hack. (AUTOMAKE_OPTIONS): Remove 1.8, cygnus, add no-texinfo.tex and info-in-builddir. * Makefile.in: Re-generate. * aclocal.m4: Re-generate. * config.in: Re-generate. * configure: Re-generate. * doc/Makefile.in: Re-generate. gdb/ChangeLog: * common/common-defs.h (PACKAGE_NAME, PACKAGE_VERSION, PACKAGE_STRING, PACKAGE_TARNAME): Undefine. * configure.ac: Remove AC_PREREQ, add missing quoting. * gnulib/configure.ac: Modernize usage of AC_INIT/AM_INIT_AUTOMAKE. Remove AC_PREREQ. * gnulib/update-gnulib.sh (AUTOCONF_VERSION): Bump to 2.69. (AUTOMAKE_VERSION): Bump to 1.15.1. * configure: Re-generate. * config.in: Re-generate. * aclocal.m4: Re-generate. * gnulib/aclocal.m4: Re-generate. * gnulib/config.in: Re-generate. * gnulib/configure: Re-generate. * gnulib/import/Makefile.in: Re-generate. gdb/gdbserver/ChangeLog: * configure.ac: Remove AC_PREREQ, add missing quoting. * configure: Re-generate. * config.in: Re-generate. * aclocal.m4: Re-generate. gdb/testsuite/ChangeLog: * configure.ac: Remove AC_PREREQ. * configure: Re-generate. gold/ChangeLog: * configure.ac: Remove AC_PREREQ, add missing quoting and usage of AC_LANG_SOURCE. * Makefile.in: Re-generate. * aclocal.m4: Re-generate. * configure: Re-generate. * testsuite/Makefile.in: Re-generate. gprof/ChangeLog: * configure.ac: Remove AC_PREREQ. * Makefile.am: Remove DISTCLEANFILES hack. (AUTOMAKE_OPTIONS): Remove 1.11, add info-in-builddir. * Makefile.in: Re-generate. * aclocal.m4: Re-generate. * configure: Re-generate. * gconfig.in: Re-generate. intl/ChangeLog: * configure.ac: Add AC_USE_SYSTEM_EXTENSIONS, remove AC_PREREQ. * configure: Re-generate. * config.h.in: Re-generate. * aclocal.m4: Re-generate. ld/ChangeLog: * configure.ac: Remove AC_PREREQ. * Makefile.am: Remove DISTCLEANFILES hack, rename ld.texinfo to ld.texi, ldint.texinfo to ldint.texi throughout. (AUTOMAKE_OPTIONS): Add info-in-builddir. * README: Rename ld.texinfo to ld.texi, ldint.texinfo to ldint.texi throughout. * gen-doc.texi: Likewise. * h8-doc.texi: Likewise. * ld.texinfo: Rename to ... * ld.texi: ... this. * ldint.texinfo: Rename to ... * ldint.texi: ... this. * Makefile.in: Re-generate. * aclocal.m4: Re-generate. * config.in: Re-generate. * configure: Re-generate. libdecnumber/ChangeLog: * configure.ac: Remove AC_PREREQ. * configure: Re-generate. * aclocal.m4. libiberty/ChangeLog: * configure.ac: Remove AC_PREREQ. * configure: Re-generate. * config.in: Re-generate. opcodes/ChangeLog: * Makefile.am (AUTOMAKE_OPTIONS): Remove 1.11. * configure.ac: Remove AC_PREREQ. * Makefile.in: Re-generate. * aclocal.m4: Re-generate. * configure: Re-generate. readline/ChangeLog.gdb: * configure: Re-generate. * examples/rlfe/configure: Re-generate. sim/ChangeLog: * All configure.ac: Remove AC_PREREQ. * All configure: Re-generate. zlib/ChangeLog.bin-gdb: * configure.ac: Modernize AC_INIT call, remove AC_PREREQ. * Makefile.am (AUTOMAKE_OPTIONS): Remove 1.8, cygnus, add foreign. * Makefile.in: Re-generate. * aclocal.m4: Re-generate. * configure: Re-generate.
2018-06-19Silence -Wmaybe-uninitialized warning in ↵Pedro Alves2-13/+28
minsyms.c:lookup_minimal_symbol_by_pc_section Compiling with GCC 8.1 shows this warning: gdb/minsyms.c: In function 'bound_minimal_symbol lookup_minimal_symbol_by_pc_section(CORE_ADDR, obj_section*, lookup_msym_prefer)': gdb/minsyms.c:825:40: warning: 'want_type' may be used uninitialized in this function [-Wmaybe-uninitialized] && MSYMBOL_TYPE (&msymbol[hi]) != want_type That warning is a false positive, because the switch that converts enum lookup_msym_prefer values to enum enum minimal_symbol_type values has a case for every lookup_msym_prefer enumerator: switch (prefer) { case lookup_msym_prefer::TEXT: want_type = mst_text; break; case lookup_msym_prefer::TRAMPOLINE: want_type = mst_solib_trampoline; break; case lookup_msym_prefer::GNU_IFUNC: want_type = mst_text_gnu_ifunc; break; } The problem is that GCC assumes that enum variables may hold values other than the named enumerators (like e.g., "lookup_msym_prefer prefer = (lookup_msym_prefer) 10;"). Rework the code a bit, adding a gdb_assert to make it explicit to the compiler that want_type is initialized in all normal-return paths. gdb/ChangeLog: 2018-06-19 Pedro Alves <palves@redhat.com> * minsyms.c (msym_prefer_to_msym_type): New, factored out from ... (lookup_minimal_symbol_by_pc_section): ... here with gdb_assert_not_reached added.
2018-06-19Change inline frame breakpoint skipping logic (fix gdb.gdb/selftest.exp)Pedro Alves5-12/+87
Currently, gdb.gdb/selftest.exp fails if you build GDB with optimization (-O2, etc.). The reason is that after setting a breakpoint in captured_main, we stop at: ... Breakpoint 1, captured_main_1 (context=<optimized out>) at src/gdb/main.c:492 ... while selftest_setup expects a stop at captured_main. Here, captured_main_1 has been inlined into captured_main, and captured_main has been inlined into gdb_main: ... $ nm ./build/gdb/gdb | egrep ' [tT] .*captured_main|gdb_main' | c++filt 000000000061b950 T gdb_main(captured_main_args*) ... Indeed, the two inlined functions show up in the backtrace: ... (gdb) bt #0 captured_main_1 (context=<optimized out>) at main.c:492 #1 captured_main (data=<optimized out>) at main.c:1147 #2 gdb_main (args=args@entry=0x7fffffffdb80) at main.c:1173 #3 0x000000000040fea5 in main (argc=<optimized out>, argv=<optimized out>) at gdb.c:32 ... We're now stopping at captured_main_1 because commit ddfe970e6bec ("Don't elide all inlined frames") makes GDB present a stop at the innermost inlined frame if the program stopped by a user breakpoint. Now, the selftest.exp testcase explicitly asks to stop at "captured_main", not "captured_main_1", so I'm thinking that it's GDB'S behavior that should be improved. That is what this commit does, by only showing a stop at an inline frame if the user breakpoint was set in that frame's block. Before this commit: (top-gdb) b captured_main Breakpoint 1 at 0x792f99: file src/gdb/main.c, line 492. (top-gdb) r Starting program: build/gdb/gdb Breakpoint 1, captured_main_1 (context=<optimized out>) at src/gdb/main.c:492 492 lim_at_start = (char *) sbrk (0); (top-gdb) After this commit, we now instead get: (top-gdb) b captured_main Breakpoint 1 at 0x791339: file src/gdb/main.c, line 492. (top-gdb) r Starting program: build/gdb/gdb Breakpoint 1, captured_main (data=<optimized out>) at src/gdb/main.c:1147 1147 captured_main_1 (context); (top-gdb) and: (top-gdb) b captured_main_1 Breakpoint 2 at 0x791339: file src/gdb/main.c, line 492. (top-gdb) r Starting program: build/gdb/gdb Breakpoint 2, captured_main_1 (context=<optimized out>) at src/gdb/main.c:492 492 lim_at_start = (char *) sbrk (0); (top-gdb) Note that both captured_main and captured_main_1 resolved to the same address, 0x791339. That is necessary to trigger the issue in question. The gdb.base/inline-break.exp testcase currently does not exercise that, but the new test added by this commit does. That new test fails without the GDB fix and passes with the fix. No regressions on x86-64 GNU/Linux. While at it, the THIS_PC comparison in stopped_by_user_bp_inline_frame is basically a nop, so just remove it -- if a software or hardware breakpoint explains the stop, then it must be that it was installed at the current PC. gdb/ChangeLog: 2018-06-19 Pedro Alves <palves@redhat.com> * inline-frame.c (stopped_by_user_bp_inline_frame): Replace PC parameter with a block parameter. Compare location's block symbol with the frame's block instead of addresses. (skip_inline_frames): Pass the current block instead of the frame's address. Break out as soon as we determine the frame should not be skipped. gdb/testsuite/ChangeLog: 2018-06-19 Pedro Alves <palves@redhat.com> * gdb.opt/inline-break.c (func_inline_callee, func_inline_caller) (func_extern_caller): New. (main): Call func_extern_caller. * gdb.opt/inline-break.exp: Add tests for inline frame skipping logic change.
2018-06-18Fix ChangeLog merge conflictSimon Marchi1-8/+6
I noticed that gdb/testsuite/ChangeLog had some conflict markers... this patch fixes it.
2018-06-18Fix failure to find member of a typedef base classWeimin Pan5-1/+84
The test case below demonstrates the problem, as described in this PR's Comment 5: typedef struct { int x; } A; struct C : A { int y; }; int main() { C c; return 55; } $ gdb a.out (gdb) ptype C::x Internal error: non-aggregate type to value_struct_elt_for_reference In value_struct_elt_for_reference(), need to call check_typedef() on the aggregate type to handle the case of *curtype being ptr->typedef. Tested on x86_64-linux. No regressions.
2018-06-18Remove current_traceframe declarationSimon Marchi2-2/+4
The variable has been removed in c12a508 ("Add client_state struct."), remove the leftover declaration. gdb/gdbserver/ChangeLog: * tracepoint.h (current_traceframe): Remove declaration.
2018-06-18Use unique_xmalloc_ptr in solib-aix.cTom Tromey2-7/+11
This removes a cleanup from solib-aix.c via unique_xmalloc_ptr. gdb/ChangeLog 2018-06-18 Tom Tromey <tom@tromey.com> * solib-aix.c (solib_aix_get_section_offsets): Return unique_xmalloc_ptr. (solib_aix_solib_create_inferior_hook): Update.
2018-06-18Use unique_xmalloc_ptr in darwin_current_sosTom Tromey2-9/+8
This changes darwin_current_sos to use unique_xmalloc_ptr rather than a cleanup. gdb/ChangeLog 2018-06-18 Tom Tromey <tom@tromey.com> * solib-darwin.c (darwin_current_sos): Use unique_xmalloc_ptr.
2018-06-18Use unique_xmalloc_ptr in two solib functionsTom Tromey3-16/+13
This removes a couple of cleanups by using unique_xmalloc_ptr instead. These two changes are combined because the two functions are very similar. gdb/ChangeLog 2018-06-18 Tom Tromey <tom@tromey.com> * solib-frv.c (frv_relocate_main_executable): Use unique_xmalloc_ptr. * solib-dsbt.c (dsbt_relocate_main_executable): Use unique_xmalloc_ptr.
2018-06-18Remove resume_section_map_updates_cleanupTom Tromey4-88/+80
This removes resume_section_map_updates_cleanup, replacing it with a scoped_restore. Tested by the buildbot. gdb/ChangeLog 2018-06-18 Tom Tromey <tom@tromey.com> * objfiles.h (inhibit_section_map_updates): Update. (resume_section_map_updates, resume_section_map_updates_cleanup): Remove. * solib-svr4.c (svr4_handle_solib_event): Update. * objfiles.c (inhibit_section_map_updates): Return scoped_restore_tmpl<int>. (resume_section_map_updates, resume_section_map_updates_cleanup): Remove.
2018-06-18Use unique_xmalloc_ptr for read_stringTom Tromey8-55/+64
This changes read_string's "buffer" out-parameter to be a unique_xmalloc_ptr, then updates the users. This allows for the removal of some cleanups. I chose unique_xmalloc_ptr rather than byte_vector here due to the way Guile unwinding seems to work. Tested by the buildbot. gdb/ChangeLog 2018-06-18 Tom Tromey <tom@tromey.com> * valprint.h (read_string): Update. * valprint.c (read_string): Change type of "buffer". (val_print_string): Update. * python/py-value.c (valpy_string): Update. * language.h (struct language_defn) <la_get_string>: Change type of "buffer". (default_get_string, c_get_string): Update. * language.c (default_get_string): Change type of "buffer". * guile/scm-value.c (gdbscm_value_to_string): Update. * c-lang.c (c_get_string): Change type of "buffer".
2018-06-18Remove cleanups from ser-mingw.cTom Tromey2-20/+20
This removes the only cleanup from ser-mingw.c, replacing it with a specialization of std::unique_ptr. Tested by the buildbot. gdb/ChangeLog 2018-06-18 Tom Tromey <tom@tromey.com> * ser-mingw.c (struct pipe_state_destroyer): New. (pipe_state_up): New typedef. (cleanup_pipe_state): Remove. (pipe_windows_open): Use pipe_state_up. Don't release argv.
2018-06-18Remove la_errorTom Tromey30-68/+58
While working on the parser code, I noticed that yyerror is exported from each parser. It is used by this code in parse.c: TRY { if (lang->la_parser (&ps)) lang->la_error (NULL); } However, it seems to me that la_error will never be called here, because in every case, la_parser throws an exception on error -- each implementation of yyerror just calls error. So, this patch removes la_error and makes all the yyerror functions static. This is handy primarily because it makes it simpler to make the expression parsers pure. Tested by the buildbot. gdb/ChangeLog 2018-06-18 Tom Tromey <tom@tromey.com> * rust-lang.h (rust_yyerror): Don't declare. * rust-lang.c (rust_language_defn): Update. * rust-exp.y (yyerror): Now static. * parse.c (parse_exp_in_context_1): Update. * p-lang.h (p_yyerror): Don't declare. * p-lang.c (p_language_defn): Update. * p-exp.y (yyerror): Now static. * opencl-lang.c (opencl_language_defn): Update. * objc-lang.c (objc_language_defn): Update. * m2-lang.h (m2_yyerror): Don't declare. * m2-lang.c (m2_language_defn): Update. * m2-exp.y (yyerror): Now static. * language.h (struct language_defn) <la_error>: Remove. * language.c (unk_lang_error): Remove. (unknown_language_defn, auto_language_defn): Remove. * go-lang.h (go_yyerror): Don't declare. * go-lang.c (go_language_defn): Update. * go-exp.y (yyerror): Now static. * f-lang.h (f_yyerror): Don't declare. * f-lang.c (f_language_defn): Update. * f-exp.y (yyerror): Now static. * d-lang.h (d_yyerror): Don't declare. * d-lang.c (d_language_defn): Update. * d-exp.y (yyerror): Now static. * c-lang.h (c_yyerror): Don't declare. * c-lang.c (c_language_defn, cplus_language_defn) (asm_language_defn, minimal_language_defn): Update. * c-exp.y (yyerror): Now static. * ada-lang.h (ada_yyerror): Don't declare. * ada-lang.c (ada_language_defn): Update. * ada-exp.y (yyerror): Now static.
2018-06-18Ptrace support for AArch64 SVE gdbserverAlan Hayward2-3/+68
Add checks to detect SVE tdesc. Easiest way to do this is by checking the size of the vector registers. Use the common aarch64 ptrace copy functions for reading/writing registers. A wrapper is required due to the common functions using reg_buffer_common. gdbserver/ * linux-aarch64-low.c (is_sve_tdesc): New function. (aarch64_sve_regs_copy_to_regcache): Likewise. (aarch64_sve_regs_copy_from_regcache): Likewise. (aarch64_regs_info): Add SVE checks. (initialize_low_arch): Initialize SVE.
2018-06-18Ptrace support for Aarch64 SVEAlan Hayward6-3/+403
Add support for reading and writing registers for Aarch64 SVE. We need to support the cases where the kernel only gives us a fpsimd structure. This occurs when there is no active SVE state in the kernel (for example, after starting a new process). Added checks to make sure the vector length has not changed whilst the process is running. gdb/ * aarch64-linux-nat.c (fetch_sveregs_from_thread): New function. (store_sveregs_to_thread): Likewise. (aarch64_linux_fetch_inferior_registers): Check for SVE. (aarch64_linux_store_inferior_registers): Likewise. * nat/aarch64-sve-linux-ptrace.c (aarch64_sve_get_sveregs): New function. (aarch64_sve_regs_copy_to_regcache): Likewise. (aarch64_sve_regs_copy_from_regcache): Likewise. * nat/aarch64-sve-linux-ptrace.h (aarch64_sve_get_sveregs): New declaration. (aarch64_sve_regs_copy_to_regcache): Likewise. (aarch64_sve_regs_copy_from_regcache): Likewise. (sve_context): Structure from Linux headers. (SVE_SIG_ZREGS_SIZE): Define from Linux headers. (SVE_SIG_ZREG_SIZE): Likewise. (SVE_SIG_PREG_SIZE): Likewise. (SVE_SIG_FFR_SIZE): Likewise. (SVE_SIG_REGS_OFFSET): Likewise. (SVE_SIG_ZREGS_OFFSET): Likewise. (SVE_SIG_ZREG_OFFSET): Likewise. (SVE_SIG_ZREGS_SIZE): Likewise. (SVE_SIG_PREGS_OFFSET): Likewise. (SVE_SIG_PREG_OFFSET): Likewise. (SVE_SIG_PREGS_SIZE): Likewise. (SVE_SIG_FFR_OFFSET): Likewise. (SVE_SIG_REGS_SIZE): Likewise. (SVE_SIG_CONTEXT_SIZE): Likewise. (SVE_PT_REGS_MASK): Likewise. (SVE_PT_REGS_FPSIMD): Likewise. (SVE_PT_REGS_SVE): Likewise. (SVE_PT_VL_INHERIT): Likewise. (SVE_PT_VL_ONEXEC): Likewise. (SVE_PT_REGS_OFFSET): Likewise. (SVE_PT_FPSIMD_OFFSET): Likewise. (SVE_PT_FPSIMD_SIZE): Likewise. (SVE_PT_SVE_ZREG_SIZE): Likewise. (SVE_PT_SVE_PREG_SIZE): Likewise. (SVE_PT_SVE_FFR_SIZE): Likewise. (SVE_PT_SVE_FPSR_SIZE): Likewise. (SVE_PT_SVE_FPCR_SIZE): Likewise. (__SVE_SIG_TO_PT): Likewise. (SVE_PT_SVE_OFFSET): Likewise. (SVE_PT_SVE_ZREGS_OFFSET): Likewise. (SVE_PT_SVE_ZREG_OFFSET): Likewise. (SVE_PT_SVE_ZREGS_SIZE): Likewise. (SVE_PT_SVE_PREGS_OFFSET): Likewise. (SVE_PT_SVE_PREG_OFFSET): Likewise. (SVE_PT_SVE_PREGS_SIZE): Likewise. (SVE_PT_SVE_FFR_OFFSET): Likewise. (SVE_PT_SVE_FPSR_OFFSET): Likewise. (SVE_PT_SVE_FPCR_OFFSET): Likewise. (SVE_PT_SVE_SIZE): Likewise. (SVE_PT_SIZE): Likewise. (HAS_SVE_STATE): New define. gdbserver/ * Makefile.in: Add aarch64-sve-linux-ptrace.c.
2018-06-18Add Aarch64 SVE compatibility macrosAlan Hayward3-40/+286
This header provides compatibility support for SVE allow building even when the underlying host system lacks support for SVE. If the binary is then run on an SVE-enabled kernel then support will automatically be available. gdb/ * nat/aarch64-sve-linux-sigcontext.h: New file. * nat/aarch64-sve-linux-ptrace.h (SVE_VQ_BYTES): Move to new files. (SVE_VQ_MIN): Likewise. (SVE_VQ_MAX): Likewise. (SVE_VL_MIN): Likewise. (SVE_VL_MAX): Likewise. (SVE_NUM_ZREGS): Likewise. (SVE_NUM_PREGS): Likewise. (sve_vl_valid): Likewise. (struct user_sve_header): Likewise.
2018-06-18[gdb/testsuite/ada] Fix number-of-bp test in bp_inlined_func.expTom de Vries2-2/+6
At the moment, bp_inlined_func.exp passes for a combined current gcc and gdb-binutils repos build but fails for a build with system gcc (7.3.1) and ld (2.29.1). It checks for 4 breakpoints on read_small: ... gdb_test "break read_small" \ "Breakpoint $decimal at $hex: read_small\\. \\(4 locations\\)" \ "set breakpoint at read_small" ... and fails because it gets 5 breakpoint locations instead: ... (gdb) break read_small Breakpoint 2 at 0x401f9a: read_small. (5 locations) (gdb) FAIL: gdb.ada/bp_inlined_func.exp: set breakpoint at read_small ... The 4 expected breakpoint locations are inlined versions of read_small, and the 5th breakpoint location has this address: ... (gdb) info breakpoint Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x0000000000401f9a in b.read_small at bp_inlined_func/b.adb:20 ... which is the read_small function itself: ... (gdb) x 0x0000000000401f9a 0x401f9a <b__read_small+4>: 0x22f8058b ... This patch updates the test to allow 5 breakpoint locations. Tested on the configurations mentioned above, on x86_64. 2018-06-18 Tom de Vries <tdevries@suse.de> * gdb.ada/bp_inlined_func.exp: Allow 5 breakpoint locations.
2018-06-16gdb: Don't drop SIGSTOP during stop_all_threadsAndrew Burgess6-4/+542
This patch fixes an issue where GDB would sometimes hang when attaching to a multi-threaded process. This issue was especially likely to trigger if the machine (running the inferior) was under load. In summary, the problem is an imbalance between two functions in linux-nat.c, stop_callback and stop_wait_callback. In stop_callback we send SIGSTOP to a thread, but _only_ if the thread is not already stopped, and if it is not signalled, which means it should stop soon. In stop_wait_callback we wait for the SIGSTOP to arrive, however, we are aware that the thread might have been signalled for some other reason, and so if a signal other than SIGSTOP causes the thread to stop then we stash that signal away so it can be reported back later. If we get a SIGSTOP then this is discarded, after all, this signal was sent from stop_callback. Except that this might not be the case, it could be that SIGSTOP was sent to a thread from elsewhere in GDB, in which case we would not have sent another SIGSTOP from stop_callback and the SIGSTOP received in stop_wait_callback should not be ignored. Below I've laid out the exact sequence of events that I saw that lead me to track down the above diagnosis. After attaching to the inferior GDB sends a SIGSTOP to all of the threads and then returns to the event loop waiting for interesting things to happen. Eventually the first target event is detected (this will be the first SIGSTOP arriving) and GDB calls inferior_event_handler which calls fetch_inferior_event. Inside fetch_inferior_event GDB calls do_target_wait which calls target_wait to find a thread with an event. The target_wait call ends up in linux_nat_wait_1, which first checks to see if any threads already have stashed stop events to report, and if there are none then we enter a loop fetching as many events as possible out of the kernel. This event fetching is non-blocking, and we give up once the kernel has no more events ready to give us. All of the events from the kernel are passed through linux_nat_filter_event which stashes the wait status for all of the threads that reported a SIGSTOP, these will be returned by future calls to linux_nat_wait_1. Lets assume for a moment that we've attached to a multi-threaded inferior, and that all but one thread has reported its stop during the initial wait call in linux_nat_wait_1. The other thread will be reporting a SIGSTOP, but the kernel has not yet managed to deliver that signal to GDB before GDB gave up waiting and continued handling the events it already had. GDB selects one of the threads that has reported a SIGSTOP and passes this thread ID back to fetch_inferior_event. To handle the thread's SIGSTOP, GDB calls handle_signal_stop, which calls stop_all_threads, this calls wait_one, which in turn calls target_wait. The first call to target_wait at this point will result in a stashed wait status being returned, at which point we call setup_inferior. The call to setup_inferior leads to a call into try_thread_db_load_1 which results in a call to linux_stop_and_wait_all_lwps. This in turn calls stop_callback on each thread followed by stop_wait_callback on each thread. We're now ready to make the mistake. In stop_callback we see that our problem thread is not stopped, but is signalled, so it should stop soon. As a result we don't send another SIGSTOP. We then enter stop_wait_callback, eventually the problem thread stops with SIGSTOP which we _incorrectly_ assume came from stop_callback, and we discard. Once stop_wait_callback has done its damage we return from linux_stop_and_wait_all_lwps, finish in try_thread_db_load_1, and eventually unwind back to the call to setup_inferior in stop_all_threads. GDB now loops around, and performs another target_wait to get the next event from the inferior. The target_wait calls causes us to once again reach linux_nat_wait_1, and we pass through some code that calls resume_stopped_resumed_lwps. This allows GDB to resume threads that are physically stopped, but which GDB doesn't see any good reason for the thread to remain stopped. In our case, the problem thread which had its SIGSTOP discarded is stopped, but doesn't have a stashed wait status to report, and so GDB sets the thread going again. We are now stuck waiting for an event on the problem thread that might never arrive. When considering how to write a test for this bug I struggled. The issue was only spotted _randomly_ when a machine was heavily loaded with many multi-threaded applications, and GDB was being attached (by script) to all of these applications in parallel. In one reproducer I required around 5 applications each of 5 threads per machine core in order to reproduce the bug 2 out of 3 times. What we really want to do though is simulate the kernel being slow to report events through waitpid during the initial attach. The solution I came up with was to write an LD_PRELOAD library that intercepts (some) waitpid calls and rate limits them to one per-second. Any more than that simply return 0 indicating there's no event available. Obviously this can only be applied to waitpid calls that have the WNOHANG flag set. Unfortunately, once you ignore a waitpid call GDB can get a bit stuck. Usually, once the kernel has made a child status available to waitpid GDB will be sent a SIGCHLD signal. However, if the kernel makes 5 child statuses available but, due to the preload library we only collect one of them, then the kernel will not send any further SIGCHLD signals, and so, when GDB, thinking that the remaining statuses have not yet arrived sits waiting for a SIGCHLD it will be disappointed. The solution, implemented within the preload library, is that, when we hold back a waitpid result from GDB we spawn a new thread. This thread delays for a short period, and then sends GDB a SIGCHLD. This causes GDB to retry the waitpid, at which point sufficient time has passed and our library allows the waitpid call to complete. gdb/ChangeLog: * linux-nat.c (stop_wait_callback): Don't discard SIGSTOP if it was requested by GDB. gdb/testsuite/ChangeLog: * gdb.threads/attach-slow-waitpid.c: New file. * gdb.threads/attach-slow-waitpid.exp: New file. * gdb.threads/slow-waitpid.c: New file.
2018-06-15[gdb] Add me to write-after-approval section in MAINTAINERSTom de Vries2-0/+5
I've committed one patch modifying gdb ([gdb/cli] Honour 'print pretty' when printing result of finish command) and I'm covered by the Novell blanket copyright assignment. So AFAIU, I qualify for write-after-approval. This patch adds me to the MAINTAINERS file in the write-after-approval section. 2018-06-15 Tom de Vries <tdevries@suse.de> * MAINTAINERS (Write After Approval): Add Tom de Vries.
2018-06-14update-gnulib.sh: Report required versions of autoconf/aclocalSimon Marchi2-2/+9
Update the messages printed when the wrong version of autoconf/aclocal is found to include the expected version too, like we already do for automake. gdb/ChangeLog: * gnulib/update-gnulib.sh: Print expected versions of autoconf/aclocal.
2018-06-14type alignment: Use type_length_unitsSimon Marchi3-2/+7
The type alignment value is returned in 8-bit-bytes instead of target memory addressable units. For example, on a target with 16-bit-bytes where sizeof(int) == 1 (one addressable unit), alignof(int) currently returns 2. After, this patch, it returns 1. gdb/ChangeLog: * arch-utils.c (default_type_align): Use type_length_units. * gdbtypes.c (type_align): Use type_length_units.
2018-06-14Fix "beneath" conversion on AIXSergio Durigan Junior1-1/+1
GDB build on AIX is broken according to BuildBot: ../../binutils-gdb/gdb/aix-thread.c: In member function 'virtual void aix_thread_target::mourn_inferior()': ../../binutils-gdb/gdb/aix-thread.c:1735:34: error: 'beneath' cannot be used as a function target_ops *beneath = beneath (); ^ This obvious commit fixes it. There's apparently another issue breaking the build there, but that's unrelated. gdb/ChangeLog: 2018-06-14 Sergio Durigan Junior <sergiodj@redhat.com> * aix-thread.c (aix_thread_target::xfer_partial): Use "beneath" as a method.
2018-06-14[gdb] Fixup incomplete patch 0dbfed25e9Tom de Vries1-1/+1
2018-06-14Fix/improve on-line help of 'define' command.Philippe Waroquiers2-1/+8
There is an inconsistency between the doc and the online help. => the doc is correct, so fixing/improving the on-line help. 2018-06-14 Philippe Waroquiers <philippe.waroquiers@skynet.be> * cli/cli-script.c (_initialize_cli_script): Fix online documentation of 'define' command.
2018-06-14[gdb] Add 'Concept Index' entry '&' for background executionTom de Vries2-0/+5
GDB's execution commands have a foreground and background variant: f.i., there's 'continue' and 'continue&', and both are listed individually in the 'Command, Variable, and Function Index'. But the '&' is not listed in the 'Concept Index' as being connected with the concept background execution. This patch adds an '&' in the 'Concept Index': ... * $_, $__, and value history: Memory. (line 119) +* &, background execution of commands: Background Execution. + (line 16) * --annotate: Mode Options. (line 121) ... pointing to this line in 'Background Execution': ... To specify background execution, add a '&' to the command. ... Build on x86_64. 2018-06-14 Tom de Vries <tdevries@suse.de> * gdb.texinfo (Background Execution): Add @cindex for '&'.
2018-06-14Avoid gdb.base/fork-running-state.exp lingering processesPedro Alves3-2/+53
Currently, the gdb.base/fork-running-state.exp testcase leaves a few processes lingering until a 3 minutes alarm kills them: pedro 28308 1 0 13:55 ? 00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state pedro 28340 1 0 13:55 ? 00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state pedro 28372 1 0 13:55 ? 00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state pedro 28400 1 0 13:55 ? 00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state pedro 28431 1 0 13:55 ? 00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state pedro 28463 1 0 13:55 ? 00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state Those processes used to kill themselves, but that was changed by commit f50d8a2eaea0 ("Fix gdb.base/fork-running-state.exp race"). This commit restores the self-killing, but only in the cases gdb won't try killing the processes, thus avoiding the old race. (The restored code in fork_parent isn't exactly the same as it was. In this version, we're exiting immediately when 'wait' returns success, while in the old version we'd loop again and end up in the perror call. The output from that perror call is not expected by the "kill inferior" tests, and would result in a test FAIL.) gdb/testsuite/ChangeLog: 2018-06-14 Pedro Alves <palves@redhat.com> * gdb.base/fork-running-state.c: Include <errno.h>. (exit_if_relative_exits): New. (fork_child): If 'exit_if_relative_exits' is true, exit if the parent exits. (fork_parent): If 'exit_if_relative_exits' is true, exit if the child exits.
2018-06-14[gdb/cli] Honour 'print pretty' when printing result of finish commandTom de Vries5-1/+91
Consider this testcase: ... struct s { int a; int b; }; struct s foo () { struct s r; r.a = 1; r.b = 2; return r; } int main (void) { struct s v; v = foo (); return v.a + v.b; } ... When we compile it with -g, load the exec with gdb, and run till the end of foo, we can print r: ... (gdb) p r $1 = {a = 1, b = 2} ... and by setting pretty printing to on, we can get the fields of r printed each on its own line: ... (gdb) set print pretty (gdb) p r $2 = { a = 1, b = 2 } ... However, when we finish foo, the printed function result value is not using the pretty printing setting: ... (gdb) finish Run till exit from #0 foo () at test.c:11 0x00000000004004c1 in main () at test.c:18 18 v = foo (); Value returned is $3 = {a = 1, b = 2} ... This patch fixes that by using get_user_print_options instead of get_no_prettyformat_print_options in print_return_value_1, which gives us: ... (gdb) finish Run till exit from #0 foo () at test.c:11 0x00000000004004c1 in main () at test.c:18 18 v = foo (); Value returned is $2 = { a = 1, b = 2 } ... Build & reg-tested on x86_64. 2018-06-14 Tom de Vries <tdevries@suse.de> PR cli/22573 * infcmd.c (print_return_value_1): Use get_user_print_options instead of get_no_prettyformat_print_options. * gdb.base/finish-pretty.c: New test. * gdb.base/finish-pretty.exp: New file.
2018-06-14Revert accidental push of "Inline breakpoints" commitPedro Alves3-49/+12
2018-06-14gdb.gdb/selftest.exp, Use multi_line to build gdb's expected startup outputPedro Alves2-1/+15
This regex had to be touched at least twice these past few days. Use multi_line to make it more readable. Note this also tightens the regex a little bit in some spots. gdb/testsuite/ChangeLog: 2018-06-14 Pedro Alves <palves@redhat.com> * gdb.gdb/selftest.exp (test_with_self): Use multi_line to build gdb's expected startup output.
2018-06-14Inline breakpointsPedro Alves3-12/+49
gdb/ChangeLog: yyyy-mm-dd Pedro Alves <palves@redhat.com> * inline-frame.c (stopped_by_user_bp_inline_frame): Replace PC parameter with a block parameter. Compare location's block symbol with the frame's block instead of addresses. (skip_inline_frames): Pass the current block instead of the frame's address. Break out as soon as we determine the frame should not be skipped. gdb/testsuite/ChangeLog: yyyy-mm-dd Pedro Alves <palves@redhat.com> * gdb.opt/inline-break.c (func_callee, func_caller): New. (main): Call func_caller.
2018-06-14Remove stale inline function handling from selftest_setupPedro Alves2-5/+5
Before commit 70ee000084aa ("[gdb] Allow function arguments in bp print match in selftest_setup"), this pattern in selftest_setup: -re "Starting program.*Breakpoint \[0-9\]+,.* at .*main.c:.*$function.*$gdb_prompt $" { # $function may be inlined, so the program stops at the line # calling $function. pass "$description" } happened to match if captured_main_1 was inlined and captured_main was not, because captured_main calls captured_main_1 first thing, which coincidentally matches "$function.*": Breakpoint 1, captured_main (data=<optimized out>) at src/gdb/main.c:1147 1147 captured_main_1 (context); That would probably be better "$function .*", with a space, but I think that even better is to remove the "may be inlined" case too now, because since ddfe970e6bec ("Don't elide all inlined frames") GDB presents the stop at the inline function instead of at the caller. gdb/testsuite/ChangeLog: 2018-06-14 Pedro Alves <palves@redhat.com> * lib/selftest-support.exp (selftest_setup): Remove inlined function handling.
2018-06-14[gdb] Allow function arguments in bp print match in selftest_setupTom de Vries2-2/+7
2018-06-14 Tom de Vries <tdevries@suse.de> * lib/selftest-support.exp (selftest_setup): Allow function arguments in matching of breakpoint printing.
2018-06-14[gdb/testsuite] Add missing ChangeLog entriesTom de Vries1-0/+11
2018-06-13Fix GDB sparc buildSimon Marchi3-4/+16
Cross-compiling for sparc64 bumped into a few issues, fixed by this patch. 1. Include target.h in sparc-nat.h fixes: /home/emaisin/src/binutils-gdb/gdb/sparc-nat.h:45:8: error: ‘target_xfer_status’ does not name a type extern target_xfer_status sparc_xfer_wcookie (enum target_object object, 2. Remove extra semi-colon at sparc64-linux-nat.c:40 fixes: /home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c:41:3: error: expected unqualified-id before ‘{’ token { sparc_store_inferior_registers (this, regcache, regnum); } 3. Remove "this" argument fixes: /home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c: In member function ‘virtual void sparc64_linux_nat_target::fetch_registers(regcache*, int)’: /home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c:38:59: error: cannot convert ‘sparc64_linux_nat_target*’ to ‘regcache*’ for argument ‘1’ to ‘void sparc_fetch_inferior_registers(regcache*, int)’ { sparc_fetch_inferior_registers (this, regcache, regnum); } ^ /home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c: In member function ‘virtual void sparc64_linux_nat_target::store_registers(regcache*, int)’: /home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c:41:59: error: cannot convert ‘sparc64_linux_nat_target*’ to ‘regcache*’ for argument ‘1’ to ‘void sparc_store_inferior_registers(regcache*, int)’ { sparc_store_inferior_registers (this, regcache, regnum); } ^ 4. Use sparc64_forget_process instead of sparc_forget_process fixes: /home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c: In member function ‘virtual void sparc64_linux_nat_target::low_forget_process(pid_t)’: /home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c:47:30: error: ‘sparc_forget_process’ was not declared in this scope { sparc_forget_process (pid); } ^ gdb/ChangeLog: * sparc-nat.h: Include target.h. * sparc64-linux-nat.c (class sparc64_linux_nat_target) <fetch_registers>: Remove this argument in function call. <store_registers>: Remove this argument in function call, remove extra semicolon. <low_forget_process>: Call sparc64_forget_process instead of sparc_forget_process.
2018-06-13[gdb/testsuite] Fix hang in fork-running-state.cTom de Vries1-3/+6
When I run make check: ... $ cd build/gdb $ make check 2>&1 | tee ../CHECKLOG.gdb ... I see after ~30m the summary of the test run printed, but make still hangs. This seems to be due to some sleeping processes: ... $ ps fx | grep fork-run 6475 ? S 0:00 gdb.base/fork-running-state/fork-running-state 6451 ? S 0:00 gdb.base/fork-running-state/fork-running-state 6427 ? S 0:00 gdb.base/fork-running-state/fork-running-state ... Killing the sleeping processes like this: ... kill -9 $(ps -A | grep fork-running-st | awk '{print $1}') ... allows make to finish. If I isolate one debug session from fork-running-state.exp that causes one of these sleeping processes, we get: ... (gdb) set non-stop on (gdb) break main Breakpoint 1 at 0x400665: file src/gdb/testsuite/gdb.base/fork-running-state.c, line 52. (gdb) run Starting program: build/gdb/testsuite/outputs/gdb.base/fork-running-state/ fork-running-state Breakpoint 1, main () at src/gdb/testsuite/gdb.base/fork-running-state.c:52 52 save_parent = getpid (); (gdb) set detach-on-fork on (gdb) set follow-fork parent (gdb) continue & Continuing. [Detaching after fork from child process 18797] (gdb) info threads Id Target Id Frame * 1 process 18793 "fork-running-st" (running) (gdb) set print inferior-events off (gdb) kill inferior 1 ... So, AFAIU, the hanging process is the child process that gdb detaches from. There's an alarm set in main before the fork, but alarms are not preserved in the fork child: ... $ man alarm ... NOTES Alarms created by alarm() are preserved across execve(2) and are not inherited by children created via fork(2). ... So, AFAIU, once the parent is killed, there's no alarm to terminate the child. The patch fixes this by moving the setting of the alarm into the fork_main/fork_child functions, making sure that an alarm will trigger for the child. Tested with make check on x86_64. 2018-06-13 Tom de Vries <tdevries@suse.de> PR testsuite/23269 * gdb.base/fork-running-state.c (main): Move setting of alarm ... (fork_child): ... here, and ... (fork_parent): ... here.
2018-06-13[gdb/testsuite] Update gdb startup text in selftest.expTom de Vries1-1/+1
Atm selftest.exp fails for me. One of the reasons is that in c61b06a19a34baab66e3809c7b41b0c31009ed9f (Remove some text from --version output) an eol was added after "There is NO WARRANTY, to the extent permitted by law". This patch updates the matching of the gdb startup message in selftest.exp accordingly. Tested selftest.exp (with two other selftest.exp related fixes applied). 2018-06-12 Tom de Vries <tdevries@suse.de> * gdb.gdb/selftest.exp (test_with_self): Update gdb startup text.
2018-06-13Fix procfs.c compilationRainer Orth2-11/+13
procfs.c currently doesn't compile on Solaris: /vol/src/gnu/gdb/gdb/local/gdb/procfs.c: In function `void _initialize_procfs()': /vol/src/gnu/gdb/gdb/local/gdb/procfs.c:3734:15: error: invalid initialization of reference of type `const target_info&' from expression of type `procfs_target*' add_target (&the_procfs_target); ^~~~~~~~~~~~~~~~~~ In file included from /vol/src/gnu/gdb/gdb/local/gdb/inferior.h:40, from /vol/src/gnu/gdb/gdb/local/gdb/procfs.c:24: /vol/src/gnu/gdb/gdb/local/gdb/target.h:2305:13: note: in passing argument 1 of `void add_target(const target_info&, void (*)(const char*, int), void (*)(cmd_list_element*, completion_tracker&, const char*, const char*))' extern void add_target (const target_info &info, ^~~~~~~~~~ /vol/src/gnu/gdb/gdb/local/gdb/procfs.c: In member function `virtual char* procfs_target::make_corefile_notes(bfd*, int*)': /vol/src/gnu/gdb/gdb/local/gdb/procfs.c:3898:16: error: too many arguments to function `gdb::optional<std::vector<unsigned char, gdb::default_init_allocator<unsigned char, std::allocator<unsigned char> > > > target_read_alloc(target_ops*, target_object, const char*)' NULL, &auxv); ^ In file included from /vol/src/gnu/gdb/gdb/local/gdb/inferior.h:40, from /vol/src/gnu/gdb/gdb/local/gdb/procfs.c:24: /vol/src/gnu/gdb/gdb/local/gdb/target.h:341:40: note: declared here extern gdb::optional<gdb::byte_vector> target_read_alloc ^~~~~~~~~~~~~~~~~ /vol/src/gnu/gdb/gdb/local/gdb/procfs.c:3898:16: error: cannot convert `gdb::optional<std::vector<unsigned char, gdb::default_init_allocator<unsigned char, std::allocator<unsigned char> > > >' to `int' in assignment NULL, &auxv); ^ Fixed as follows. Built and ran make check on 64-bit Solaris 11.5/x86 (amd64-pc-solaris2.11) only. * procfs.c (_initialize_procfs): Use add_inf_child_target. (procfs_target::make_corefile_notes): Adjust to new target_read_alloc return type.
2018-06-12gdb: Run INF_EXEC_COMPLETE handler for additional casesAndrew Burgess2-8/+16
When making an inferior call, and non-stop mode is off, then, once the inferior call is complete all threads will be stopped, and we should run the INF_EXEC_COMPLETE handler. This will result in a call to 'target_async(0)' to remove the event handlers for the target. This was discussed by Yao Qi in this mailing list thread: https://sourceware.org/ml/gdb/2017-10/msg00032.html Without this then the target event handlers are left in place even when the target is stopped, which is different to what happens during a standard stop proceedure (for example when one thread hits a breakpoint). gdb/ChangeLog: PR gdb/22882 * infrun.c (fetch_inferior_event): If GDB is not proceeding then run INF_EXEC_COMPLETE handler, even when not calling normal_stop. Move should_notify_stop local into more inner scope.
2018-06-12gdb: Mark async event handler when event is already pendingAndrew Burgess4-14/+20
In PR22882 inferior functions are called on different threads while scheduler-locking is turned on. This results in a hang. This was discussed in this mailing list thread: https://sourceware.org/ml/gdb/2017-10/msg00032.html The problem is that when the thread is set running in order to execute the inferior call, a call to target_async is made. If the target is not already registered as 'target_async' then this will install the async event handler, AND unconditionally mark the handler as having an event pending. However, if the target is already registered as target_async then the event handler is not installed (its already installed) and the handler is NOT marked as having an event pending. If we try to set running a thread that already has a pending event, then we do want to set target_async, however, there will not be an external event incoming (the thread is already stopped) so we rely on manually marking the event handler as having a pending event in order to see the threads pending stop event. This is fine, if, at the point where we call target_async, the target is not already marked as async. But, if it is, then the event handler will not be marked as ready, and the threads pending stop event will never be processed. A similar pattern of code can be seen in linux_nat_target::resume, where, when a thread has a pending event, the call to target_async is followed by a call to async_file_mark to ensure that the pending thread event will be processed, even if target_async was already set. gdb/ChangeLog: PR gdb/22882 * infrun.c (resume_1): Add call to mark_async_event_handler. gdb/testsuite/ChangeLog: * gdb.threads/multiple-successive-infcall.exp: Remove kfail case, rewrite test to describe action performed, rather than possible failure.
2018-06-12gdb: Fix an infrun debug log messageAndrew Burgess2-1/+5
Run the test gdb.threads/multiple-successive-infcall.exp by hand, if you turn on 'debug infrun 1', you'll see that the debug line fixed in this commit is printed and contains the wrong $pc value. Fixed in this commit. gdb/ChangeLog: * infrun.c (do_target_wait): Change old version of $pc printed.
2018-06-11Rename some functions, index -> gdb_indexSimon Marchi2-22/+29
Since we now have two index formats, DWARF5/debug_names and gdb_index, I wanted to rename some functions to make it clear that they deal with the gdb_index format specifically. gdb/ChangeLog: * dwarf2read.c (read_index_from_section): Rename to... (read_gdb_index_from_section): ... this, update all callers. (dwarf2_read_index): Rename to... (dwarf2_read_gdb_index): ... this, update all callers.
2018-06-11Fix gdb build on hppa-linuxJohn David Anglin2-2/+7
Fixes: CXX hppa-linux-nat.o ../../src/gdb/hppa-linux-nat.c:277:17: error: no 'void hppa_linux_nat_target::fetch_inferior_registers(regcache*, int)' member function declared in class 'hppa_linux_nat_target' int regno) ^ ../../src/gdb/hppa-linux-nat.c:224:1: error: 'void fetch_register(regcache*, int)' defined but not used [-Werror=unused-function] fetch_register (struct regcache *regcache, int regno) ^~~~~~~~~~~~~~ gdb/ChangeLog: * gdb/hppa-linux-nat.c (hppa_linux_nat_target::fetch_inferior_registers): Rename to hppa_linux_nat_target::fetch_registers.
2018-06-11Fix build of GDB documentation.Eli Zaretskii2-0/+5
gdb/doc/ChangeLog 2018-06-11 Eli Zaretskii <eliz@gnu.org> * gdb.texinfo (Maintenance Commands): Add a missing @anchor.
2018-06-11Enable Aarch64 SVE for gdbserverAlan Hayward6-14/+44
gdbserver/ * linux-aarch64-ipa.c (get_ipa_tdesc): Add null VQ param. (initialize_low_tracepoint): Likewise * linux-aarch64-low.c (aarch64_arch_setup): Get VQ. * linux-aarch64-tdesc-selftest.c (aarch64_tdesc_test): Add null VQ param. * linux-aarch64-tdesc.c (aarch64_linux_read_description): Add VQ checks. * linux-aarch64-tdesc.h (aarch64_linux_read_description): Add VQ.