aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2020-03-05Remove use of deprecated core functions (in NetBSD/ARM)users/cbiesinger/arm-nbsdChristian Biesinger4-122/+101
This is in preparation for deleting deprecated_add_core_fns and related code. As a side-effect, this makes it possible to read NetBSD/ARM core files on non-NetBSD/ARM platforms, subject to PR corefiles/25638. I have removed this comment: - /* This is ok: we're running native... */ Since we are using the gdbarch from the regcache, we should be guaranteed to be calling the right function here, so it shouldn't matter whether we are running native. Tested by reading a NetBSD/ARM core file on Linux/x86-64 and NetBSD/ARM; the "info registers" output matches the one from the system GDB. gdb/ChangeLog: 2020-03-05 Christian Biesinger <cbiesinger@google.com> * Makefile.in (HFILES_NO_SRCDIR): Add new arm-nbsd-tdep.h file. * arm-nbsd-nat.c (arm_supply_gregset): Moved to arm-nbsd-tdep and renamed to arm_nbsd_supply_gregset. (fetch_register): Update to call arm_nbsd_supply_gregset. (fetch_regs): Remove in favor of fetch_register with a -1 regno. (arm_netbsd_nat_target::fetch_registers): Update. (fetch_elfcore_registers): Removed. (_initialize_arm_netbsd_nat): Removed call to deprecated_add_core_fns. * arm-nbsd-tdep.c (struct arm_nbsd_reg): New struct. (arm_nbsd_supply_gregset): Moved from arm-nbsd-nat.c and updated to not require NetBSD system headers. (arm_nbsd_regset): New struct. (arm_nbsd_iterate_over_regset_sections): New function. (arm_netbsd_init_abi_common): Updated to call set_gdbarch_iterate_over_regset_sections. * arm-nbsd-tdep.h: New file.
2020-03-04Implement debugging of WOW64 processesHannes Domani7-100/+463
For WOW64 processes, the Wow64* variants of SuspendThread, GetThreadContext, SetThreadContext, and GetThreadSelectorEntry have to be used instead. And instead of EnumProcessModules, EnumProcessModulesEx with LIST_MODULES_32BIT is necessary. gdb/ChangeLog: 2020-03-04 Hannes Domani <ssbssa@yahoo.de> * NEWS: Mention support for WOW64 processes. * amd64-windows-nat.c (amd64_mappings): Rename and remove static. (amd64_windows_segment_register_p): Remove static. (_initialize_amd64_windows_nat): Update. * configure.nat <windows> (NATDEPFILES): Add i386-windows-nat.o. * i386-windows-nat.c (context_offset): Update. (i386_mappings): Rename and remove static. (i386_windows_segment_register_p): Remove static. (_initialize_i386_windows_nat): Update. * windows-nat.c (STATUS_WX86_BREAKPOINT): New macro. (STATUS_WX86_SINGLE_STEP): New macro. (EnumProcessModulesEx): New macro. (Wow64SuspendThread): New macro. (Wow64GetThreadContext): New macro. (Wow64SetThreadContext): New macro. (Wow64GetThreadSelectorEntry): New macro. (windows_set_context_register_offsets): Add static. (windows_set_segment_register_p): Likewise. (windows_add_thread): Adapt for WOW64 processes. (windows_fetch_one_register): Likewise. (windows_nat_target::fetch_registers): Likewise. (windows_store_one_register): Likewise. (display_selector): Likewise. (display_selectors): Likewise. (handle_exception): Likewise. (windows_continue): Likewise. (windows_nat_target::resume): Likewise. (windows_add_all_dlls): Likewise. (do_initial_windows_stuff): Likewise. (windows_nat_target::attach): Likewise. (windows_get_exec_module_filename): Likewise. (windows_nat_target::create_inferior): Likewise. (windows_xfer_siginfo): Likewise. (_initialize_loadable): Initialize Wow64SuspendThread, Wow64GetThreadContext, Wow64SetThreadContext, Wow64GetThreadSelectorEntry and EnumProcessModulesEx. * windows-nat.h (windows_set_context_register_offsets): Remove declaration. (windows_set_segment_register_p): Likewise. (i386_windows_segment_register_p): Add declaration. (amd64_windows_segment_register_p): Likewise.
2020-03-04Revert "gdb: Do not print empty-group regs when printing general ones"Luis Machado2-8/+19
Revert the change since it breaks existing behavior of "info registers" for some architectures. At least AArch64 and ARM are impacted by this change. gdb/ChangeLog: 2020-03-04 Luis Machado <luis.machado@linaro.org> Revert aa66aac47b4dd38f9524ddb5546c08cc09930d37 due to regressions in "info registers" for AArch64/ARM. The change caused "info registers" to not print GPR's. gdb/ChangeLog: 2020-02-01 Shahab Vahedi <shahab@synopsys.com> * target-descriptions.c (tdesc_register_in_reggroup_p): Return 0 when reg->group is empty and reggroup is not.
2020-03-04[gdb/doc] Remove trailing done from "Reading symbols from" linesTom de Vries3-4/+9
Since commit 3453e7e409 'Clean up "Reading symbols" output' we no longer print "done." after the "Reading symbols from" message: ... $ gdb -q a.out Reading symbols from a.out... (gdb) ... Update docs accordingly. Build on x86_64-linux. gdb/doc/ChangeLog: 2020-03-04 Tom de Vries <tdevries@suse.de> * gdb.texinfo: Remove trailing "done." in "Reading symbols from" lines. * python.texi: Same.
2020-03-04gdb.fortran: Allow Flang kind printing in fortran testingAlok Kumar Sharma2-14/+31
In lib/fortran.exp, in the helper function fortran_int4, kind parameter is expected to be printed as (kind=4) for the LLVM Fortran compiler, Flang along with gfortran. And in the helper function fortran_int8 kind parameter is expected to be printed as (kind=8). But for the Flang compiler default kind is not printed and non default kind is printed differently than gfortran as below. integer(kind=4) => integer integer(kind=8) => integer*8 real(kind=4) => real real(kind=8) => double precision complex(kind=4) => complex logical(kind=4) => logical character(kind=1) => character This commit adds support for printing of kind parameter for the Flang. There should be no change when testing with gfortran. Note: The current patch overrides earlier patch with below details. commit c3b149eb7697b376df1b3a47d0102afda389ee6d Author Alok Kumar Sharma (alokkumar.sharma@amd.com) Earlier patch was incomplete and based on assumption that flang should be changed to dump a type with kind like the way gfortan does. Later it was realized that the way flang dumps this info is not incorrect but different. And changes in gdb test framework are finalized. gdb/testsuite/ChangeLog: * lib/fortran.exp (fortran_int4): Handle flang kind printing. (fortran_int8): Likewise. (fortran_real4): Likewise. (fortran_real8): Likewise. (fortran_complex4): Likewise. (fortran_logical4): Likewise. (fortran_character1): Likewise.
2020-03-03Find tailcall frames before inline framesTom Tromey3-32/+47
A customer reported a failure to unwind in a certain core dump. A lengthy investigation showed that the problem came from the interaction between the tailcall and inline frame sniffers. Normally, the regular DWARF unwinder may discover a chain of tail calls ending in the current frame. In this case, it sets a member on the dwarf2_frame_cache object, so that a subsequent call into the tailcall sniffer will create the tailcall frames. However, in this scenario, what happened is that the DWARF unwinder did find tailcall frames -- but then the PC of the first such frame was recognized and claimed by the inline frame sniffer. This then caused unwinding to go astray further up the stack. This patch fixes the problem by arranging for the tailcall sniffer to be called before the inline sniffer. This way, if a DWARF frame has tailcall information, the tailcalls will always be processed first. This is safe to do, because the tailcall sniffer can only claim a frame if the previous frame did in fact find this information. (So, for example, if no DWARF frame is ever found, then this sniffer will never trigger.) This patch also partially reverts: commit 1ec56e88aa9b052ab10b806d82fbdbc8d153d977 Author: Pedro Alves <palves@redhat.com> Date: Fri Nov 22 13:17:46 2013 +0000 Eliminate dwarf2_frame_cache recursion, don't unwind from the dwarf2 sniffer (move dwarf2_tailcall_sniffer_first elsewhere). That patch moved the call to dwarf2_tailcall_sniffer_first out of dwarf2_frame_cache, and into dwarf2_frame_prev_register. However, in this situation, this is too late -- by the time dwarf2_frame_prev_register is called, the frame in question is already recognized by the inline frame sniffer. Rather than fully revert that patch, though, this just arranges to call dwarf2_tailcall_sniffer_first from dwarf2_frame_cache -- which is called shortly after the DWARF frame sniffer succeeds, via compute_frame_id. I don't know how to write a test case for this. gdb/ChangeLog 2020-03-03 Tom Tromey <tromey@adacore.com> * dwarf2/frame.c (struct dwarf2_frame_cache) <checked_tailcall_bottom, entry_cfa_sp_offset, entry_cfa_sp_offset_p>: Remove members. (dwarf2_frame_cache): Call dwarf2_tailcall_sniffer_first. (dwarf2_frame_prev_register): Don't call dwarf2_tailcall_sniffer_first. (dwarf2_append_unwinders): Don't append tailcall unwinder. * frame-unwind.c (add_unwinder): New fuction. (frame_unwind_init): Use it. Add tailcall unwinder.
2020-03-03gdb/fortran: Fix printing of logical true values for FlangAndrew Burgess4-1/+53
GDB is not able to print logical true values for Flang compiler. Actual result: (gdb) p l $1 = 4294967295 Expected result: (gdb) p l $1 = .TRUE. This is due to GDB expecting representation of true value being 1. The Fortran standard doesnt specify how LOGICAL types are represented. Different compilers use different non-zero values to represent logical true. The gfortran compiler uses 1 to represent logical true and the flang compiler uses -1. GDB should accept all the non-zero values as true. This is achieved by handling TYPE_CODE_BOOL in f_val_print and printing any non-zero value as true. gdb/ChangeLog: * f-valprint.c (f_val_print): Handle TYPE_CODE_BOOL, any non-zero value should be printed as true. gdb/testsuite/ChangeLog: * gdb.fortran/logical.exp: Add tests that any non-zero value is printed as true.
2020-03-03Rebase executable to match relocated base addressHannes Domani2-1/+59
Windows executables linked with -dynamicbase get a new base address when loaded, which makes debugging impossible if the executable isn't also rebased in gdb. The new base address is read from the Process Environment Block. gdb/ChangeLog: 2020-03-03 Hannes Domani <ssbssa@yahoo.de> * windows-tdep.c (windows_solib_create_inferior_hook): New function. (windows_init_abi): Set and use windows_so_ops.
2020-03-03Fix printf of a convenience variable holding an inferior addressSergio Durigan Junior4-1/+20
Back at: commit 1f6f6e21fa86dc3411a6498608f32e9eb24b7851 Author: Philippe Waroquiers <philippe.waroquiers@skynet.be> Date: Mon Jun 10 21:41:51 2019 +0200 Ensure GDB printf command can print convenience var strings without a target. GDB was extended in order to allow the printing of convenience variables that are strings without a target. However, this introduced a regression that hasn't been caught by our testsuite (because there were no tests for it). The problem happens when we try to print a convenience variable that holds the address of a string in the inferior. The following two-liners can reproduce the issue: $ echo -e 'int main(){const char a[]="test";return 0;}' | gcc -x c - -O0-g3 $ ./gdb/gdb --data-directory ./gdb/data-directory -q ./a.out -ex 'start' -ex 'set $x = (const char *) (&a[0] + 2)' -ex 'printf "%s\n", $x' After some investigation, I found that the problem happens on printcmd.c:printf_c_string. In the case above, we're taking the first branch of the 'if' condition, which assumes that there will be a value to be printed at "value_contents (value)". There isn't. We actually need to obtain the address that the variable points to, and read the contents from memory. It seems to me that we should avoid this branch if the TYPE_CODE of "value_type (value)" is TYPE_CODE_PTR (i.e., a pointer to the inferior's memory). This is what this patch does. I took the liberty to extend the current testcase under gdb.base/printcmds.exp and create a test that exercises this scenario. No regressions have been found on Buildbot. gdb/ChangeLog: 2020-03-03 Sergio Durigan Junior <sergiodj@redhat.com> * printcmd.c (print_c_string): Check also for TYPE_CODE_PTR when verifying if dealing with a convenience variable. gdb/testsuite/ChangeLog: 2020-03-03 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.base/printcmds.exp: Add test to verify printf of a variable holding an address.
2020-03-03Update GDB to use new AUXV entry typesLuis Machado2-0/+16
I noticed GDB didn't know a particular AT tag (51) when doing some debugging. Turns out we're missing a few entries compared to glibc's headers. This patch adds them to GDB and fixes a failure in gdb.base/auxv.exp as a result. gdb/ChangeLog: 2020-03-03 Luis Machado <luis.machado@linaro.org> * auxv.c (default_print_auxv_entry): Add new AUXV entries.
2020-03-03[gdb/testsuite] Fix gdb.mi/gdb2549.exp with check-read1Tom de Vries2-3/+34
When running gdb.mi/gdb2549.exp with check-read1, we get: ... Running src/gdb/testsuite/gdb.mi/gdb2549.exp ... FAIL: gdb.mi/gdb2549.exp: register values t (timeout) ... The problem is that the command generates a lot of output, which is matched by a single '.*': ... mi_gdb_test "666-data-list-register-values t" \ "666\\^done,register-values=\\\[\{number=\"$decimal\",value=\"$binary\"\}.*\\\]" \ "register values t" ... Fix this by splitting up the matching and calling exp_continue after each number/value pair. Tested on x86_64-linux with make targets check and check-read1. gdb/testsuite/ChangeLog: 2020-03-03 Tom de Vries <tdevries@suse.de> * gdb.mi/gdb2549.exp: Fix "register values t" check-read1 timeout.
2020-03-03[gdb/testsuite] Fix tcl error in gdb.mi/list-thread-groups-available.expTom de Vries2-2/+9
When running gdb.mi/list-thread-groups-available.exp, we get: ... Running gdb.mi/list-thread-groups-available.exp ... ERROR: tcl error sourcing gdb.mi/list-thread-groups-available.exp. ERROR: Too many arguments to gdb_test_multiple ... The problem is that the gdb_test_multiple call has as last argument a $mi_gdb_prompt, which is no longer supported syntax since 590003dc0e "[gdb/testsuite] Add -lbl option in gdb_test_multiple". Fix this by using the new -prompt syntax. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-03-03 Tom de Vries <tdevries@suse.de> * gdb.mi/list-thread-groups-available.exp: Use -prompt syntax for gdb_test_multiple call.
2020-03-03[gdb/testsuite] Fix mi-sym-info.exp with check-read1Tom de Vries2-2/+9
When running gdb.mi/mi-sym-info.exp with check-read1, we run into: ... FAIL: gdb.mi/mi-sym-info.exp: List all functions FAIL: gdb.mi/mi-sym-info.exp: List all variables ... The problem is that while the $mi_gdb_prompt is active, gdb_test_multiple is used without -prompt "$mi_gdb_prompt$", so it defaults to matching $gdb_prompt. Fix this by adding the missing gdb_test_multiple arguments. Reg-tested on x86_64-linux with make targets check and check-read1. gdb/testsuite/ChangeLog: 2020-03-03 Tom de Vries <tdevries@suse.de> * gdb.mi/mi-sym-info.exp: Add missing -prompt "$mi_gdb_prompt$" to gdb_test_multiple calls.
2020-03-02Small clean up of use_displaced_steppingSimon Marchi2-13/+50
This function returns the result of a quite big condition. I think it would be more readeable if it was broken up in smaller pieces and commented. This is what this patch does. I also introduced gdbarch_supports_displaced_stepping, since it shows the intent better than checking for gdbarch_displaced_step_copy_insn_p. I also used that new function in displaced_step_prepare_throw. I also updated the comment on top of can_use_displaced_stepping, which seemed a bit outdated with respect to non-stop. The comment likely dates from before it was possible to have targets that always operate non-stop under the hood, even when the user-visible mode is all-stop. No functional changes intended. gdb/ChangeLog: * infrun.c (gdbarch_supports_displaced_stepping): New. (use_displaced_stepping): Break up conditions in smaller pieces. Use gdbarch_supports_displaced_stepping. (displaced_step_prepare_throw): Use gdbarch_supports_displaced_stepping.
2020-03-02gdb: Allow GDB to _not_ load a previous command historyAndrew Burgess9-15/+259
This commit aims to give a cleaner mechanism by which the user can prevent GDB from trying to load any previous command history. Currently the user can change the path to the history file, either using a command line flag, or by setting the GDBHISTFILE environment variable, and if the path is set to a non-existent file, then obviously GDB wont load any command history. However, this feels like a bit of a bodge, I'd like to add an official mechanism by which we can disable command history loading. Why would we want to prevent command history loading? The specific use case I have is GDB starting with a CWD that is a network mounted directory, and there is no command history present. Still GDB will access the network in order to check for the file. In my particular use case I'm actually starting a large number of GDB instances in parallel, all in the same network mounted directory, the large number of network accesses looking for this file introduces a noticeable delay at GDB startup. The approach I'm proposing here is a slight adjustment to the current rules for setting up the history filename. Currently, if a user does this, they see an error: (gdb) set history filename Argument required (filename to set it to.). However, if a user does this: $ GDBHISTFILE= gdb --quiet (gdb) set history save on (gdb) q warning: Could not rename -gdb18416~ to : No such file or directory So, we already have a bug in this area. My plan is to allow the empty filename to be accepted, and for this to mean, neither load, nor save the command history. This does mean that we now have two mechanisms to prevent saving the command history: (gdb) set history filename or (gdb) set history save off But the only way to prevent loading the command history is to set the filename to the empty string _before_ you get to a GDB prompt, either using a command line option, or the environment variable. I've updated some of the show commands, for example this session: (gdb) set history filename (gdb) show history filename There is no filename currently set for recording the command history in. (gdb) show history save Saving of the history record on exit is off. (gdb) set history save on (gdb) show history save Saving of the history is disabled due to the value of 'history filename'. (gdb) set history filename /tmp/hist (gdb) show history save Saving of the history record on exit is on. I've updated the manual, and added some tests. gdb/ChangeLog: * NEWS: Mention new behaviour of the history filename. * top.c (write_history_p): Add comment. (show_write_history_p): Add header comment, give a different message when history writing is on, but the history filename is empty. (history_filename): Add comment. (history_filename_empty): New function. (show_history_filename): Add header comment, give a different message when the filename is empty. (init_history): Compare history_filename against nullptr, and only read history if the filename is not empty. (set_history_filename): Add header comment, and only make non-empty filenames absolute. (init_main): Make the filename argument to 'set history filename' optional. gdb/doc/ChangeLog: * gdb.texinfo (Command History): Extend description for GDBHISTFILE and GDBHISTSIZE, add detail about the filename for 'set history filename' being optional. Describe the effect of an empty history filename on 'set history save on'. gdb/testsuite/ChangeLog: * gdb.base/default.exp: Remove test of 'set history filename'. * gdb.base/gdbinit-history.exp: Add tests for setting the history filename to the empty string. * lib/gdb.exp (gdb_init): Unset environment variables GDBHISTFILE and GDBHISTSIZE. Change-Id: Ia586e4311182fac99113b60f11ef8a11fbd5450b
2020-03-02Fix arm-netbsd build error: convert from FPA to VFPChristian Biesinger2-53/+79
The floating point register interface has changed to this: https://github.com/NetBSD/src/blob/trunk/sys/arch/arm/include/reg.h It now uses VFP instead of FPA registers. This patch updates arm-nbsd-nat.c accordingly. Also implements read_description so that these registers are correctly printed by "info registers" et al. Tested by compiling & running on arm-netbsd on qemu. gdb/ChangeLog: 2020-03-02 Christian Biesinger <cbiesinger@google.com> * arm-nbsd-nat.c (arm_supply_fparegset): Rename to... (arm_supply_vfpregset): ...this, and update to use VFP registers. (fetch_fp_register): Update. (fetch_fp_regs): Update. (store_fp_register): Update. (store_fp_regs): Update. (arm_netbsd_nat_target::read_description): New function. (fetch_elfcore_registers): Update.
2020-03-02gdb/remote: Restore support for 'S' stop reply packetAndrew Burgess5-45/+101
With this commit: commit 5b6d1e4fa4fc6827c7b3f0e99ff120dfa14d65d2 Date: Fri Jan 10 20:06:08 2020 +0000 Multi-target support There was a regression in GDB's support for older aspects of the remote protocol. Specifically, when a target sends the 'S' stop reply packet (which doesn't include a thread-id) then GDB has to figure out which thread actually stopped. Before the above commit GDB figured this out by using inferior_ptid in process_stop_reply, which contained the ptid of the current process/thread. This would be fine for single threaded targets (which is the only place using an S packet makes sense), but in the general case, relying on inferior_ptid for processing a stop is wrong - there's no reason to believe that what was GDB's current thread will be the same thread that just stopped in the target. With the above commit the inferior_ptid now has the value null_ptid inside process_stop_reply, this can be seen in do_target_wait, where we call switch_to_inferior_no_thread before calling do_target_wait_1. The problem this causes can be seen in the new test that runs gdbserver using the flag --disable-packet=T, and causes GDB to throw this assertion: inferior.c:279: internal-error: inferior* find_inferior_pid(process_stratum_target*, int): Assertion `pid != 0' failed. A similar problem was fixed in this commit: commit 3cada74087687907311b52781354ff551e10a0ed Date: Thu Jan 11 00:23:04 2018 +0000 Fix backwards compatibility with old GDBservers (PR remote/22597) However, this commit deals with the case where the T packet doesn't include a thread-id, not the S packet case. This commit solves the problem providing a thread-id at the GDB side if the remote target doesn't provide one. The thread-id provided comes from remote_state::general_thread, however, though this does work, I don't think it is the ideal solution. The remote_state tracks two threads, the continue_thread and the general_thread, these are updated when GDB asks the remote target to switch threads. The general_thread is set before performing things like register or memory accesses, and the continue_thread is set before things like continue or step commands. Further, the general_thread is updated after a target stops to reference the thread that stopped. The first thing to note from the above description is that we have a cycle of dependency, when a T packet arrives without a thread-id we fill in the thread-id from the general_thread data. The thread-id from the stop event is then used to set the general_thread. This in itself feels a little weird. The second question is why use the general_thread at all? You'd think given how they are originally set that the continue thread would be a better choice. The problem with this is that the continue_thread, if the user just does "continue", will be set to the minus_one_ptid, in the remote protocol this means all threads. When the stop arrives with no thread-id and we use continue_thread we end up with a very similar assertion to before because we now end up trying to lookup a thread using the minus_one_ptid. By contrast, once GDB has connected to a remote target the general_thread will be set to a valid thread-id, after which, if the target is single threaded, and stop events arrive without a thread-id, everything works fine. There is one slight weirdness with the above behaviour though. When GDB first connects to the remote target inferior_ptid is null_ptid, however, upon connecting we query the remote for its threads. As the thread information arrives GDB adds the threads to its internal database, and this process involves setting inferior_ptid to the id of each new thread in turn. Once we know about all the threads we wait for a stop event from the remote target to indicate that GDB is now in control of the target. The problem is that after adding the new threads we don't reset inferior_ptid, and the code path we use to wait for a stop event from the target also doesn't reset inferior_ptid, so it turns out that during the initial connection inferior_ptid is not null_ptid. This is lucky, because during the initial connection the general_thread variable _is_ set to null_ptid. So, during the initial connection, if the first stop event is missing a thread-id then we "provide" a thead-id from general_thread. This turns out to be null_ptid meaning no thread-id is known, and then during process_stop_reply we fill in the missing thread-id using inferior_ptid. This was all discussed on the mailing list here: https://sourceware.org/ml/gdb-patches/2020-02/msg01011.html My proposal for a fix then is: 1. Move the call to switch_to_inferior_no_thread into do_target_wait_1, this means that in all cases where we are waiting for an inferior the inferior_ptid will be set to null_ptid. This is good as no wait code should rely on inferior_ptid. 2. Remove the use of general_thread from the 'T' packet processing. The general_thread read here was only ever correct by chance, and we shouldn't be using it this way. 3. Remove use of inferior_ptid from process_stop_event as this is wrong, and will always be null_ptid now anyway. 4. When a stop_event has null_ptid due to a lack of thread-id (either from a T packet or an S packet) then pick the first non exited thread in the target and use that. This will be fine for single threaded targets. A multi-thread or multi-inferior aware remote target should be using T packets with a thread-id, so we give a warning if the target is multi-threaded, and we are still missing a thread-id. 5. Extend the existing test that covered the T packet with missing thread-id to also cover the S packet. gdb/ChangeLog: * remote.c (remote_target::remote_parse_stop_reply): Don't use the general_thread if the stop reply is missing a thread-id. (remote_target::process_stop_reply): Use the first non-exited thread if the target didn't pass a thread-id. * infrun.c (do_target_wait): Move call to switch_to_inferior_no_thread to .... (do_target_wait_1): ... here. gdb/testsuite/ChangeLog: * gdb.server/stop-reply-no-thread.exp: Add test where T packet is disabled.
2020-03-02[gdb/testsuite] Add -lbl option in gdb_test_multipleTom de Vries3-53/+83
Add gdb_test_multiple option -lbl, that adds a regexp after the user code that reads one line, and discards it: ... -re "\r\n\[^\r\n\]*(?=\r\n)" { exp_continue } ... In order to be able to write: ... gdb_test_multiple "command" "testname" -lbl { ... } ... rewrite the promp_regexp argument usage into the similar: ... gdb_test_multiple "command" "testname" -prompt $prompt_regexp { ... } ... Build and reg-tested on x86_64-linux. Tested gdb.base/corefile-buildid.exp with both make targets check and check-read1. gdb/testsuite/ChangeLog: 2020-03-02 Pedro Alves <palves@redhat.com> Tom de Vries <tdevries@suse.de> * lib/gdb.exp (gdb_test_multiple): Handle prompt_regexp option using -prompt prefix, before user_code argument. Add -lbl option likewise. (skip_python_tests_prompt, skip_libstdcxx_probe_tests_prompt) (gdb_is_target_1): Add -prompt prefix and move to before user_code argument. * gdb.base/corefile-buildid.exp: Use -lbl option. Rewrite regexps to have "\r\n" at start-of-line, instead of at end-of-line.
2020-03-02gdb: Move defs.h before any system header in debuginfod-support.cJon Turney2-1/+5
* defs.h includes config.h * config.h may define _GNU_SOURCE * if _GNU_SOURCE is defined, that must be before including any system header (see feature_test_macro(7)) This is necessary to ensure that a prototype for mkostemp() is brought into scope by <stdlib.h> when compiling filestuff.h, on platforms where _GNU_SOURCE isn't unconditionally defined for C++. In file included from ../../gdb/../gdbsupport/scoped_fd.h:24, from ../../gdb/debuginfod-support.c:22: ../../gdb/../gdbsupport/filestuff.h: In function ‘int gdb_mkostemp_cloexec(char*, int)’: ../../gdb/../gdbsupport/filestuff.h:59:10: error: ‘mkostemp’ was not declared in this scope; did you mean ‘mkstemp’? gdb/ChangeLog: 2020-02-29 Jon Turney <jon.turney@dronecode.org.uk> * debuginfod-support.c: Include defs.h first.
2020-02-28Update libinproctrace.so path in lib/trace-support.expSimon Marchi2-1/+6
Following the move to gdbserver to the top-level, the path to libinproctrace.so in testsuite/lib/trace-support.exp is no longer valid. This can be observed by running: $ make check TESTS="gdb.trace/ftrace.exp" RUNTESTFLAGS="--target_board=native-gdbserver" ... ERROR: error copying "/home/smarchi/build/binutils-gdb/gdb/testsuite/../gdbserver/libinproctrace.so": no such file or directory Adjust the path to libinproctrace.so by adding a "..". With this patch, the test mentioned above runs fine. gdb/testsuite/ChangeLog: * lib/trace-support.exp (get_in_proc_agent): Adjust path to libinproctrace.so.
2020-02-28Fix SVE-related failure in gdb.arch/aarch64-fp.expLuis Machado2-6/+11
The gdb.arch/aarch64-fp.exp test assumes it is dealing with a regular SIMD target that exposes the V registers as raw registers. SVE-enabled targets turn the V registers into pseudo-registers. That is all fine, but the testcase uses the "info registers" command, which prints pseudo-register's contents twice. One for the hex format and another for the natural format of the type. (gdb) info registers v0 v0 {d = {f = {0x0, 0x0}, u = {0x1716151413121110, 0x1f1e1d1c1b1a1918}, s = {0x1716151413121110, 0x1f1e1d1c1b1a1918}}, s = {f = {0x0, 0x0, 0x0, 0x0}, u = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}, s = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}}, h = {f = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}, s = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}}, b = {u = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}, s = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}}, q = {u = {0x1f1e1d1c1b1a19181716151413121110}, s = {0x1f1e1d1c1b1a19181716151413121110}}} {d = {f = {1.846323925681849e-197, 8.5677456166123577e-159}, u = {1663540288323457296, 2242261671028070680}, s = {1663540288323457296, 2242261671028070680}}, s = {f = {1.84362032e-27, 4.84942184e-25, 1.27466897e-22, 3.34818801e-20}, u = {319951120, 387323156, 454695192, 522067228}, s = {319951120, 387323156, 454695192, 522067228}}, h = {f = {0.00061798, 0.00086308, 0.0012398, 0.00173, 0.0024872, 0.0034676, 0.0049896, 0.0069504}, u = {4368, 4882, 5396, 5910, 6424, 6938, 7452, 7966}, s = {4368, 4882, 5396, 5910, 6424, 6938, 7452, 7966}}, b = {u = {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, s = {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}}, q = {u = {41362427191743139026751447860679676176}, s = {41362427191743139026751447860679676176}}} (gdb) p/x $v0 $1 = {d = {f = {0x0, 0x0}, u = {0x1716151413121110, 0x1f1e1d1c1b1a1918}, s = {0x1716151413121110, 0x1f1e1d1c1b1a1918}}, s = {f = {0x0, 0x0, 0x0, 0x0}, u = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}, s = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}}, h = {f = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}, s = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}}, b = {u = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}, s = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}}, q = {u = {0x1f1e1d1c1b1a19181716151413121110}, s = {0x1f1e1d1c1b1a19181716151413121110}}} Since the testcase is not expecting that, we run into a couple failures: FAIL: gdb.arch/aarch64-fp.exp: check register v0 value FAIL: gdb.arch/aarch64-fp.exp: check register v1 value The following patch switches to using "p/x" for printing register values, which prints the values once with the hex format, instead of twice. gdb/testsuite/ChangeLog 2020-02-28 Luis Machado <luis.machado@linaro.org> * gdb.arch/aarch64-fp.exp: Switch from "info registers" command to "p/x".
2020-02-28Fix gdb.arch/aarch64-dbreg-contents.exp build failuresLuis Machado2-0/+9
I ran into the following failures when running tests under QEMU: -- gdb compile failed, binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c: In function 'set_watchpoint': binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:41:29: error: storage size of 'dreg_state' isn't known struct user_hwdebug_state dreg_state; ^~~~~~~~~~ In file included from /usr/include/aarch64-linux-gnu/bits/types/struct_iovec.h:23:0, from /usr/include/aarch64-linux-gnu/sys/uio.h:23, from binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:17: binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:69:18: error: invalid use of undefined type 'struct user_hwdebug_state' iov.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs) ^ binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:74:5: warning: implicit declaration of function 'error'; did you mean 'errno'? [-Wimplicit-function-declaration] error (1, errno, "PTRACE_SETREGSET: NT_ARM_HW_WATCH"); ^~~~~ errno binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c: In function 'main': binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:87:3: warning: implicit declaration of function 'atexit'; did you mean '_Exit'? [-Wimplicit-function-declaration] atexit (cleanup); ^~~~~~ _Exit binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:89:11: warning: implicit declaration of function 'fork' [-Wimplicit-function-declaration] child = fork (); ^~~~ -- The following patch fixes those by adding the necessary include files. With that said, the test doesn't pass at present. I'll have to investigate it a bit more. gdb/testsuite/ChangeLog: 2020-02-28 Luis Machado <luis.machado@linaro.org> * gdb.arch/aarch64-dbreg-contents.c: Include stdlib.h, unistd, asm/ptrace.h and error.h.
2020-02-28[gdb] Don't set initial language using previous languageTom de Vries2-3/+10
When language is set to auto, part of loading an executable is to update the language accordingly. This is implemented by set_initial_language. In case of a c++ executable without DW_AT_main_subprogram, set_initial_language finds "main" in the minimal symbols, and does a lookup of "main" in the symbol tables to determine the language of the symbol, and uses that as initial language. The symbol lookup is done using lookup_symbol which is a wrapper around lookup_symbol_in_language, using the current language. So, consider two c++ executables a.out and b.out, which we'll load one after another. If we track the resulting lookup_symbol_in_language calls: ... $ gdb -batch \ -ex "b lookup_symbol_in_language" \ -ex r -ex c -ex c \ --args gdb ... we find that indeed lookup_symbol_in_language is called once using language_c, and once using language_c_plus: ... (gdb) file a.out Reading symbols from a.out... Breakpoint 1, lookup_symbol_in_language (name=0x5555568c2050 "main", \ block=0x0, domain=VAR_DOMAIN, lang=language_c, is_a_field_of_this=0x0) \ at ../../gdb/symtab.c:1905 1905 { (gdb) file b.out Load new symbol table from "b.out"? (y or n) y Reading symbols from b.out... Breakpoint 1, lookup_symbol_in_language (name=0x5555568c2030 "main", \ block=0x0, domain=VAR_DOMAIN, lang=language_cplus, is_a_field_of_this=0x0) \ at ../../gdb/symtab.c:1905 1905 { (gdb) ... It seems like a bad idea to have the previous language play a role in determining the executable language. Fix this by using lookup_symbol_in_language in set_initial_language with the default language c as argument. Tested on x86_64-linux. gdb/ChangeLog: 2020-02-28 Tom de Vries <tdevries@suse.de> * symfile.c (set_initial_language): Use default language for lookup.
2020-02-28Pass correct die_reader_specs in cutu_reader::init_tu_and_read_dwo_diesSimon Marchi2-2/+6
Running anything with the fission.exp board fails since commit c0ab21c22bb ("Replace init_cutu_and_read_dies with a class"). GDB crashes while reading the DWARF info. cu is NULL in read_signatured_type: Thread 1 "gdb" received signal SIGSEGV, Segmentation fault. 0x000055555780663e in read_signatured_type sig_type=0x6210000c3600) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22782 22782 gdb_assert (cu->die_hash == NULL); (top-gdb) bt #0 0x000055555780663e in read_signatured_type (sig_type=0x6210000c3600) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22782 #1 0x00005555578062dd in load_full_type_unit (per_cu=0x6210000c3600) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22758 #2 0x00005555577c5fb7 in queue_and_load_dwo_tu (slot=0x60600007fc00, info=0x6210000c34e0) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:12674 #3 0x0000555559934232 in htab_traverse_noresize (htab=0x60b000063670, callback=0x5555577c5e61 <queue_and_load_dwo_tu(void**, void*)>, info=0x6210000c34e0) at /home/simark/src/binutils-gdb/libiberty/hashtab.c:775 #4 0x00005555577c6252 in queue_and_load_all_dwo_tus (per_cu=0x6210000c34e0) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:12701 #5 0x000055555777ebd8 in dw2_do_instantiate_symtab (per_cu=0x6210000c34e0, skip_partial=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:2371 #6 0x000055555777eea2 in dw2_instantiate_symtab (per_cu=0x6210000c34e0, skip_partial=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:2395 #7 0x0000555557786ab6 in dw2_lookup_symbol (objfile=0x614000007240, block_index=GLOBAL_BLOCK, name=0x602000025310 "main", domain=VAR_DOMAIN) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:3539 After creating the reader object, the reader.cu field should not be NULL. By checking the commit previous to the faulty one mentioned above, I noticed that the cu field is normally set by init_cu_die_reader, called from read_cutu_die_from_dwo, itself called from cutu_reader::init_tu_and_read_dwo_dies, itself called from cutu_reader's constructor. However, cutu_reader::init_tu_and_read_dwo_dies calls read_cutu_die_from_dwo, passing a pointer to a local `die_reader_specs` variable. So it's the `cu` field of that object that gets set. cutu_reader itself is a `die_reader_specs` (it inherits from it), and the intention was most likely to pass `this` to read_cutu_die_from_dwo. This way, the fields of the cutu_reader object, which read_signatured_type will use, are set. With this, I am able to use: make check RUNTESTFLAGS='--target_board=fission' and it looks much better. There are still some failures to be investigated, but that's the usual state of the testsuite. gdb/ChangeLog: * dwarf2/read.c (cutu_reader::init_tu_and_read_dwo_dies): Remove reader variable, pass `this` to read_cutu_die_from_dwo.
2020-02-28[gdb/testsuite] Fix psymtab expansion postponement in c-linkage-name.expTom de Vries4-26/+89
The test-case gdb.base/c-linkage-name.exp starts with the following test: ... gdb_test "print symada__cS" \ " = {a = 100829103}" \ "print symada__cS before partial symtab expansion" ... However, printing the state of the partial symtabs using maint info psymtabs shows that in fact the symtab has already been expanded: ... { psymtab c-linkage-name.c ((struct partial_symtab *) 0x1e27b40)^M readin yes^M ... This is due to set_initial_language, which looks up the main symbol, which expands the psymtab containing main. Fix this by moving all but main into a separate source file c-linkage-name-2.c. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-28 Tom de Vries <tdevries@suse.de> * gdb.base/c-linkage-name.c (main): Call do_something_other_cu. (struct wrapper, do_something, mundane/symada__cS): Move ... * gdb.base/c-linkage-name-2.c: ... here. New source file. * gdb.base/c-linkage-name.exp: Add verification of psymtab expansion. Update "print symada__cS before partial symtab expansion" regexp. Update breakpoint location. Flush symbol cache after expansion.
2020-02-28Harden gdb.arch/aarch64-pauth.exp and fix a failureLuis Machado2-1/+10
When running this testcase against a QEMU with PAC support, i noticed we were failing to recognize the additional [PAC] that is emitted in the backtrace, resulting in this failure: FAIL: gdb.arch/aarch64-pauth.exp: backtrace I've made the test use multi_line to make the pattern more clear. Tested against aarch64-linux-gnu with and without PAC support. gdb/testsuite/ChangeLog: 2020-02-28 Luis Machado <luis.machado@linaro.org> * gdb.arch/aarch64-pauth.exp: Recognize optional PAC output.
2020-02-27gdb: Check for nullptr when computing srcpathAaron Merey2-2/+7
This fixes a regression caused by commit 0d79cdc494d5: $ make check TESTS="gdb.dwarf2/dw2-ranges-base.exp" [...] ERROR: GDB process no longer exists This error is caused by an abort during the computation of srcpath when SYMTAB_DIRNAME (s) == NULL. Computing srcpath only when SYMTAB_DIRNAME (s) is not NULL fixes this error. Also change the condition for calling debuginfod_source_query to include whether srcpath could be computed. gdb/ChangeLog: 2020-02-27 Aaron Merey <amerey@redhat.com> * source.c (open_source_file): Check for nullptr when computing srcpath.
2020-02-27Remove field_info::nfields memberTom Tromey2-7/+15
I noticed that there's no real reason to have field_info::nfields in the DWARF reader. It simply mirrors information that is already available. This patch removes it, in favor of a convenience method. gdb/ChangeLog 2020-02-27 Tom Tromey <tromey@adacore.com> * dwarf2/read.c (struct field_info) <nfields>: Now a method, not a member. (dwarf2_add_field): Don't update nfields. (dwarf2_attach_fields_to_type, process_structure_scope): Update.
2020-02-27gdb: Use std::abs instead of abs on LONGEST typesAndrew Burgess2-2/+7
Use std::abs so that we get the C++ overloaded version that matches the argument type instead of the C abs function which is only for int arguments. There should be no user visible change after this commit. gdb/ChangeLog: * gdbtypes.c (create_array_type_with_stride): Use std::abs not abs.
2020-02-27[gdb/testsuite] Remove unused globalsTom de Vries8-25/+12
Remove unused global variable declarations. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-27 Tom de Vries <tdevries@suse.de> * config/sid.exp: Remove unused globals. * gdb.base/attach.exp: Same. * gdb.base/catch-load.exp: Same. * gdb.base/dbx.exp: Same. * lib/gdb.exp: Same. * lib/mi-support.exp: Same. * lib/prompt.exp: Same.
2020-02-27[gdb/testsuite] Fix spawn in tuiterm.expTom de Vries2-1/+10
When running gdb.stabs/weird.exp by itself it passes, but if we run a gdb.tui test before it, we get: ... $ make check RUNTESTFLAGS="gdb.stabs/weird.exp gdb.tui/basic.exp" Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.tui/basic.exp ... Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.stabs/weird.exp ... ERROR: Couldn't make test case. -1 {spawn failed} ... In more detail, using -v: ... Executing on build: sed -f aout.sed weird.def weird.s (timeout = 300) builtin_spawn [open ...]^M pid is 19060 19061 -19060 -19061 spawn -open file10 failed, 1 can't read "spawn_out(slave,name)": \ no such variable, can't read "spawn_out(slave,name)": no such variable while executing "set gdb_spawn_name $spawn_out(slave,name)" (procedure "spawn" line 5) invoked from within "spawn -ignore SIGHUP -leaveopen file10" invoked from within "catch "spawn -ignore SIGHUP -leaveopen $id" result2" ERROR: Couldn't make test case. -1 {spawn failed} ... When running the gdb.tui test, spawn gets renamed to a local version from lib/tuiterm.exp. The local version calls expect's spawn, and then makes the local spawn_out(slave,name) variable accessible in the global variable gdb_spawn_name. However, the weird.exp test-case uses remote_exec build, which ends up using local_exec, which given that there's input/output redirection uses open: ... set result [catch {open "| ${commandline} $inp |& tee $outpf" RDONLY} id] ... followed by spawn using the -leaveopen option: ... set result [catch "spawn -ignore SIGHUP -leaveopen $id" result2] ... which apparently has the effect that spawn_out(slave,name) is not set. Fix this in the lib/tuiterm.exp local spawn proc by detecting the case that spawn_out(slave,name) is not set, and handling it accordingly. Tested gdb.stabs/weird.exp and gdb.tui/*.exp on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-27 Tom de Vries <tdevries@suse.de> * lib/tuiterm.exp (spawn): Handle case that spawn_out(slave,name) is not set.
2020-02-26Specialize partial_symtab for DWARF include filesTom Tromey2-19/+49
Include files are represented by a partial symtab, but don't expand to anything. From dwarf2_psymtab::expand_psymtab: if (per_cu == NULL) { /* It's an include file, no symbols to read for it. Everything is in the parent symtab. */ readin = true; return; } This patch introduces a new specialization of partial_symtab to handle this case. In addition to being slightly smaller, I believe an include file is the only situation where a DWARF psymtab can result in a null compunit_symtab. This adds an assert to that effect as well. This change will simplify one of the psymtab sharing patches. gdb/ChangeLog 2020-02-26 Tom Tromey <tom@tromey.com> * dwarf2/read.c (struct dwarf2_include_psymtab): New. (dwarf2_create_include_psymtab): Use dwarf2_include_psymtab. (dwarf2_psymtab::expand_psymtab, dwarf2_psymtab::readin_p) (dwarf2_psymtab::get_compunit_symtab): Remove null checks for per_cu_data.
2020-02-26Remove casts from dwarf2/index-write.cTom Tromey2-13/+21
dwarf2/index-write.c casts pointers to "dwarf2_psymtab *", but as far as I can tell, it does not actually use any DWARF-specific fields of the psymtab. So, this patch changes this code to use partial_symtab instead. This removes nearly every cast, leaving just the unavoidable one from addrmap iteration. gdb/ChangeLog 2020-02-26 Tom Tromey <tom@tromey.com> * dwarf2/index-write.c (psym_index_map): Change type. (add_address_entry_worker, write_one_signatured_type) (recursively_count_psymbols, recursively_write_psymbols) (class debug_names, psyms_seen_size, write_gdbindex) (write_debug_names): Use partial_symtab, not dwarf2_psymtab.
2020-02-26Add debuginfod support to GDBAaron Merey17-50/+755
debuginfod is a lightweight web service that indexes ELF/DWARF debugging resources by build-id and serves them over HTTP. This patch enables GDB to query debuginfod servers for separate debug files and source code when it is otherwise not able to find them. GDB can be built with debuginfod using the --with-debuginfod configure option. This requires that libdebuginfod be installed and found at configure time. debuginfod is packaged with elfutils, starting with version 0.178. For more information see https://sourceware.org/elfutils/. Tested on x86_64 Fedora 31. gdb/ChangeLog: 2020-02-26 Aaron Merey <amerey@redhat.com> * Makefile.in: Handle optional debuginfod support. * NEWS: Update. * README: Add --with-debuginfod summary. * config.in: Regenerate. * configure: Regenerate. * configure.ac: Handle optional debuginfod support. * debuginfod-support.c: debuginfod helper functions. * debuginfod-support.h: Ditto. * doc/gdb.texinfo: Add --with-debuginfod to configure options summary. * dwarf2/read.c (dwarf2_get_dwz_file): Query debuginfod servers when a dwz file cannot be found. * elfread.c (elf_symfile_read): Query debuginfod servers when a debuginfo file cannot be found. * source.c (open_source_file): Query debuginfod servers when a source file cannot be found. * top.c (print_gdb_configuration): Include --{with,without}-debuginfod in the output. gdb/testsuite/ChangeLog: 2020-02-26 Aaron Merey <amerey@redhat.com> * gdb.debuginfod: New directory for debuginfod tests. * gdb.debuginfod/main.c: New test file. * gdb.debuginfod/fetch_src_and_symbols.exp: New tests.
2020-02-26gdb: print thread names in thread apply command outputJérémie Galarneau2-6/+14
This makes the thread apply command print the thread's name. The use of target_pid_to_str is replaced by thread_target_id_str, which provides the same output as "info threads". Before: (gdb) thread apply 2 bt Thread 2 (Thread 0x7fd245602700 (LWP 3837)): [...] After: (gdb) thread apply 2 bt Thread 2 (Thread 0x7fd245602700 (LWP 3837) "HT cleanup"): [...] The thread's description header is pre-computed before running the command since the command may change the selected inferior. This is not permitted by thread_target_id_str as target_thread_name asserts that `info->inf == current_inferior ()`. This situation arises in the `gdb.threads/threadapply.exp` test which kills and removes the inferior as part of a "thread apply" command. gdb/ChangeLog: * thread.c (thr_try_catch_cmd): Print thread name.
2020-02-26Move more declarations from dwarf2/loc.h to dwarf2/read.hSimon Marchi4-35/+54
All these functions have their implementations in dwarf2/read.c, so move their declarations to dwarf2/read.h. Move the doc to the header, at the same time. gdb/ChangeLog: * dwarf2/loc.h (dwarf2_fetch_die_loc_sect_off, dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes, dwarf2_fetch_die_type_sect_off): Move to... * dwarf2/read.h (dwarf2_fetch_die_loc_sect_off, dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes, dwarf2_fetch_die_type_sect_off): ... here. * dwarf2/read.c (dwarf2_fetch_die_loc_sect_off, dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes, dwarf2_fetch_die_type_sect_off): Move doc to header file.
2020-02-26[gdb] Don't set initial language if set manuallyTom de Vries5-0/+75
Initially, gdb sets the language to auto/c: ... $ gdb -q (gdb) show language The current source language is "auto; currently c". ... And after loading a c++ executable, that changes to auto/c++: ... (gdb) file a.out Reading symbols from a.out... (gdb) show language The current source language is "auto; currently c++". ... Now consider setting the language manually to c: ... $ gdb -q (gdb) show language The current source language is "auto; currently c". (gdb) set language c (gdb) show language The current source language is "c". ... The resulting language is manual/c. Surprisingly, a subsequent load of the c++ executable: ... (gdb) file a.out Reading symbols from a.out... (gdb) show language The current source language is "c++". ... gets us language manual/c++. Loading the file should get us either: - auto/c++, or - manual/c. That is, either the manual setting should be reset by loading, or the manual setting should persist. Fix this in the manual/c fashion. [ Though we could make some gdb setting to choose one or the other. ] Build and reg-tested on x86_64-linux. [ Note: In PR23710 comment 1 a cc1 binary is attached for which gdb is slow when loading and settting a breakpoint on do_rpo_vn: ... $ time.sh gdb cc1 -batch -ex "b do_rpo_vn" Breakpoint 1 at 0xd40e30: do_rpo_vn. (2 locations) maxmem: 1463496 real: 8.88 user: 8.59 system: 0.35 ... This fix enables a speedup by manually setting the language before loading, reducing executing time with ~17%, due to not having to load the full symtab containing main: ... $ time.sh gdb -iex "set language c++" cc1 -batch -ex "b do_rpo_vn" Breakpoint 1 at 0xd40e30: do_rpo_vn. (2 locations) maxmem: 1067308 real: 7.36 user: 7.14 system: 0.28 ... ] gdb/ChangeLog: 2020-02-26 Tom de Vries <tdevries@suse.de> PR gdb/25603 * symfile.c (set_initial_language): Exit-early if language_mode == language_mode_manual. gdb/testsuite/ChangeLog: 2020-02-26 Tom de Vries <tdevries@suse.de> PR gdb/25603 * gdb.base/persistent-lang.cc: New test. * gdb.base/persistent-lang.exp: New file.
2020-02-25Move dwarf2_read_addr_index declaration to dwarf2/read.hSimon Marchi4-9/+16
The implementation is in dwarf2/read.c, so the declaration belongs in dwarf2/read.h. Also, move the documentation there. gdb/ChangeLog: * dwarf2/loc.h (dwarf2_read_addr_index): Move... * dwarf2/read.h (dwarf2_read_addr_index): ... here. * dwarf2/read.c (dwarf2_read_addr_index): Move doc to header.
2020-02-25gdb/fortran: Support negative array stride in one limited caseAndrew Burgess6-6/+31
This commit adds support for negative Fortran array strides in one limited case, that is the case of a single element array with a negative array stride. The changes in this commit will be required in order for more general negative array stride support to work correctly, however, right now other problems in GDB prevent negative array strides from working in the general case. The reason negative array strides don't currently work in the general case is that when dealing with such arrays, the base address for the objects data is actually the highest addressed element, subsequent elements are then accessed with a negative offset from that address, and GDB is not currently happy with this configuration. The changes here can be summarised as, stop treating signed values as unsigned, specifically, the array stride, and offsets calculated using the array stride. This issue was identified on the mailing list by Sergio: https://sourceware.org/ml/gdb-patches/2020-01/msg00360.html The test for this issue is a new one written by me as the copyright status of the original test is currently unknown. gdb/ChangeLog: * gdbtypes.c (create_array_type_with_stride): Handle negative array strides. * valarith.c (value_subscripted_rvalue): Likewise. gdb/testsuite/ChangeLog: * gdb.fortran/derived-type-striding.exp: Add a new test. * gdb.fortran/derived-type-striding.f90: Add pointer variable for new test.
2020-02-25[AArch64] Fix typo in commentLuis Machado2-1/+5
Just a trivial typo fix in a comment. gdb/ChangeLog 2020-02-25 Luis Machado <luis.machado@linaro.org> * aarch64-tdep.c (aarch64_vnv_type): Fix comment typo.
2020-02-25gdb/testsuite: Remove source file path from test nameAndrew Burgess2-1/+6
Having paths in test names makes comparing test results from two separate runs (in different directories) harder. gdb/testsuite/ChangeLog: * gdb.base/cached-source-file.exp: Avoid source file paths in test names.
2020-02-25[gdb/testsuite] Remove gcc/93866 xfail in methods.expTom de Vries2-9/+13
The test-case gdb.go/methods.exp contains an xfail for PR gcc/93866. However, that PR has been marked resolved-wontfix, with clarification that the gccgo symbol names for methods are correct, even if they're not the same as for gc. Remove the xfail. Tested on x86_64-linux with gccgo-10. gdb/testsuite/ChangeLog: 2020-02-25 Tom de Vries <tdevries@suse.de> PR go/18926 * gdb.go/methods.exp: Remove gcc/93866 xfail.
2020-02-25Move dwarf2_get_die_type declaration to dwarf2/read.hSimon Marchi4-5/+13
Since its implementation is in dwarf2/read.c, its declaration belongs in dwarf2/read.h. Move the documentation to the .h at the same time. gdb/ChangeLog: * loc.h (dwarf2_get_die_type): Move to... * read.h (dwarf2_get_die_type): ... here. * read.c (dwarf2_get_die_type): Move doc to header.
2020-02-25gdb/copyright.py: Add generated files in gnulib/ to exclude listJoel Brobecker2-1/+8
This will prevent this script from updating the copyright year range for those files. Note that aclocal.m4 and configure are already in the EXCLUDE_ALL_LIST, so they don't need to be added to the EXCLUDE_LIST. gdb/ChangeLog: * copypright.py (EXCLUDE_LIST): Add 'gnulib/config.in' and 'gnulib/Makefile.in' to the list.
2020-02-24Fix a memory leak and remove an unused memberTom Tromey2-7/+10
I noticed that setup_type_unit_groups leaks the symtab vector -- it allocates this with XNEWVEC, but from what I can tell, nothing frees it. This patch changes it to use XOBNEWVEC. Also, the type_unit_unshareable::num_symtabs member is assigned but never read. So, this removes it. gdb/ChangeLog 2020-02-24 Tom Tromey <tom@tromey.com> * dwarf2/read.h (struct type_unit_unshareable) <num_symtabs>: Remove. * dwarf2/read.c (dwarf2_cu::setup_type_unit_groups): Use XOBNEWVEC.
2020-02-24Convert IS_TYPE_UNIT_GROUP to methodTom Tromey3-7/+20
This converts the IS_TYPE_UNIT_GROUP to a method on dwarf2_per_cu_data. gdb/ChangeLog 2020-02-24 Tom Tromey <tom@tromey.com> * dwarf2/read.h (struct dwarf2_per_cu_data) <type_unit_group_p>: New method. * dwarf2/read.c (IS_TYPE_UNIT_GROUP): Remove. (dw2_do_instantiate_symtab, dw2_get_file_names) (build_type_psymtab_dependencies, load_full_type_unit): Update.
2020-02-24Simplify setting of reading_partial_symbolsTom Tromey2-3/+10
This simplifies the setting and clearing of reading_partial_symbols, by using scoped_restore in the function that reads partial symbols. gdb/ChangeLog 2020-02-24 Tom Tromey <tom@tromey.com> * dwarf2read.c (dwarf2_build_psymtabs_hard): Use make_scoped_restore. (dwarf2_psymtab::read_symtab): Don't clear reading_partial_symbols.
2020-02-24gdb/doc: Fix header alignment of 'info threads' example outputAndrew Burgess2-1/+6
Fixes small white space issue in the example output of 'info threads'. gdb/doc/ChangeLog: * gdb.texinfo (Threads): Fix alignment in 'info threads' example output.
2020-02-24[gdb] Ensure listing of unused static var in info localsTom de Vries5-0/+76
Consider a test-case compiled with -g: ... int main (void) { static int b = 2; return 0; } ... When running info locals in main, we get: ... (gdb) info locals No locals. ... The info locals documentation states: ... Print the local variables of the selected frame, each on a separate line. These are all variables (declared either static or automatic) accessible at the point of execution of the selected frame. ... So, "info locals" should have printed static variable b. The variable is present in dwarf info: ... <2><14a>: Abbrev Number: 6 (DW_TAG_variable) <14b> DW_AT_name : b <153> DW_AT_const_value : 2 ... but instead of a location attribute, it has a const_value attribute, which causes the corresponding symbol to have LOC_CONST, which causes info locals to skip it. Fix this by handling LOC_CONST in iterate_over_block_locals. Build and reg-tested on x86_64-linux. gdb/ChangeLog: 2020-02-24 Tom de Vries <tdevries@suse.de> PR gdb/25592 * stack.c (iterate_over_block_locals): Handle LOC_CONST. gdb/testsuite/ChangeLog: 2020-02-24 Tom de Vries <tdevries@suse.de> PR gdb/25592 * gdb.base/info-locals-unused-static-var.c: New test. * gdb.base/info-locals-unused-static-var.exp: New file.
2020-02-24[gdb/testsuite] Fix layout next/prev/regs help messageTom de Vries2-3/+8
With test-case gdb.gdb/unittest.exp, I run into: ... (gdb) maintenance selftest^M ... Running selftest help_doc_invariants.^M help doc broken invariant: command 'layout next' help doc first line is \ not terminated with a '.' character^M help doc broken invariant: command 'layout prev' help doc first line is \ not terminated with a '.' character^M help doc broken invariant: command 'layout regs' help doc first line is \ not terminated with a '.' character^M Self test failed: self-test failed at help-doc-selftests.c:95^M ... Fix this by adding the missing '.' character. Build and reg-tested on x86_64-linux. gdb/ChangeLog: 2020-02-24 Tom de Vries <tdevries@suse.de> * tui/tui-layout.c (_initialize_tui_layout): Fix help messages for commands layout next/prev/regs.