aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2019-05-28Suppress SIGTTOU when handling errorsAlan Hayward6-31/+45
Calls to error () can cause SIGTTOU to send gdb to the background. For example, on an Arm build: (gdb) b main Breakpoint 1 at 0x10774: file /build/gdb/testsuite/../../../src/binutils-gdb/gdb/testsuite/gdb.base/watchpoint.c, line 174. (gdb) r Starting program: /build/gdb/testsuite/outputs/gdb.base/watchpoint/watchpoint [1]+ Stopped ../gdb ./outputs/gdb.base/watchpoint/watchpoint localhost$ fg ../gdb ./outputs/gdb.base/watchpoint/watchpoint Cannot parse expression `.L1199 4@r4'. warning: Probes-based dynamic linker interface failed. Reverting to original interface. The SIGTTOU is raised whilst inside a syscall during the call to tcdrain. Fix is to use scoped_ignore_sigttou to ensure SIGTTOU is blocked. In addition fix include comments - job_control is not included via terminal.h gdb/ChangeLog: * event-top.c: Remove include comment. * inflow.c (class scoped_ignore_sigttou): Move from here... * inflow.h (class scoped_ignore_sigttou): ...to here. * ser-unix.c (hardwire_drain_output): Block SIGTTOU during drain. * top.c: Remove include comment.
2019-05-27Fix typo in gdb/NEWSTom Tromey2-1/+5
I noticed a typo in gdb/NEWS. This fixes it. gdb/ChangeLog 2019-05-27 Tom Tromey <tom@tromey.com> * NEWS: Fix typo.
2019-05-24[gdb/testsuite] Add test-case for gdb-add-index.shTom de Vries2-0/+78
Add a test-case gdb.dwarf2/gdb-add-index.exp to test gdb/contrib/gdb-add-index.sh. Tested with x86_64-linux. gdb/testsuite/ChangeLog: 2019-05-24 Tom de Vries <tdevries@suse.de> * gdb.dwarf2/gdb-add-index.exp: New file.
2019-05-22Constify target_ops::follow_execTom Tromey6-12/+21
I noticed that target_ops::follow_exec took a "char *" parameter, where "const char *" would be more correct. This patch changes this (and related functions) to be constified. Tested by rebuilding. gdb/ChangeLog 2019-05-22 Tom Tromey <tromey@adacore.com> * target.c (target_follow_exec): Constify parameter. * target-delegates.c: Rebuild. * remote.c (remote_target::follow_exec): Constify parameter. * infrun.c (follow_exec): Constify parameter. * target.h (struct target_ops) <follow_exec>: Constify parameter. (target_follow_exec): Likewise.
2019-05-22Add "style" proc to the test suiteTom Tromey4-8/+35
This adds a "style" helper proc to the test suite, and updates existing style tests to use it. Thanks to Sergio for the idea. Tested on x86-64 Fedora 29. gdb/testsuite/ChangeLog 2019-05-22 Tom Tromey <tromey@adacore.com> * gdb.base/info-shared.exp (check_info_shared): Use "style". * gdb.base/style.exp: Use "style". * lib/gdb-utils.exp (style): New proc.
2019-05-22[gdb/testsuite] Require c++11 for gdb.base/align.expTom de Vries2-1/+9
When building gdb on ubuntu 16.04 with gcc 5.4.0, and running the gdb testsuite we run into a failure due align.exp requiring at least c++11. Fix this by adding -std=c++11. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-05-22 Tom de Vries <tdevries@suse.de> * gdb.base/align.exp: Require c++11.
2019-05-22[gdb/testsuite] Add missing mi_skip_python_tests to ↵Tom de Vries2-0/+9
py-mi-var-info-path-expression.exp Fix gdb.python/py-mi-var-info-path-expression.exp for a gdb build without python support. gdb/testsuite/ChangeLog: 2019-05-22 Tom de Vries <tdevries@suse.de> PR testsuite/24586 * gdb.python/py-mi-var-info-path-expression.exp: Call mi_skip_python_tests to check if python is supported.
2019-05-22AArch64: Treat pauth ops as nops on non-pauth systemsAlan Hayward5-1/+94
Running an address signed binary through GDB on a non pauth system gives the following error: Call Frame Instruction op 45 in vendor extension space is not handled on this architecture. Instead GDB should ignore the op, treating it as a nop. Add test case for pauth binaries, regardless of whether the target supports it. gdb/ChangeLog: * aarch64-tdep.c (aarch64_execute_dwarf_cfa_vendor_op): Treat DW_CFA_AARCH64_negate_ra_state as nop on non pauth targets. gdb/testsuite/ChangeLog: * gdb.arch/aarch64-pauth.c: New test. * gdb.arch/aarch64-pauth.exp: New file.
2019-05-22Document gdb.in/gdb.cmd files and debugredirect cli commandAlan Hayward6-0/+47
Add missing documentation for the debugredirect setting. Add description and uses of gdb.in/gdb.cmd to the testsuite README. Mention this in the NEWS file. gdb/ChangeLog: * NEWS: Add debugredirect and testsuite sections. gdb/doc/ChangeLog: * gdb.texinfo (Shell Commands): Add debugredirect. gdb/testsuite/ChangeLog: * README (Re-running Tests Outside The Testsuite): New section.
2019-05-22gdb/riscv: Improve flen length determinationSimon Cook2-1/+21
This solves an assertion failure when a remote provides a target description which only refers to floating point registers by their hardware name (e.g. f0), rather than their ABI name (e.g. ft0). GDB assumed that should the floating point register feature be presented, it would contain a register called ft0. The floating point length is now instead determined by searching for the same register, but looking for any of its aliases. gdb/ChangeLog: * riscv-tdep.c (riscv_gdbarch_init): Support determining flen from target descriptions using exclusively floating point register name aliases.
2019-05-22gdb/doc: Minor formatting fixes in documentation of -completeJan Vrany2-2/+6
gdb/doc/Changelog: * gdb.texinfo: Minor formatting fixes.
2019-05-21gdb/fortran: Handle gdbarch_floatformat_for_type returning nullptrAndrew Burgess2-2/+16
In this commit: commit 34d11c682fd96c7dbe3ebd6cd9033e65d51ec7a3 Date: Fri May 3 15:23:55 2019 +0100 gdb/fortran: Use floatformats_ia64_quad for fortran 16-byte floats GDB was changed such that the Fortran's 16-byte float format was obtained by calling gdbarch_floatformat_for_type instead of just using gdbarch_long_double_format as it was before. The problem with this default_floatformat_for_type can return NULL in some cases, and the code introduced in 34d11c682f didn't consider this. This commit introduces several alternative strategies for finding a suitable 16-byte floating point type. First GDB calls gdbarch_floatformat_for_type (this was what 34d11c682f added), if this returns null GDB will use gdbarch_long_double_format if it is the correct size (this was the format used before 34d11c682f). Finally, if neither of the above provides a suitable type then GDB will create a new dummy type. This final dummy type is unlikely to provide an correct debug experience as far as examining the 16-byte floats, but it should prevent GDB crashing. gdb/ChangeLog: PR gdb/18644: * f-lang.c (build_fortran_types): Handle the case where gdbarch_floatformat_for_type returns a nullptr.
2019-05-21[gdb/cli] Fix use of uninitialized variable in complete_commandTom de Vries2-2/+7
When building gdb on ubuntu 16.04 with gcc 5.4.0, and running the gdb testsuite we run into: ... FAIL: gdb.linespec/explicit.exp: complete after -line: \ cmd complete "b -line argument " (timeout) ... The failure is reproducible outside the testsuite like this: ... $ gdb -q build/gdb/testsuite/outputs/gdb.linespec/explicit/explicit \ -ex "complete b -line argument" Reading symbols from \ build/gdb/testsuite/outputs/gdb.linespec/explicit/explicit... terminate called after throwing an instance of 'std::length_error' what(): basic_string::_M_create Aborted (core dumped) ... The problem is here in complete_command: ... completion_result result = complete (arg, &word, &quote_char); std::string arg_prefix (arg, word - arg); if (result.number_matches != 0) ... The problem is that the word variable is not initialized when result.number_matches == 0, but the variable is still used in the arg_prefix initialization. Fix this by guarding the arg_prefix initialization with the 'result.number_matches != 0' test. Build and tested on x86_64-linux. gdb/ChangeLog: 2019-05-21 Tom de Vries <tdevries@suse.de> PR cli/24587 * cli/cli-cmds.c (complete_command): Fix use of unitialized variable.
2019-05-21[gdb/testsuite] Require c++11 where necessaryTom de Vries7-5/+20
When building gdb on ubuntu 16.04 with gcc 5.4.0, and running the gdb testsuite we run into failures due test-cases requiring at least c++1. Fix this by adding -std=c++11 to those test-cases. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-05-21 Tom de Vries <tdevries@suse.de> * gdb.arch/amd64-eval.exp: Require c++11. * gdb.base/max-depth.exp: Same. * gdb.compile/compile-cplus-array-decay.exp: Same. * gdb.cp/meth-typedefs.exp: Same. * gdb.cp/subtypes.exp: Same. * gdb.cp/temargs.exp: Same.
2019-05-21testsuite: Mark the kill in gdbserver_run as optionalAlan Hayward2-1/+5
This matches the kill in gdb_file_cmd, and ensures that the command is not sent to the gdb.in file. When gdb.in is used as a batch file, any kill commands run before the target is started will cause gdb to stop processing commands. gdb/testsuite/ChangeLog: * lib/gdbserver-support.exp (gdbserver_run): Mark kill as optional.
2019-05-18gdb/fortran: Use floatformats_ia64_quad for fortran 16-byte floatsAndrew Burgess8-11/+27
PR gdb/18644 is caused by GDB using the wrong floating point format for gfortran's 16-byte floating point type, including when the 16-byte float is used as the component of a 32-byte complex type. This commit addresses the issue in two places, first in i386-tdep.c, there is already some code to force the use of floatformats_ia64_quad for specific named types, this is extended to include the type names that gfortran uses for its 16-byte floats. Second, the builtin 16-byte float type (in f-lang.c) is changed so it no longer uses gdbarch_long_double_format. On i386 this type is not 16-bytes, but is smaller, this is not what gfortran is expecting. Instead we now use gdbarch_floatformat_for_type and ask for a 16-byte (128 bit) type using the common gfortran type name. This is then spotted in i386-tdep.c (thanks to the first change above) and we again get floatformats_ia64_quad returned. This patch was tested on X86-64/GNU-Linux using '--target_board=unix' and '--target_board=unix/-m32', and resolves all of the known failures associated with PR gdb/18644. I've also added the test case from the original bug report. gdb/ChangeLog: PR gdb/18644: * f-lang.c (build_fortran_types): Use floatformats_ia64_quad for 16-byte floats. * i386-tdep.c (i386_floatformat_for_type): Use floatformats_ia64_quad for the 16-byte floating point component within a fortran 32-byte complex number. gdb/testsuite/ChangeLog: PR gdb/18644 * gdb.fortran/complex.exp: Remove setup_kfail calls. * gdb.fortran/printing-types.exp: Add new test. * gdb.fortran/printing-types.f90: Add 16-byte real variable for testing. * gdb.fortran/type-kinds.exp (test_cast_1_to_type_kind): Remove setup_kfail call.
2019-05-18gdb: Add constructor to struct cu_partial_die_infoAndrew Burgess2-11/+26
Adds a constructor to 'struct cu_partial_die_info' and disables the default constructor, preventing partially initialised instances from being created. Update 'find_partial_die' to return a const struct. Users of 'find_partial_die' are updated to take account of the above two changes. There should be no user visible changes after this commit. gdb/ChangeLog: * dwarf2read.c (struct cu_partial_die_info): Add constructor, delete default constructor. (find_partial_die): Update to return const struct. (partial_die_parent_scope): Move variable declaration into scope of its use and change its type to auto. (guess_partial_die_structure_name): Likewise. (partial_die_info::fixup): Likewise.
2019-05-17Don't cast away const in find_and_open_sourceTom Tromey2-3/+5
find_and_open_source casts away const, but hasn't needed to in a while. This removes the cast and a strangely hostile comment. gdb/ChangeLog 2019-05-17 Tom Tromey <tromey@adacore.com> * source.c (find_and_open_source): Remove cast.
2019-05-17Constify annotate_sourceTom Tromey3-2/+7
I noticed that annotate_source takes a "char *", but really should take a "const char *". This patch fixes this. gdb/ChangeLog 2019-05-17 Tom Tromey <tromey@adacore.com> * annotate.c (annotate_source): Make "filename" const. * annotate.h (annotate_source): Use const.
2019-05-17testsuite: Remove TRANSCRIPT supportAlan Hayward3-68/+8
TRANSCRIPT is superseeded by the .in, .cmd and .debug files, and can be removed. gdb/testsuite/ChangeLog * README (Running the Testsuite): Change example. (Testsuite Parameters): Remove TRANSCRIPT. * lib/gdb.exp: Remove TRANSCRIPT check.
2019-05-17testsuite: Add replay logging to GDBSERVER_DEBUGAlan Hayward3-21/+68
Add "replay" to the list of GDBSERVER_DEBUG options. This will cause a gdbserver.replay file to be written to the test output directory. At the same time switch this to a comma separated list in order to easily handle all possible options. The replay log is created by GDB, but has been added to GDBSERVER_DEBUG as it is only required for gdbserver tests. To enable it, the gdb_debug_init is overridden to allow the additional checking, before calling the original function. gdb/testsuite/ChangeLog: * README (Testsuite Parameters): Add replay logging to GDBSERVER_DEBUG. (gdbserver,debug): Refer to GDBSERVER_DEBUG. * lib/gdbserver-support.exp (gdbserver_start): Treat gdbserverdebug as a comma separated list. (gdb_debug_init): Override procedure.
2019-05-17testsuite: Create .cmd files for gdb and gdbserverAlan Hayward3-0/+29
When spawning gdb or gdbserver create a .cmd file in the test output directory containing the full command line, ensuring the current gdb instance is appended to the files so that they can be quickly matched to the corresponding gdb.in file. gdb/testsuite/ChangeLog: * lib/gdb.exp (default_gdb_spawn): Call gdb_write_cmd_file. (gdb_write_cmd_file): New procedure. * lib/gdbserver-support.exp (gdbserver_start): Call gdbserver_write_cmd_file. (gdbserver_write_cmd_file): New proedure.
2019-05-17testsuite: Record all gdb input to gdb.inAlan Hayward2-18/+106
When debugging testsuite failures, it can be awkward parsing gdb.log to obtain all the commands run in order to manually re-run the test. This patch adds the functionality to save all gdb commands to the file gdb.in when the testsuite is run. The file is saved in the directory for the test and if gdb is restarted then .1, .2, .3 etc is added to the filename. Once a test has been run, the .in file can be used to re-run the test in the following way: gdb -x outputs/gdb.store/gdb.in outputs/gdb.store/store The code works by intercepting send_gdb. I've added a TYPE to ensure that any commands that would destroy the playback are kept from the log (for example the Y from an answer to a y/n question). Adds library function standard_output_file_with_gdb_instance to open a file postfixed with count of the gdb instance. Ensure this count is reset when a new .exp script is run. I've re-run a random selection of .in files to check they do not error. Logs with commands such as "attach <pid>" will not directly work when re-run. gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_unload): Mark Y as an answer. (delete_breakpoints): Likewise. (gdb_run_cmd): Likewise. (gdb_start_cmd): Likewise. (gdb_starti_cmd): Likewise. (gdb_internal_error_resync): Likewise. (gdb_test_multiple): Likewise. (gdb_reinitialize_dir): Likewise. (default_gdb_exit): Likewise. (gdb_file_cmd): Mark kill as optional. (default_gdb_start): Call gdb_stdin_log_init. (send_gdb): Call gdb_stdin_log_write. (rerun_to_main): Mark Y as an answer. (gdb_stdin_log_init): New function. (gdb_stdin_log_write): Likewise.
2019-05-17testsuite: Disable some tests when loggingAlan Hayward22-14/+165
Fix up all failures encountered when running the testsuite with GDB_DEBUG="infrun". Some tests rely on enabling debugging for various components. With debugging on, this will be lost to the debug file. Disable separate tty for mi tests when debugging. This currently does not work. disasm.c should send errors to the stderr instead of the logfile. Note that enabling debug for other components might still cause additional errors above what has been fixed here. gdb/ChangeLog: * disasm.c (set_disassembler_options): Send errors to stderr. gdb/testsuite/ChangeLog: * gdb.base/breakpoint-in-ro-region.exp: Disable when debugging. * gdb.base/debug-expr.exp: Likewise. * gdb.base/foll-fork.exp: Likewise. * gdb.base/foll-vfork.exp: Likewise. * gdb.base/fork-print-inferior-events.exp: Likewise. * gdb.base/gdb-sigterm.exp: Likewise. * gdb.base/gdbinit-history.exp: Likewise. * gdb.base/osabi.exp: Likewise. * gdb.base/sss-bp-on-user-bp-2.exp: Likewise. * gdb.base/ui-redirect.exp: Likewise. * gdb.gdb/unittest.exp: Likewise. * gdb.mi/mi-break.exp: Disable separate-mi-tty when debugging. * gdb.mi/mi-watch.exp: Likewise. * gdb.mi/new-ui-mi-sync.exp: Likewise. * gdb.mi/user-selected-context-sync.exp: Likewise. * gdb.python/python.exp: Disable debug test when debugging. * gdb.threads/check-libthread-db.exp: Disable when debugging. * gdb.threads/signal-while-stepping-over-bp-other-thread.exp: Likewise. * gdb.threads/stepi-random-signal.exp: Likewise.
2019-05-17testsuite: Add option to capture GDB debugAlan Hayward4-1/+92
Add both board option and environment variable which enables gdb debug via a comma separated list and sends it to the file gdb.debug, located in the output directory for the current test. Document this. Add support for the environment variable in the Makefile. The testsuite can be run with gdb debug enabled in the following way: make check GDB_DEBUG="infrun,target,remote" A Test with multiple invocations of GDB will all append debug to the same log file. gdb/testsuite/ChangeLog: * Makefile.in: Pass through GDB_DEBUG. * README (Testsuite Parameters): Add GDB_DEBUG. (gdb,debug): Add board setting. * lib/gdb.exp (default_gdb_start): Start debugging. (gdb_debug_enabled): New procedure. (gdb_debug_init): Likewise.
2019-05-17Add debug redirect optionAlan Hayward10-33/+140
Currently, when logging is enabled, output will be sent to both a logfile and standard terminal output. The redirect option sends output only to the logfile. This includes all debug output. Add the option to redirect debug output seperately to normal output, using the cli command: set logging debugredirect on By setting this and enabling logging, all output and debug will be sent to the logfile. The user will still see all output but no debug output. This causes a change in behaviour for anyone currently using logging redirect, as now only output will be redirected. Users will have to issue the additional command above to also redirect debug. Expand ui-redirect.exp cover the changes. gdb/ChangeLog: * cli/cli-interp.c (struct saved_output_files): Add saved entry. (cli_interp_base::set_logging): Check debug_redirect. * cli/cli-interp.h (set_logging): Add debug_redirect parameter. * cli/cli-logging.c (debug_redirect): Add static variable. (pop_output_files): Add default param. (handle_redirections): Print debug setting. (show_logging_command): Likewise. (_initialize_cli_logging): Add debugredirect command. * interps.c (current_interp_set_logging): Add debug_redirect parameter. * interps.h (set_logging): Add debug_redirect parameter. (current_interp_set_logging): Likewise. * mi/mi-common.h: Likewise. * mi/mi-interp.c (mi_interp::set_logging): Likewise. gdb/testsuite/ChangeLog: * gdb.base/ui-redirect.exp: Add debug redirect tests.
2019-05-17Change file close behavior for tee_fileAlan Hayward9-75/+86
Instead of using two bools to decide if the files should close when tee_file is closed, make file one stay open and file two close. This simplifies the use cases for it. Inline the make_logging_output into the calling functions (the logic here looks ugly in order to simplify a later change). Expand ui-redirect.exp to cover the changes, similar to mi-logging.exp. gdb/ChangeLog: * cli/cli-interp.c (cli_interp_base::set_logging): Create tee_file directly. * cli/cli-interp.h (make_logging_output): Remove declaration. * cli/cli-logging.c (make_logging_output): Remove function. * mi/mi-interp.c (mi_interp::set_logging): Create tee_file directly. * ui-file.c (tee_file::tee_file): Remove bools. (tee_file::~tee_file): Remove deletes. * ui-file.h (tee_file): Remove bools. gdb/testsuite/ChangeLog: * gdb.base/ui-redirect.exp: Test redirection.
2019-05-17MI: Add new command -completeJan Vrany10-0/+248
There is a CLI command 'complete' intended to use with emacs. Such a command would also be useful for MI frontends, when separate CLI and MI channels cannot be used. For example, on Windows (because of lack of PTYs) or when GDB is used through SSH session. This commit adds a new '-complete' MI command. gdb/Changelog: 2019-01-28 Jan Vrany <jan.vrany@fit.cvut.cz> * mi/mi-cmds.h (mi_cmd_complete): New function. * mi/mi-main.c (mi_cmd_complete): Likewise. * mi/mi-cmds.c: Define new MI command -complete. * NEWS: Mention new -complete command. gdb/doc/ChangeLog: 2019-01-28 Jan Vrany <jan.vrany@fit.cvut.cz> * gdb.texinfo (Miscellaneous GDB/MI Commands): Document new MI command -complete. gdb/testsuite/ChangeLog: 2019-01-28 Jan Vrany <jan.vrany@fit.cvut.cz> * gdb.mi/mi-complete.exp: New file. * gdb.mi/mi-complete.cc: Likewise.
2019-05-17MI: extract command completion logic from complete_command()Jan Vrany4-28/+50
Extract completion logic from CLI complete_command() into a new helper function complete(). gdb/Changelog: * completer.h (complete): New function. * completer.c (complete): Likewise. * cli/cli-cmds.c: (complete_command): Update to use new complete() function defined in completer.h.
2019-05-17Add myself to gdb/MAINTAINERSJan Vrany2-0/+5
gdb/Changelog: * MAINTAINERS (Write After Approval): Add myself.
2019-05-17[gdb] Fix heap-use-after-free in typename_concatTom de Vries2-10/+40
When running gdb using AddressSanitizer, and loading a cc1plus binary built with profiledbootstrap and -flto, we run into a heap-use-after-free error: ... $ LD_PRELOAD=/usr/lib64/libasan.so.3 ./gdb -batch cc1plus ==26855==ERROR: AddressSanitizer: heap-use-after-free on address \ 0x62100ad8a8b0 at pc 0x7f13803cc9e3 bp 0x7ffe55b0d090 sp 0x7ffe55b0c840 READ of size 47 at 0x62100ad8a8b0 thread T0 #0 0x7f13803cc9e2 (/usr/lib64/libasan.so.3+0x3e9e2) #1 0x5e7a0d in typename_concat gdb/dwarf2read.c:22661 #2 0x5c6437 in partial_die_full_name gdb/dwarf2read.c:8876 #3 0x5c6555 in add_partial_symbol gdb/dwarf2read.c:8893 #4 0x5c6ecf in add_partial_subprogram gdb/dwarf2read.c:9156 #5 0x5c5e90 in scan_partial_symbols gdb/dwarf2read.c:8668 #6 0x5c6c0a in add_partial_namespace gdb/dwarf2read.c:9081 #7 0x5c5f99 in scan_partial_symbols gdb/dwarf2read.c:8702 #8 0x5c48b6 in process_psymtab_comp_unit_reader gdb/dwarf2read.c:8056 #9 0x5c3c1f in init_cutu_and_read_dies gdb/dwarf2read.c:7689 #10 0x5c4c03 in process_psymtab_comp_unit gdb/dwarf2read.c:8140 #11 0x5c58a2 in dwarf2_build_psymtabs_hard gdb/dwarf2read.c:8500 #12 0x5c0d03 in dwarf2_build_psymtabs(objfile*) gdb/dwarf2read.c:6337 #13 0x612359 in read_psyms gdb/elfread.c:1311 #14 0x798a64 in require_partial_symbols(objfile*, int) gdb/psymtab.c:115 #15 0x867d7b in read_symbols gdb/symfile.c:821 #16 0x8683d9 in syms_from_objfile_1 gdb/symfile.c:1000 #17 0x8684a1 in syms_from_objfile gdb/symfile.c:1017 #18 0x868873 in symbol_file_add_with_addrs gdb/symfile.c:1124 #19 0x868b0a in symbol_file_add_from_bfd(bfd*, char const*, \ enum_flags<symfile_add_flag>, std::vector<other_sections, \ std::allocator<other_sections> >*, \ enum_flags<objfile_flag>, objfile*) gdb/symfile.c:1204 #20 0x868b64 in symbol_file_add(char const*, \ enum_flags<symfile_add_flag>, \ std::vector<other_sections, \ std::allocator<other_sections> >*, \ enum_flags<objfile_flag>) gdb/symfile.c:1217 #21 0x868c39 in symbol_file_add_main_1 gdb/symfile.c:1240 #22 0x868bd0 in symbol_file_add_main(char const*, \ enum_flags<symfile_add_flag>) gdb/symfile.c:1231 #23 0x71f1b2 in symbol_file_add_main_adapter gdb/main.c:395 #24 0x71f10e in catch_command_errors gdb/main.c:372 #25 0x71ff5f in captured_main_1 gdb/main.c:1043 #26 0x72045d in captured_main gdb/main.c:1163 #27 0x7204c8 in gdb_main(captured_main_args*) gdb/main.c:1188 #28 0x40fd7d in main gdb/gdb.c:32 #29 0x7f137e300f49 in __libc_start_main (/lib64/libc.so.6+0x20f49) #30 0x40fc89 in _start (/data/gdb_versions/devel/build/gdb/gdb+0x40fc89) 0x62100ad8a8b0 is located 944 bytes inside of 4064-byte region \ [0x62100ad8a500,0x62100ad8b4e0) freed by thread T0 here: #0 0x7f13804523a0 in __interceptor_free (/usr/lib64/libasan.so.3+0xc43a0) #1 0x435e44 in xfree<void> gdb/common/common-utils.h:60 #2 0xa82c25 in call_freefun libiberty/obstack.c:103 #3 0xa83098 in _obstack_free libiberty/obstack.c:280 #4 0x4367da in auto_obstack::~auto_obstack() gdb/gdb_obstack.h:101 #5 0x5ed72c in dwarf2_cu::~dwarf2_cu() gdb/dwarf2read.c:25341 #6 0x5fb5bb in std::default_delete<dwarf2_cu>::operator()(dwarf2_cu*) const \ /usr/include/c++/7/bits/unique_ptr.h:78 #7 0x5f7334 in std::unique_ptr<dwarf2_cu, \ std::default_delete<dwarf2_cu> >::~unique_ptr() \ /usr/include/c++/7/bits/unique_ptr.h:268 #8 0x5c3ce5 in init_cutu_and_read_dies gdb/dwarf2read.c:7624 #9 0x5c4c03 in process_psymtab_comp_unit gdb/dwarf2read.c:8140 #10 0x5c58a2 in dwarf2_build_psymtabs_hard gdb/dwarf2read.c:8500 #11 0x5c0d03 in dwarf2_build_psymtabs(objfile*) gdb/dwarf2read.c:6337 #12 0x612359 in read_psyms gdb/elfread.c:1311 #13 0x798a64 in require_partial_symbols(objfile*, int) gdb/psymtab.c:115 #14 0x867d7b in read_symbols gdb/symfile.c:821 #15 0x8683d9 in syms_from_objfile_1 gdb/symfile.c:1000 #16 0x8684a1 in syms_from_objfile gdb/symfile.c:1017 #17 0x868873 in symbol_file_add_with_addrs gdb/symfile.c:1124 #18 0x868b0a in symbol_file_add_from_bfd(bfd*, char const*, \ enum_flags<symfile_add_flag>, std::vector<other_sections, \ std::allocator<other_sections> >*, \ enum_flags<objfile_flag>, objfile*) gdb/symfile.c:1204 #19 0x868b64 in symbol_file_add(char const*, \ enum_flags<symfile_add_flag>, std::vector<other_sections, \ std::allocator<other_sections> >*, \ enum_flags<objfile_flag>) gdb/symfile.c:1217 #20 0x868c39 in symbol_file_add_main_1 gdb/symfile.c:1240 #21 0x868bd0 in symbol_file_add_main(char const*, \ enum_flags<symfile_add_flag>) gdb/symfile.c:1231 #22 0x71f1b2 in symbol_file_add_main_adapter gdb/main.c:395 #23 0x71f10e in catch_command_errors gdb/main.c:372 #24 0x71ff5f in captured_main_1 gdb/main.c:1043 #25 0x72045d in captured_main gdb/main.c:1163 #26 0x7204c8 in gdb_main(captured_main_args*) gdb/main.c:1188 #27 0x40fd7d in main gdb/gdb.c:32 #28 0x7f137e300f49 in __libc_start_main (/lib64/libc.so.6+0x20f49) previously allocated by thread T0 here: #0 0x7f13804526b8 in __interceptor_malloc (/usr/lib64/libasan.so.3+0xc46b8) #1 0x5114b5 in xmalloc gdb/common/common-utils.c:44 #2 0xa82bd5 in call_chunkfun libiberty/obstack.c:94 #3 0xa82eda in _obstack_newchunk libiberty/obstack.c:206 #4 0x477310 in allocate_on_obstack::operator new(unsigned long, obstack*) \ gdb/gdb_obstack.h:117 #5 0x5dea8c in load_partial_dies gdb/dwarf2read.c:18571 #6 0x5c487f in process_psymtab_comp_unit_reader gdb/dwarf2read.c:8054 #7 0x5c3c1f in init_cutu_and_read_dies gdb/dwarf2read.c:7689 #8 0x5c4c03 in process_psymtab_comp_unit gdb/dwarf2read.c:8140 #9 0x5c58a2 in dwarf2_build_psymtabs_hard gdb/dwarf2read.c:8500 #10 0x5c0d03 in dwarf2_build_psymtabs(objfile*) gdb/dwarf2read.c:6337 #11 0x612359 in read_psyms gdb/elfread.c:1311 #12 0x798a64 in require_partial_symbols(objfile*, int) gdb/psymtab.c:115 #13 0x867d7b in read_symbols gdb/symfile.c:821 #14 0x8683d9 in syms_from_objfile_1 gdb/symfile.c:1000 #15 0x8684a1 in syms_from_objfile gdb/symfile.c:1017 #16 0x868873 in symbol_file_add_with_addrs gdb/symfile.c:1124 #17 0x868b0a in symbol_file_add_from_bfd(bfd*, char const*, \ enum_flags<symfile_add_flag>, \ std::vector<other_sections, \ std::allocator<other_sections> >*, \ enum_flags<objfile_flag>, objfile*) gdb/symfile.c:1204 #18 0x868b64 in symbol_file_add(char const*, enum_flags<symfile_add_flag>, \ std::vector<other_sections, \ std::allocator<other_sections> >*, \ enum_flags<objfile_flag>) gdb/symfile.c:1217 #19 0x868c39 in symbol_file_add_main_1 gdb/symfile.c:1240 #20 0x868bd0 in symbol_file_add_main(char const*, \ enum_flags<symfile_add_flag>) gdb/symfile.c:1231 #21 0x71f1b2 in symbol_file_add_main_adapter gdb/main.c:395 #22 0x71f10e in catch_command_errors gdb/main.c:372 #23 0x71ff5f in captured_main_1 gdb/main.c:1043 #24 0x72045d in captured_main gdb/main.c:1163 #25 0x7204c8 in gdb_main(captured_main_args*) gdb/main.c:1188 #26 0x40fd7d in main gdb/gdb.c:32 #27 0x7f137e300f49 in __libc_start_main (/lib64/libc.so.6+0x20f49) ... This error happens as follows. The function find_partial_die has a cu argument, but returns a pdi which may or may not be from that cu: ... /* Find a partial DIE at OFFSET, which may or may not be in CU, except in the case of .debug_types DIEs which do not reference outside their CU (they do however referencing other types via DW_FORM_ref_sig8). */ static struct partial_die_info * find_partial_die (sect_offset sect_off, int offset_in_dwz, struct dwarf2_cu *cu) ... So the pdi returned by find_partial_die here in partial_die_parent_scope may be from another cu: ... partial_die_parent_scope (struct partial_die_info *pdi, struct dwarf2_cu *cu) { const char *grandparent_scope; struct partial_die_info *parent, *real_pdi; /* We need to look at our parent DIE; if we have a DW_AT_specification, then this means the parent of the specification DIE. */ real_pdi = pdi; while (real_pdi->has_specification) real_pdi = find_partial_die (real_pdi->spec_offset, real_pdi->spec_is_dwz, cu); parent = real_pdi->die_parent; ... in which case both real_pdi and parent will be not from cu, but from another one, say cu2. Subsequently, cu's comp_unit_obstack is used to set parent->scope: ... parent->scope = typename_concat (&cu->comp_unit_obstack, grandparent_scope, parent->name, 0, cu); ... So, we use cu->comp_unit_obstack to assign a value to the scope field of a pdi belonging to cu2, and when cu is deleted, the scope field points to a freed value. Fix this by making find_partial_die return the cu corresponding to the returned pdi, and handling this at the call sites. Tested on x86_64-linux. gdb/ChangeLog: 2019-05-17 Tom de Vries <tdevries@suse.de> PR gdb/24094 * dwarf2read.c (struct cu_partial_die_info): New struct. (find_partial_die): Return cu_partial_die_info. (partial_die_parent_scope, guess_partial_die_structure_name) (partial_die_info::fixup): Handle new return type of find_partial_die.
2019-05-16Make stap-probe.c:stap_parse_register_operand's "regname" an std::stringSergio Durigan Junior2-24/+17
This patch simplifies the code of stap-probe.c:stap_parse_register_operand by making "regname" an std::string. No functionality change. I'm this code's maintainer, so I'm pushing this as it's a fairly trivial patch. gdb/ChangeLog: 2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> * stap-probe.c (stap_parse_register_operand): Make "regname" an "std::string", simplifying the algorithm.
2019-05-16Fix complaint string formatting on stap-probe.cSergio Durigan Junior2-8/+10
I think the string formatting for complaints was messed up by Tom's patch to simplify the complaint mechanism. This small and trivial patch fixes them. Pushed as obvious. gdb/ChangeLog: 2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> * stap-probe.c (handle_stap_probe): Fix complaint formatting. (stap_static_probe_ops::get_probes): Likewise.
2019-05-16Slightly improve logic of some operations on stap-probe.cSergio Durigan Junior2-11/+20
This patch contains three very small improvement on the logic of some operations we do on stap-probe.c. They don't change what the code does. Pushed as obvious. gdb/ChangeLog: 2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> * stap-probe.c (stap_parse_register_operand): Make "if (*p->arg == '-')" and "else if". (stap_parse_single_operand): Join checks for "gdbarch_stap_parse_special_token_p" and "gdbarch_stap_parse_special_token" in the same "if" statement. Invert check when verifying for operation on register displacement.
2019-05-16Update some comments on stap-probe.cSergio Durigan Junior2-7/+12
Some functions's comments were not entirely correct on stap-probe.c, so this patch updates them. Pushed as obvious. gdb/ChangeLog: 2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> * stap-probe.c (stap_get_opcode): Update comment. (stap_get_expected_argument_type): Likewise. (handle_stap_probe): Likewise.
2019-05-16Bool-ify stap-probe.c and stap-related code on i386-tdep.cSergio Durigan Junior3-80/+103
This simple patch converts a bunch of "int"s to "bool" on stap-probe.c and on the stap-related code present on i386-tdep.c. Pushed as obvious (+ I'm the maintainer of this code). gdb/ChangeLog: 2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> * i386-tdep.c (i386_stap_parse_special_token_triplet): Change return type to 'bool'. Adjust comment. Use 'bool' when appropriate. (i386_stap_parse_special_token_three_arg_disp): Likewise. * stap-probe.c (stap_parse_argument_1): Likewise. (stap_is_operator): Likewise. (stap_is_generic_prefix): Likewise. (stap_is_register_prefix): Likewise. (stap_is_register_indirection_prefix): Likewise. (stap_is_integer_prefix): Likewise. (stap_generic_check_suffix): Likewise. (stap_check_integer_suffix): Likewise. (stap_check_register_suffix): Likewise. (stap_check_register_indirection_suffix): Likewise. (stap_parse_register_operand): Likewise. (stap_parse_single_operand): Likewise. (stap_parse_argument_1): Likewise. (stap_probe::get_argument_count): Likewise. (stap_is_operator): Likewise.
2019-05-16Fix darwin-nat.c buildTom Tromey2-1/+6
John Marshall pointed out that darwin-nat.c fails to build: CXX darwin-nat.o ../../../binutils-gdb/gdb/darwin-nat.c:1709:8: error: must use 'class' tag to refer to type 'thread_info' in this scope for (thread_info *it : all_threads ()) /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/thread_act.h:240:15: note: class 'thread_info' is hidden by a non-type declaration of 'thread_info' here kern_return_t thread_info Mach has a thread_info() function declared in that header, which darwin-nat.c #includes. This patch fixes the problem by reintroducing the struct keyword. gdb/ChangeLog 2019-05-16 Tom Tromey <tromey@adacore.com> * darwin-nat.c (thread_info_from_private_thread_info): Add struct keyword to foreach.
2019-05-15gdb/fortran: Add sizeof tests for indexed and sliced arraysAndrew Burgess2-4/+24
Add tests for calling sizeof on indexed and sliced arrays, and on pointers to arrays. These are all things that currently work, but were previously untested. gdb/testsuite/ChangeLog: * gdb.fortran/vla-sizeof.exp: Add tests of sizeof applied to indexed and sliced arrays, and pointers to arrays.
2019-05-15linux-thread-db.c: use bool where possible in thread_db codeSimon Marchi2-41/+54
I happened to be looking at this code and noticed we could replace ints by bools at a few places. gdb/ChangeLog: * linux-thread-db.c (try_thread_db_load_1): Change return type to bool. (try_thread_db_load): Likewise. (try_thread_db_load_from_pdir_1): Likewise. (try_thread_db_load_from_pdir): Likewise. (try_thread_db_load_from_sdir): Likewise. (try_thread_db_load_from_dir): Likewise. (thread_db_load_search): Likewise. (has_libpthread): Likewise. (thread_db_load): Likewise.
2019-05-15Don't crash if dwarf_decode_macro_bytes's 'body' is NULLSergio Durigan Junior2-1/+24
Hi, Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192 https://bugzilla.redhat.com/show_bug.cgi?id=1708786 During the Fedora RPM build process, gdb-add-index is invoked to extract the DWARF index from the binary, and GDB will segfault because dwarf2read.c:parse_definition_macro's 'body' variable is NULL. The underlying problem is that Fedora's rpm-build's "debugedit" program will silently corrupt .debug_macro strings when a binary is compiled with -g3. This is being taken care of by Mark Wielaard, here: https://bugzilla.redhat.com/show_bug.cgi?id=1708786 However, I still feel it's important to make GDB more resilient against invalid DWARF input, so I'm proposing this rather simple patch to catch the situation when "body == NULL" (i.e., it's probably been corrupted) and issue a complaint. This is not a real fix to the problem, of course, but at least GDB is able to finish without segfaulting. OK for master? gdb/ChangeLog: 2019-05-15 Sergio Durigan Junior <sergiodj@redhat.com> Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192 * dwarf2read.c (dwarf_decode_macro_bytes): Check whether 'body' is NULL, and complain if that's the case.
2019-05-15GDB (s12z): Improve reliability of the stack unwinder.John Darrington2-63/+178
Previously, the stack unwinder searched through consecutive bytes for values which it thought might be the start of a stack mutating operation. This was error prone, because such bytes could also be the operands of other instructions. This change uses the opcodes api to interpret the code in each frame. gdb/ChangeLog: * s12z-tdep.c (push_pull_get_stack_adjustment): New function. (advance, posn, abstract_read_memory): New functions. [struct mem_read_abstraction]: New struct. (s12z_frame_cache): Use opcodes API to interpret stack frame code.
2019-05-14Fix assertion failure in coerce_unspec_val_to_typeTom Tromey2-1/+7
coerce_unspec_val_to_type does: set_value_address (result, value_address (val)); However, this is only valid for lval_memory. This patch changes this code to only set the address for lval_memory values. This seems like an ordinary oversight in coerce_unspec_val_to_type, and a test case would be difficult to write, so I'm submitting it without a test case. Tested on x86-64 Fedora 29; plus using an Ada program that exhibits the bug (but which cannot be shared). gdb/ChangeLog 2019-05-14 Tom Tromey <tromey@adacore.com> * ada-lang.c (coerce_unspec_val_to_type): Only set address when value is not lval_memory.
2019-05-14[gdb/doc] Mention index cache in concept and command indexTom de Vries2-0/+8
The "automatic symbol index cache" entry in the docs is missing entries in the concept and command indices. Add them. gdb/doc/ChangeLog: 2019-05-14 Tom de Vries <tdevries@suse.de> * gdb.texinfo (Automatic symbol index cache): Add concept and command index entries.
2019-05-14Add file name styling to "info sharedlibrary"Tom Tromey4-1/+34
This changes "info sharedlibrary" to add styling to the file name. Tested on x86-64 Fedora 29. gdb/ChangeLog 2019-05-14 Tom Tromey <tromey@adacore.com> * solib.c (info_sharedlibrary_command): Style the file name. gdb/testsuite/ChangeLog 2019-05-14 Tom Tromey <tromey@adacore.com> * gdb.base/info-shared.exp (check_info_shared): Add "info shared" styling test.
2019-05-14AArch64: Add half float view to V registersAlan Hayward10-0/+43
AArch64 can fill the vector registers with half precision floats. Add a view for this. Add builtin type ieee half and connect this to the existing floatformats_ieee_half. gdb/ChangeLog: 2019-05-14 Alan Hayward <alan.hayward@arm.com> * aarch64-tdep.c (aarch64_vnh_type): Add half view. (aarch64_vnv_type): Likewise. * target-descriptions.c (make_gdb_type): Add TDESC_TYPE_IEEE_HALF. * common/tdesc.c: Likewise. * common/tdesc.h (enum tdesc_type_kind): Likewise. * features/aarch64-fpu.c (create_feature_aarch64_fpu): Regenerate. * features/aarch64-fpu.xml: Add ieee half view. * features/aarch64-sve.c (create_feature_aarch64_fpu): Likewise. * gdbtypes.c (gdbtypes_post_init): Add builtin_half * gdbtypes.h (struct builtin_type): Likewise. (struct objfile_type): Likewise.
2019-05-14[gdb/testsuite] Fix base address selection entry encoding in dw2-skip-prologue.STom de Vries2-1/+6
A base address selection entry in a location list consist of two (constant or relocated) address offsets. The two offsets are the same size as an address on the target machine. The test-case gdb.dwarf2/dw2-skip-prologue.S encodes a base address selection entry using .4byte, which is incorrect for 8-byte pointer size. [ Which triggers an assert in dwz, see PR dwz/24172. ] Fix this by using PTRBYTE instead. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-05-14 Tom de Vries <tdevries@suse.de> * gdb.dwarf2/dw2-skip-prologue.S (.debug_loc): Fix base address selection entry encoding.
2019-05-14[gdb/doc] Fix "maint info selftests" command index entryTom de Vries2-1/+6
Currently, the entry for the command "maint info selftests" in the Command, Variable, and Function Index is listed at '"', rather than next to the other "maint info" commands. Fix this by removing the superfluous quoting in the @kindex entry. gdb/doc/ChangeLog: 2019-05-14 Tom de Vries <tdevries@suse.de> * gdb.texinfo (Maintenance Commands): Remove superfluous quoting on command index entry for "maint info selftests".
2019-05-12Fix two langauge -> language typosSimon Marchi3-2/+8
2019-05-11Document the GDB 8.3 release in gdb/ChangeLogJoel Brobecker1-0/+4
gdb/ChangeLog: GDB 8.3 released.
2019-05-10Fix GDB build when using --disable-gdbmiSimon Marchi7-32/+39
Since commit b4be1b064860 ("Fix MI output for multi-location breakpoints") we get this error when building with --disable-gdbmi: CXXLD gdb /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:6358: error: undefined reference to 'mi_multi_location_breakpoint_output_fixed(ui_out*)' This is due to breakpoint.c using a function defined in mi/mi-main.c, even though mi/mi-main.c isn't included in the build. To fix it, use the flags feature of ui_out. mi_ui_out has the new fix_multi_location_breakpoint_output flag set for versions >= 3. Also, move the global variable fix_multi_location_breakpoint_output to breakpoint.c, so it can be read there even when we build without MI. I renamed it to fix_multi_location_breakpoint_output_globally so it doesn't clash with the new enumerator. gdb/ChangeLog: * breakpoint.h (fix_multi_location_breakpoint_output_globally): New variable declaration. * breakpoint.c (fix_multi_location_breakpoint_output_globally): New variable. (print_one_breakpoint): Use ui_out::test_flags and new global variable to compute use_fixed_output. * mi/mi-main.h (mi_multi_location_breakpoint_output_fixed): Remove. * mi/mi-main.c (fix_multi_location_breakpoint_output): Remove. (mi_multi_location_breakpoint_output_fixed): Remove. (mi_cmd_fix_multi_location_breakpoint_output): Adjust to set the new variable. * mi/mi-out.c (mi_ui_out::mi_ui_out): Set fix_multi_location_breakpoint_output flag if version >= 3. * ui-out.h (enum ui_out_flag) <fix_multi_location_breakpoint_output>: New enumerator.