aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2021-06-07gdb_rl_find_completion_word: Remove 'found_quote' localPedro Alves2-20/+9
Compiling GDB with current git Clang (future 13) runs into this: src/gdb/completer.c:287:18: error: variable 'found_quote' set but not used [-Werror,-Wunused-but-set-variable] int scan, end, found_quote, delimiter, pass_next, isbrk; ^ gdb_rl_find_completion_word came to life as a modified (stripped down) version of readline's internal _rl_find_completion_word function. When I added it, I don't remember whether I realized that 'found_quote' wasn't really necessary. Maybe I kept it thinking of keeping the source code in sync with readline? I don't recall anymore. Since the function is already stripped down compared to the original, stripping it down some more doesn't hurt. So fix the issue by removing the unnecessary code. gdb/ChangeLog: yyyy-mm-dd Pedro Alves <pedro@palves.net> * completer.c (RL_QF_SINGLE_QUOTE, RL_QF_DOUBLE_QUOTE) (RL_QF_BACKSLASH, RL_QF_OTHER_QUOTE): Delete. (gdb_rl_find_completion_word): Remove write-only 'found_quote' local.
2021-06-07nat/amd64-linux-siginfo.c: Remove typedefsPedro Alves2-14/+28
Since GDB is written in C++ now, we don't need struct/union typedefs any more. Remove them from nat/amd64-linux-siginfo.c. gdb/ChangeLog: yyyy-mm-dd Pedro Alves <pedro@palves.net> * nat/amd64-linux-siginfo.c (union nat_sigval): Rename to ... (nat_sigval_t): ... this and remove typedef of same name. (struct nat_siginfo): Rename to ... (nat_siginfo_t): ... this and remove typedef of same name. (struct compat_sigval): Rename to ... (compat_sigval_t): ... this and remove typedef of same name. (struct compat_siginfo): Rename to ... (compat_siginfo_t): ... this and remove typedef of same name. (struct compat_x32_siginfo): Rename to ... (compat_x32_siginfo_t): ... this and remove typedef of same name. (amd64_linux_siginfo_fixup_common): Adjust.
2021-06-07nat/amd64-linux-siginfo.c: Move align attribute from typedef to structPedro Alves2-2/+7
Compiling GDB with current git Clang (future 13) fails with (among other problems), this issue: $ make nat/amd64-linux-siginfo.o CXX nat/amd64-linux-siginfo.o src/gdb/nat/amd64-linux-siginfo.c:590:35: warning: passing 4-byte aligned argument to 8-byte aligned parameter 1 of 'compat_x32_siginfo_from_siginfo' may result in an unaligned pointer access [-Walign-mismatch] compat_x32_siginfo_from_siginfo ((struct compat_x32_siginfo *) inf, ^ 1 warning generated. The problem is that: - The flagged code is casting to "struct compat_x32_siginfo" pointer directly instead of to a pointer to the compat_x32_siginfo_t typedef. The called function is declared with a compat_x32_siginfo_t typedef pointer parameter. - Only the typedef has the __aligned__ attribute. Fix this by moving the attribute to the struct, so both struct and typedef have the same alignment. The next patch removes the typedefs. gdb/ChangeLog: yyyy-mm-dd Pedro Alves <pedro@palves.net> * nat/amd64-linux-siginfo.c (compat_x32_siginfo_t): Move __attribute__ __aligned__ from the typedef to the struct.
2021-06-07gdb/testsuite: gdb.base/continue-all-already-running.exp: add fail if can't ↵Simon Marchi2-0/+6
run to main While doing some changes, I managed to break this test in a way that running to main didn't work. However, it didn't produce any FAIL. I noticed because I diff'ed the results and saw some PASSes unexpectedly disappear, but that's a bit fragile. Add a fail in case this test fails to run to main. Ideally, I think that runto_main should by default produce a FAIL when it fails (the opposite of the existing logic), but that's a project of its own, so just fix this test for the moment. gdb/testsuite/ChangeLog: * gdb.base/continue-all-already-running.exp: Call fail if can't run to main. Change-Id: I84b816a126c92ac579ed5ebbe39b017bd5cb7096
2021-06-07gdb: handle case where type alignment is unknownAndrew Burgess5-1/+168
It was spotted that if type_align returned 0 then it was possible to trigger a divide by zero exception within GDB. It turns out this will only happen in an edge case where GDB is unable to figure out the alignment of a field within a structure. The attached test generates some non-standard, probably broken, DWARF, that triggers this condition, and then fixes this issue by throwing an exception when this case occurs. gdb/ChangeLog: PR gdb/27847 * amd64-tdep.c (amd64_has_unaligned_fields): Move call to type_align, and spot case where the alignment is unknown. gdb/testsuite/ChangeLog: PR gdb/27847 * gdb.dwarf2/dw2-weird-type-len.c: New file. * gdb.dwarf2/dw2-weird-type-len.exp: New file.
2021-06-07Add Power 10 PLT instruction patternsCarl Love4-3/+218
gdb/ChangeLog: 2021-06-07 Carl Love <cel@us.ibm.com> * ppc-tdep.h (ppc_insn_prefix_dform): Declare. * ppc64-tdep.c(insn_md, insn_x, insn_xo): New macros. (ppc64_plt_pcrel_entry_point, ppc64_pcrel_linkage1_target, ppc64_pcrel_linkage2_target): New functions. (ppc64_standard_linkage9, ppc64_standard_linkage10, ppc64_standard_linkage11, ppc64_standard_linkage12): New ppc instruction patterns. (ppc64_standard_linkage9, ppc64_standard_linkage10, ppc64_standard_linkage11, ppc64_standard_linkage12): New variables in define MAX expression. (ppc64_skip_trampoline_code_1): Handle ppc64_standard_linkage9, ppc64_standard_linkage10, ppc64_standard_linkage11, ppc64_standard_linkage12. * (ppc_insn_prefix_dform): New function.
2021-06-07gdb/testsuite: use proc_with_prefix in gdb.base/attach.expSimon Marchi2-26/+29
Use proc_with_prefix for test_command_line_attach_run, as we do for other procs. gdb/testsuite/ChangeLog: * gdb.base/attach.exp (test_command_line_attach_run): Use proc_with_prefix. Change-Id: I47b61bb91b6ac0570ad7556a824f874ea50c7cda
2021-06-07gdb: set only inferior_ptid in sparc_{fetch,store}_inferior_registersSimon Marchi2-6/+11
The past commit d1e93af64a6b ("gdb: set current thread in sparc_{fetch,collect}_inferior_registers (PR gdb/27147)") changed sparc_fetch_inferior_registers and sparc_store_inferior_registers to look up the thread corresponding to the regcache's ptid and make it the current thread. The reason being that down the call chain, some functions (like sparc_supply_rwindow) can do some memory reads or write, through target_read_memory/target_write_memory, and those rely on the current global context. There is one small problem with this approach: when debugging a multi-threaded program, the regcache for a new thread is created just before the corresponding thread_info is created. In fact, the regcache is created somewhere during the call to thread_from_lwp, which is responsible for creating the thread_info: #8 0x0000010000ab9968 in internal_error (file=0x10000bfca20 "/home/simark/src/binutils-gdb/gdb/thread.c", line=1346, fmt=0x10000bfc918 "%s: Assertion `%s' failed.") at /home/simark/src/binutils-gdb/gdbsupport/errors.cc:55 #9 0x0000010000827f3c in switch_to_thread (thr=0x0) at /home/simark/src/binutils-gdb/gdb/thread.c:1346 #10 0x0000010000753444 in sparc_fetch_inferior_registers (proc_target=0x10000fa8cb0 <the_sparc64_linux_nat_target>, regcache=0x10000ff03c0, regnum=-1) at /home/simark/src/binutils-gdb/gdb/sparc-nat.c:175 #11 0x000001000075b908 in sparc64_linux_nat_target::fetch_registers (this=0x10000fa8cb0 <the_sparc64_linux_nat_target>, regcache=0x10000ff03c0, regnum=-1) at /home/simark/src/binutils-gdb/gdb/sparc64-linux-nat.c:38 #12 0x00000100007fe6f4 in target_ops::fetch_registers (this=0x10000f7feb0 <the_thread_db_target>, arg0=0x10000ff03c0, arg1=-1) at /home/simark/src/binutils-gdb/gdb/target-delegates.c:496 #13 0x00000100008162a0 in target_fetch_registers (regcache=0x10000ff03c0, regno=-1) at /home/simark/src/binutils-gdb/gdb/target.c:3287 #14 0x000001000060a4bc in ps_lgetregs (ph=0x10001264368, lwpid=458727, gregset=0x7feff97d388) at /home/simark/src/binutils-gdb/gdb/proc-service.c:158 #15 0xffff800103e32420 in __td_ta_lookup_th_unique (ta_arg=0x100012d7080, lwpid=<optimized out>, th=0x7feff97d7c8) at td_ta_map_lwp2thr.c:119 #16 0xffff800103e32604 in td_ta_map_lwp2thr (ta_arg=0x100012d7080, lwpid=<optimized out>, th=0x7feff97d7c8) at td_ta_map_lwp2thr.c:207 #17 0x000001000051fee8 in thread_from_lwp (stopped=0x100011a3650, ptid=...) at /home/simark/src/binutils-gdb/gdb/linux-thread-db.c:415 #18 0x0000010000520150 in thread_db_notice_clone (parent=..., child=...) at /home/simark/src/binutils-gdb/gdb/linux-thread-db.c:446 #19 0x00000100005068a8 in linux_handle_extended_wait (lp=0x10001230700, status=4479) at /home/simark/src/binutils-gdb/gdb/linux-nat.c:1978 #20 0x000001000050a278 in linux_nat_filter_event (lwpid=458724, status=198015) at /home/simark/src/binutils-gdb/gdb/linux-nat.c:2913 #21 0x000001000050b818 in linux_nat_wait_1 (ptid=..., ourstatus=0x7feff97e8d0, target_options=...) at /home/simark/src/binutils-gdb/gdb/linux-nat.c:3194 #22 0x000001000050ca4c in linux_nat_target::wait (this=0x10000fa8cb0 <the_sparc64_linux_nat_target>, ptid=..., ourstatus=0x7feff97e8d0, target_options=...) at /home/simark/src/binutils-gdb/gdb/linux-nat.c:3432 #23 0x00000100005237ec in thread_db_target::wait (this=0x10000f7feb0 <the_thread_db_target>, ptid=..., ourstatus=0x7feff97e8d0, options=...) at /home/simark/src/binutils-gdb/gdb/linux-thread-db.c:1379 #24 0x00000100007fa668 in target_wait (ptid=..., status=0x7feff97e8d0, options=...) at /home/simark/src/binutils-gdb/gdb/target.c:2000 #25 0x00000100004adb0c in do_target_wait_1 (inf=0x10001173170, ptid=..., status=0x7feff97e8d0, options=...) at /home/simark/src/binutils-gdb/gdb/infrun.c:3464 #26 0x00000100004add48 in operator() (__closure=0x7feff97e658, inf=0x10001173170) at /home/simark/src/binutils-gdb/gdb/infrun.c:3527 #27 0x00000100004ae15c in do_target_wait (wait_ptid=..., ecs=0x7feff97e8a8, options=...) at /home/simark/src/binutils-gdb/gdb/infrun.c:3540 #28 0x00000100004af254 in fetch_inferior_event () at /home/simark/src/binutils-gdb/gdb/infrun.c:3880 #29 0x0000010000486ef8 in inferior_event_handler (event_type=INF_REG_EVENT) at /home/simark/src/binutils-gdb/gdb/inf-loop.c:42 The problem is that while sparc_fetch_inferior_registers runs and is asked to read the registers of a given ptid, there isn't a thread_info with that ptid yet. So, find_thread_ptid returns nullptr, and switch_to_thread gives an internal error. Fix this by only setting inferior_ptid, instead of the whole global context, as switch_to_thread does. This is sufficient for target_read_memory / target_write_memory to work down the line. Ideally, it would be nice to be able to pass the ptid down the whole call chain and to target_read_memory / target_write_memory, so that this setting of inferior_ptid would not be necessary. But this is not going to happen soon. This fixes running a multi-threaded program, which would hit the internal error show in the call stack above. gdb/ChangeLog: PR gdb/27899 * sparc-nat.c (sparc_fetch_inferior_registers): Set inferior_ptid instead of using switch_to_thread. (sparc_store_inferior_registers): Likewise. Change-Id: I0b6ddb3af9b11f67b10ee46a734fb82ecc6462d5
2021-06-07[gdb/testsuite] Fix gdb.base/run-attach-while-running.expTom de Vries2-1/+13
With a testsuite setup modified to make expect wait a little bit longer for gdb output (see PR27957), I reliably run into: ... 27 return SYSCALL_CANCEL (nanosleep, requested_time, remaining);^M (gdb) ^M Thread 2 "run-attach-whil" stopped.^M 0x00007f13c85a74c0 in __GI___nanosleep () at nanosleep.c:27^M 27 return SYSCALL_CANCEL (nanosleep, requested_time, remaining);^M FAIL: gdb.base/run-attach-while-running.exp: threaded=1: \ run-or-attach=attach: non-stop=on: test: attach to process (timeout) ... The problem is that we're trying to match the gdb_prompt using gdb_test which uses '$gdb_prompt $'. The terminating '$' prevents the match. Fix this by rewriting the gdb_test into a gdb_test_multiple and dropping the '$'. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-06-07 Tom de Vries <tdevries@suse.de> PR testsuite/27908 * gdb.base/run-attach-while-running.exp (test): Don't match prompt after attach using '$gdb_prompt $'.
2021-06-07[gdb/testsuite] Simplify gdb.base/info-types.exp.tclTom de Vries2-12/+13
The regexp matching state machine in gdb.base/info-types.exp.tcl handles "File .*:" lines individually. Now that we do line-by-line matching, that's no longer necessary. Simplify accordingly. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-06-07 Tom de Vries <tdevries@suse.de> * gdb.base/info-types.exp.tcl: Remove "File .*" matching from regexp matching state machine.
2021-06-07[gdb/testsuite] Fix gdb.base/new-ui-pending-input.exp timeoutTom de Vries2-1/+7
With a testsuite setup modified to make expect wait a little bit longer for gdb output (see PR27957), I run into: ... PASS: gdb.base/new-ui-pending-input.exp: spawn gdb print 1^M print 2^M print 3^M (gdb) $1 = 1^M (gdb) $2 = 2^M (gdb) $3 = 3^M (gdb) PASS: gdb.base/new-ui-pending-input.exp: initial prompt on extra console ^M Breakpoint 1, main () at new-ui-pending-input.c:25^M 25 return 0; /* set breakpoint here */^M FAIL: gdb.base/new-ui-pending-input.exp: print 1 on extra console (timeout) ... Usually, I get a pass instead. In the passing case, the "initial prompt" PASS is after the first prompt: ... PASS: gdb.base/new-ui-pending-input.exp: spawn gdb print 1^M print 2^M print 3^M (gdb) PASS: gdb.base/new-ui-pending-input.exp: initial prompt on extra console ... while in the failing case, that PASS is after the fourth prompt. The regexp doesn't match the first prompt because it terminates with a '$': ... -re "$gdb_prompt $" { ... Fix this by removing the terminating '$' and prefixing the regex with something unique to the first prompt: "print 3". Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-06-07 Tom de Vries <tdevries@suse.de> * gdb.base/new-ui-pending-input.exp (test_command_line_new_ui_pending_input): Fix regexp for "initial prompt on extra console".
2021-06-07[gdb/testsuite] Fix info-types-c.expTom de Vries2-7/+12
Recently, I've rewritten gdb.base/info-types.exp.tcl to do processing line-by-line (commit 2129a942553). When building gdb with -O0, this test passes for me, but with -O2 I sometimes run into: ... FAIL: gdb.base/info-types-c.exp: info types (state == 1) ... The output the failing gdb_test_multiple is trying to parse is: ... (gdb) info types^M All defined types:^M ^M File src/gdb/testsuite/gdb.base/info-types.c:^M 52: typedef enum {...} anon_enum_t;^M ... (gdb) ... and the FAIL with state == 1 means that: - the regexp for "All defined types:" did trigger, and that - the regexp for "File .*info-types.c" didn't trigger. This is due to the fact that the empty line inbetween is supposed to be matched by the "random line" regexp "^\r\n(\[^\r\n\]*)(?=\r\n)", which doesn't happen because instead the earlier regexp consuming the gdb prompt matches. Fix this by moving the "random line" regexp up. [ Note that that regexp does not consume the gdb prompt, because it requires (but doesn't consume) a terminating "\r\n". Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-06-07 Tom de Vries <tdevries@suse.de> * gdb.base/info-types.exp.tcl (run_test): Move "random line" regexp up.
2021-06-06gdb/testsuite: set sysroot in gdb.server/stop-reply-no-thread-multi.expSimon Marchi2-0/+12
I get some random timeouts in this test due to big debug info taking a lot of time to read through gdbserver. When host and target are on the same machine, clear the sysroot parameter so that GDB reads the files from the local file system, as we already do in many tests. I agree with what Pedro says here: https://sourceware.org/pipermail/gdb-patches/2019-March/156568.html that if this is bad for us, it's also bad for users, so we should be fixing the slowness instead. But so far nobody seems to be working on it, and the testsuite timeouts are getting in the way, so I think this "set sysroot" is a net positive for now. Without this patch, the test takes over 2 minutes to run (most of it "downloading" libc debug info), with it it takes 10 seconds. gdb/testsuite/ChangeLog: * gdb.server/stop-reply-no-thread-multi.exp: Clear sysroot when host and target are local. Change-Id: Ieb6304f0e56b4575af450913de4210c667c6bf7b
2021-06-05Fix gdb crash due to SIGPIPE when the compile command failsBernd Edlinger2-0/+36
Due to the SIGPIPE the gdb process is killed here, which is not helpful. 2021-06-05 Bernd Edlinger <bernd.edlinger@hotmail.de> * compile/compile.c (scoped_ignore_sigpipe): New helper class. (compile_to_object): Ignore SIGPIPE before calling the plugin.
2021-06-05Really fix data-directory/Makefile rebuildingTom Tromey2-1/+6
Oops, I botched the last patch to fix data-directory/Makefile rebuilding, by copying the config.status line and forgetting to update the directory name. This one fixes the problem for real. gdb/ChangeLog 2021-06-05 Tom Tromey <tom@tromey.com> * data-directory/Makefile.in (Makefile): Use correct directory name.
2021-06-05Fix gdb/data-directory Makefile-regeneration ruleTom Tromey2-1/+5
My recent changes to the gdb build removed a special case for data-directory/Makefile, but neglected to update the rule in that Makefile. This patch fixes the error by rewriting this rule. gdb/ChangeLog 2021-06-05 Tom Tromey <tom@tromey.com> * data-directory/Makefile.in (Makefile): Rewrite.
2021-06-05Use ACX_NONCANONICAL_TARGET in gdb/configureTom Tromey3-0/+26
Shahab Vahedi pointed out that the patch to remove gdb/testsuite/configure regressed the site.exp creation a bit -- it left an unresolved configure substitution. Andrew Burgess pointed out that the patch removed the call to ACX_NONCANONICAL_TARGET, which caused this problem. This patch adds ACX_NONCANONICAL_TARGET to gdb's configure, and fixes the bug. gdb/ChangeLog 2021-06-05 Tom Tromey <tromey@adacore.com> * configure: Rebuild. * configure.ac: Add ACX_NONCANONICAL_TARGET.
2021-06-05Fix symbol constants tests for Python 3Hannes Domani2-22/+26
gdb/testsuite/ChangeLog: 2021-06-05 Hannes Domani <ssbssa@yahoo.de> * gdb.python/py-symbol.exp: Fix tests for Python 3.
2021-06-05arc: Add 'set disassembler-options' supportShahab Vahedi8-4/+92
Implement ARC target support for passing options to the disassembler through the command interface. e.g.: gdb> set disassembler-options cpu=hs38_linux ... gdb/ChangeLog: * NEWS: Document 'set disassembler-options' support for the ARC target. * arc-tdep.c (arc_gdbarch_init): Set 'gdbarch_valid_disassembler_options'. gdb/doc/ChangeLog: * gdb.texinfo (Source and Machine Code): Document 'set disassembler-options' support for the ARC target. gdb/testsuite/ChangeLog: * gdb.arch/arc-disassembler-options.exp: New test. * gdb.arch/arc-disassembler-options.s: New test source.
2021-06-04Add PROP_VARIABLE_NAMETom Tromey12-5/+312
With -fgnat-encodings=minimal, an internal version (these patches will be upstreamed in the near future) of the Ada compiler can emit DWARF for an array where the bound comes from a variable, like: <1><12a7>: Abbrev Number: 7 (DW_TAG_array_type) <12a8> DW_AT_name : (indirect string, offset: 0x1ae9): pck__my_array [...] <2><12b4>: Abbrev Number: 8 (DW_TAG_subrange_type) <12b5> DW_AT_type : <0x1294> <12b9> DW_AT_upper_bound : <0x1277> With the upper bound DIE being: <1><1277>: Abbrev Number: 2 (DW_TAG_variable) <1278> DW_AT_name : (indirect string, offset: 0x1a4d): pck__my_length___U <127c> DW_AT_type : <0x128f> <1280> DW_AT_external : 1 <1280> DW_AT_artificial : 1 <1280> DW_AT_declaration : 1 Note that the variable is just a declaration -- in this situation, the variable comes from another compilation unit, and must be found when trying to compute the array bound. This patch adds a new PROP_VARIABLE_NAME kind, to enable this search. This same scenario can occur with DW_OP_GNU_variable_value, so this patch adds support for that as well. gdb/ChangeLog 2021-06-04 Tom Tromey <tromey@adacore.com> * dwarf2/read.h (dwarf2_fetch_die_type_sect_off): Add 'var_name' parameter. * dwarf2/loc.c (dwarf2_evaluate_property) <case PROP_VARIABLE_NAME>: New case. (compute_var_value): New function. (sect_variable_value): Use compute_var_value. * dwarf2/read.c (attr_to_dynamic_prop): Handle DW_TAG_variable. (var_decl_name): New function. (dwarf2_fetch_die_type_sect_off): Add 'var_name' parameter. * gdbtypes.h (enum dynamic_prop_kind) <PROP_VARIABLE_NAME>: New constant. (union dynamic_prop_data) <variable_name>: New member. (struct dynamic_prop) <variable_name, set_variable_name>: New methods. gdb/testsuite/ChangeLog 2021-06-04 Tom Tromey <tromey@adacore.com> * gdb.ada/array_of_symbolic_length.exp: New file. * gdb.ada/array_of_symbolic_length/foo.adb: New file. * gdb.ada/array_of_symbolic_length/gl.adb: New file. * gdb.ada/array_of_symbolic_length/gl.ads: New file. * gdb.ada/array_of_symbolic_length/pck.adb: New file. * gdb.ada/array_of_symbolic_length/pck.ads: New file.
2021-06-04gdb: add some additional debug output in remote.cAndrew Burgess2-0/+14
I needed more debug output from: remote_target::select_thread_for_ambiguous_stop_reply I thought this would be useful for others too. gdb/ChangeLog: * remote.c (remote_target) <select_thread_for_ambiguous_stop_reply>: Add additional debug output.
2021-06-04Forward mouse click to python TUI windowHannes Domani4-0/+33
If the TUI window object implements the click method, it is called for each mouse click event in this window. gdb/ChangeLog: 2021-06-04 Hannes Domani <ssbssa@yahoo.de> * python/py-tui.c (class tui_py_window): Add click function. (tui_py_window::click): Likewise. gdb/doc/ChangeLog: 2021-06-04 Hannes Domani <ssbssa@yahoo.de> * python.texi (TUI Windows In Python): Document Window.click.
2021-06-04Initial TUI mouse supportHannes Domani5-0/+62
Implements an overridable tui_win_info::click method whose arguments are the mouse coordinates inside the specific window, and the mouse button clicked. And if the curses implementation supports 5 buttons, the 4th and 5th buttons are used for scrolling. gdb/ChangeLog: 2021-06-04 Hannes Domani <ssbssa@yahoo.de> * ser-mingw.c (console_select_thread): Handle MOUSE_EVENT. * tui/tui-data.h (struct tui_win_info): Add click function. * tui/tui-io.c (tui_prep_terminal): Enable mouse events. (tui_deprep_terminal): Disable mouse events. (tui_dispatch_ctrl_char): Handle KEY_MOUSE. * tui/tui.c (tui_disable): Disable mouse events.
2021-06-03gdb: fix eval.c assert during inferior exit eventMagne Hov5-1/+54
Evaluating expressions from within an inferior exit event handler can cause a crash: echo "int main() { return 0; }" > repro.c gcc -g repro.c -o repro ./gdb -q --ex "set language c++" --ex "python gdb.events.exited.connect(lambda _: gdb.execute('set \$_a=0'))" --ex "run" repro Reading symbols from repro... Starting program: /home/mhov/repos/binutils-gdb-master/install-bad/bin/repro [Inferior 1 (process 1974779) exited normally] ../../gdb/thread.c:72: internal-error: thread_info* inferior_thread(): Assertion `current_thread_ != nullptr' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) [answered Y; input not from terminal] This is a bug, please report it. For instructions, see: <https://www.gnu.org/software/gdb/bugs/>. Backtrace 0 in internal_error of ../../gdbsupport/errors.cc:51 1 in inferior_thread of ../../gdb/thread.c:72 2 in expression::evaluate of ../../gdb/eval.c:98 3 in evaluate_expression of ../../gdb/eval.c:115 4 in set_command of ../../gdb/printcmd.c:1502 5 in do_const_cfunc of ../../gdb/cli/cli-decode.c:101 6 in cmd_func of ../../gdb/cli/cli-decode.c:2181 7 in execute_command of ../../gdb/top.c:670 ... 22 in python_inferior_exit of ../../gdb/python/py-inferior.c:182 In `expression::evaluate (...)' there is a call to `inferior_thread ()' that is guarded by `target_has_execution ()': struct value * expression::evaluate (struct type *expect_type, enum noside noside) { gdb::optional<enable_thread_stack_temporaries> stack_temporaries; if (target_has_execution () && language_defn->la_language == language_cplus && !thread_stack_temporaries_enabled_p (inferior_thread ())) stack_temporaries.emplace (inferior_thread ()); The `target_has_execution ()' guard maps onto `inf->pid' and the `inferior_thread ()' call assumes that `current_thread_' is set to something meaningful: struct thread_info* inferior_thread (void) { gdb_assert (current_thread_ != nullptr); return current_thread_; } In other words, it is assumed that if `inf->pid' is set then `current_thread_' must also be set. This does not hold at the point where inferior exit observers are notified: - `generic_mourn_inferior (...)' - `switch_to_no_thread ()' - `current_thread_ = nullptr;' - `exit_inferior (...)' - `gdb::observers::inferior_exit.notify (...)' - `inf->pid = 0' The inferior exit notification means that a Python handler can get a chance to run while `current_thread' has been cleared and the `inf->pid' has not been cleared. Since the Python handler can call any GDB command with `gdb.execute(...)' (in my case `gdb.execute("set $_a=0")' we can end up evaluating expressions and asserting in `evaluate_subexp (...)'. This patch adds a test in `evaluate_subexp (...)' to check the global `inferior_ptid' which is reset at the same time as `current_thread_'. Checking `inferior_ptid' at the same time as `target_has_execution ()' seems to be a common pattern: $ git grep -n -e inferior_ptid --and -e target_has_execution gdb/breakpoint.c:2998: && (inferior_ptid == null_ptid || !target_has_execution ())) gdb/breakpoint.c:3054: && (inferior_ptid == null_ptid || !target_has_execution ())) gdb/breakpoint.c:4587: if (inferior_ptid == null_ptid || !target_has_execution ()) gdb/infcmd.c:360: if (inferior_ptid != null_ptid && target_has_execution ()) gdb/infcmd.c:2380: /* FIXME: This should not really be inferior_ptid (or target_has_execution). gdb/infrun.c:3438: if (!target_has_execution () || inferior_ptid == null_ptid) gdb/remote.c:11961: if (!target_has_execution () || inferior_ptid == null_ptid) gdb/solib.c:725: if (target_has_execution () && inferior_ptid != null_ptid) The testsuite has been run on 5.4.0-59-generic x86_64 GNU/Linux: - Ubuntu 20.04.1 LTS - gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 - DejaGnu version 1.6.2 - Expect version 5.45.4 - Tcl version 8.6 - Native configuration: x86_64-pc-linux-gnu - Target: unix Results show a few XFAIL in gdb.threads/attach-many-short-lived-threads.exp. The existing py-events.exp tests are skipped for native-gdbserver and fail for native-extended-gdbserver, but the new tests pass with native-extended-gdbserver when run without the existing tests. gdb/ChangeLog: 2021-06-03 Magne Hov <mhov@undo.io> PR python/27841 * eval.c (expression::evaluate): Check inferior_ptid. gdb/testsuite/ChangeLog: 2021-06-03 Magne Hov <mhov@undo.io> PR python/27841 * gdb.python/py-events.exp: Extend inferior exit tests. * gdb.python/py-events.py: Print inferior exit PID.
2021-06-03Update my email address in MAINTAINERSPedro Alves2-3/+9
gdb/ChangeLog: yyyy-mm-dd Pedro Alves <pedro@palves.net> * MAINTAINERS (The Official FSF-appointed GDB Maintainers): Remove affiliation. (Global Maintainers): Update my address. (Write After Approval): Remove stale entry. Change-Id: I3266fedeebfa6800faa2217baf6c032408e84902
2021-06-03Report additional details for signals received on FreeBSD.John Baldwin2-0/+293
Provide a description for si_code values as a sigcode-meaning field. For signals raised by a system call, provide the pid and user ID of the sending process. For signals raised by a POSIX timer exparation, provide the id of the timer. For signals raised by a POSIX message queue, provide the id of the message queue. For SIGCHLD provide the pid and user ID of the child process along with the exit status or relevant signal number. Sample output for SIGUSR1 raised by kill(): before: Program received signal SIGUSR1, User defined signal 1. kill () at kill.S:4 4 RSYSCALL(kill) after: Program received signal SIGUSR1, User defined signal 1. Sent by kill() from pid 30529 and user 1001. kill () at kill.S:4 4 RSYSCALL(kill) SIGCHLD for exited process: before: Program received signal SIGCHLD, Child status changed. after: Program received signal SIGCHLD, Child status changed. Child has exited: pid 31929, uid 1001, exit status 0. SIGALRM raised by a POSIX timer (timer_create): before: Program received signal SIGALRM, Alarm clock. after: Program received signal SIGALRM, Alarm clock. Timer expired: timerid 3. gdb/ChangeLog: * fbsd-tdep.c (FBSD_SI_USER, FBSD_SI_QUEUE, FBSD_SI_TIMER) (FBSD_SI_ASYNCIO, FBSD_SI_MESGQ, FBSD_SI_KERNEL, FBSD_SI_LWP) (FBSD_ILL_ILLOPC, FBSD_ILL_ILLOPN, FBSD_ILL_ILLADR) (FBSD_ILL_ILLTRP, FBSD_ILL_PRVOPC, FBSD_ILL_PRVREG) (FBSD_ILL_COPROC, FBSD_ILL_BADSTK, FBSD_BUS_ADRALN) (FBSD_BUS_ADRERR, FBSD_BUS_OBJERR, FBSD_BUS_OOMERR) (FBSD_SEGV_MAPERR, FBSD_SEGV_ACCERR, FBSD_SEGV_PKUERR) (FBSD_FPE_INTOVF, FBSD_FPE_INTDIV, FBSD_FPE_FLTDIV) (FBSD_FPE_FLTOVF, FBSD_FPE_FLTUND, FBSD_FPE_FLTRES) (FBSD_FPE_FLTINV, FBSD_FPE_FLTSUB, FBSD_TRAP_BRKPT) (FBSD_TRAP_TRACE, FBSD_TRAP_DTRACE, FBSD_TRAP_CAP) (FBSD_CLD_EXITED, FBSD_CLD_KILLED, FBSD_CLD_DUMPED) (FBSD_CLD_TRAPPED, FBSD_CLD_STOPPED, FBSD_CLD_CONTINUED) (FBSD_POLL_IN, FBSD_POLL_OUT, FBSD_POLL_MSG, FBSD_POLL_ERR) (FBSD_POLL_PRI, FBSD_POLL_HUP, fbsd_signal_cause) (fbsd_report_signal_info): New. (fbsd_init_abi): Use fbsd_report_signal_info as gdbarch report_signal_info method.
2021-06-03Add ChangeLog entry for previous commitMagne Hov1-0/+4
2021-06-03Add myself to gdb/MAINTAINERSMagne Hov1-0/+1
gdb/ChangeLog: 2021-06-03 Magne Hov <mhov@undo.io> * MAINTAINERS (Write After Approval): Add Magne Hov.
2021-06-03Restore gdb.SYMBOL_LABEL_DOMAIN constantHannes Domani4-0/+59
It was removed (probably by mistake) in 51e78fc5fa21870d415c52f90b93e3c6ad57be46. gdb/ChangeLog: 2021-06-03 Hannes Domani <ssbssa@yahoo.de> * python/py-symbol.c (gdbpy_initialize_symbols): Restore gdb.SYMBOL_LABEL_DOMAIN constant. gdb/testsuite/ChangeLog: 2021-06-03 Hannes Domani <ssbssa@yahoo.de> * gdb.python/py-symbol.exp: Test symbol constants.
2021-06-02Fix temp-dir leakage in per-bfd-sharing.expBernd Edlinger2-5/+9
Whan using clang as compiler this compile step fails due to the unknown option "-Wl,--build-id". This leaks the already created temp-dir. Fixed by compiling first, and creating the temp-dir only when the compile succeeded. 2021-06-02 Bernd Edlinger <bernd.edlinger@hotmail.de> * gdb.dwarf2/per-bfd-sharing.exp: Fix temp-dir leakage.
2021-06-02Fix threadapply testCarl Love2-7/+12
The current test case leaves detached processes running at the end of the test. This patch changes the test to use a barrier wait to ensure all processes exit cleanly at the end of the tests. gdb/testsuite/ChangeLog: 2021-06-02 Carl Love <cel@us.ibm.com> * gdb.threads/threadapply.c: Add global mybarrier. (main): Add pthread_barrier_init. (thread_function): Replace while loop with myp increment and pthread_barrier_wait.
2021-06-02gdb/testsuite: only add -J option when compiling with gfortranAndrew Burgess2-1/+9
We currently make use of the -J option to gfortran in order that compiled modules should be placed in the correct output directory. Obviously different compilers, e.g. flang, will have different options to achieve the same result. This commit makes it so we only add the -J flag when using a gcc based (i.e. gfortran) compiler. I had a look through the flang help page and tried a few likely looking options, but couldn't find anything that seemed to do the same thing, so, for now, I'm only adding an extra option when compiling with gfortran. This does mean that any compiler other than gfortran might run into problems if running the testsuite in parallel due to modules of the same name all being written to the same directory, and so possibly overwriting each other. gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_compile): Only add the -J option when using a gcc based Fortran compiler, for example, flang does not support this option.
2021-06-02gdb/testsuite: escape '*' character in pattern used by flangAndrew Burgess2-1/+5
One of the integer type patterns used by flang included a '*' character which was not escaped. gdb/testsuite/ChangeLog: * lib/fortran.exp (fortran_int8): Escape '*' in pattern.
2021-06-01Conditionally restore displaced stepping state after fork.John Baldwin2-4/+18
There is no default method for gdbarch_displaced_step_restore_all_in_ptid, so calling it unconditionally for fork events triggered an assertion failure on platforms that do not support displaced stepping. To fix, only invoke the method if the gdbarch supports displaced stepping. Note that not all gdbarches support both displaced stepping and fork events, so gdbarch validation does not require gdbarch_displaced_step_restore_all_in_ptid for any gdbarch supporting displaced stepping. However, the internal assertion in gdbarch_displaced_step_restore_all_in_ptid should catch any gdbarches which do support both but fail to provide this method. gdb/ChangeLog: * infrun.c (handle_inferior_event): Only call gdbarch_displaced_step_restore_all_in_ptid if gdbarch_supports_displaced_stepping is true.
2021-06-01Remove some gdb/data-directory special casesTom Tromey2-8/+5
I found an odd special case for data-directory in gdb's Makefile. I don't see a reason to have this, so this removes it in favor of having this code work in the most ordinary way for a subdirectory build. gdb/ChangeLog 2021-06-01 Tom Tromey <tromey@adacore.com> * Makefile.in (all-data-directory): Remove. (data-directory/Makefile): Remove.
2021-06-01Clean up gdb's --enable-sharedTom Tromey3-2/+7
The old testsuite configure did not use AS_HELP_STRING, and it had a typo in the help for --enable-shared. This patch fixes these problems. gdb/ChangeLog 2021-06-01 Tom Tromey <tromey@adacore.com> * configure: Rebuild. * configure.ac: Use AS_HELP_STRING for enable-shared. Fix typo.
2021-06-01Apply silent Makefile rules to gdb/testsuiteTom Tromey4-33/+47
This applies the silent-rules.mk treatment to gdb/testsuite/Makefile. gdb/ChangeLog 2021-06-01 Tom Tromey <tromey@adacore.com> * silent-rules.mk (ECHO_CC): New variable. gdb/testsuite/ChangeLog 2021-06-01 Tom Tromey <tromey@adacore.com> * Makefile.in (all): Don't print anything. ($(abs_builddir)/site.exp site.exp): Use $(ECHO_GEN). (expect-read1): Likewise. (read1.so): Use $(ECHO_CC). Include silent-rules.mk.
2021-06-01Always build 'all' in gdb/testsuiteTom Tromey2-2/+7
gdb's Makefile currently excludes testsuite from the subdirectories to build. I don't think there's a good reason for this, so this patch adds testsuite to the SUBDIRS list and removes a special case from 'all'. gdb/ChangeLog 2021-06-01 Tom Tromey <tromey@adacore.com> * Makefile.in (SUBDIRS): Add testsuite. (all): Don't exclude testsuite.
2021-06-01Remove gdb/testsuite/configureTom Tromey8-4961/+141
I didn't see a strong reason to have a separate configure script in gdb/testsuite, so this patch removes it. The few relevant configury bits are moved into gdb's configure script. Some of the old testsuite/configure script (e.g., the header check) is dead code. This also adds a Makefile rule to rebuild lib/pdtrace. This was missing from the old code. 'read1' is now a dependency of check-read1, rather than extra code at configure time. Finally, the old "ENABLE_LIBCTF" subst in gdb/configure was not used; nor was the variable defined, so this was always empty. However, the lower-case variant was used by the testsuite, so this patch renames the subst. gdb/ChangeLog 2021-06-01 Tom Tromey <tromey@adacore.com> * configure.ac: Copy some code from testsuite/configure.ac. (enable_libctf): Subst this, not ENABLE_LIBCTF. * configure: Rebuild. gdb/testsuite/ChangeLog 2021-06-01 Tom Tromey <tromey@adacore.com> * aclocal.m4, configure.ac, configure: Remove. * Makefile.in (EXTRA_RULES): Remove. ($(abs_builddir)/site.exp site.exp): Don't depend on config.status. (distclean maintainer-clean realclean, Makefile): Update. (config.status): Remove target. (lib/pdtrace): New target. (all): Don't depend on EXTRA_RULES. (check-read1): Depend on read1.so, expect-read1.
2021-06-01[gdb/symtab] Ignore cold clonesTom de Vries5-0/+148
Consider the test-case contained in this patch, compiled for c using gcc-10: ... $ gcc-10 -x c src/gdb/testsuite/gdb.cp/cold-clone.cc -O2 -g -Wall -Wextra ... When setting a breakpoint on foo, we get one breakpoint location: ... $ gdb -q -batch a.out -ex "b foo" Breakpoint 1 at 0x400560: file cold-clone.cc, line 28. ... However, when we compile for c++ instead, we get two breakpoint locations: ... $ gdb -q -batch a.out -ex "b foo" -ex "info break" Breakpoint 1 at 0x400430: foo. (2 locations) Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x0000000000400430 in foo() at cold-clone.cc:30 1.2 y 0x0000000000400560 in foo() at cold-clone.cc:28 ... The additional breakpoint location at 0x400430 corresponds to the cold clone: ... $ nm a.out | grep foo 0000000000400560 t _ZL3foov 0000000000400430 t _ZL3foov.cold ... which demangled looks like this: ... $ nm -C a.out | grep foo 0000000000400560 t foo() 0000000000400430 t foo() [clone .cold] ... [ Or, in the case of the cc1 mentioned in PR23710: ... $ nm cc1 | grep do_rpo_vn.*cold 000000000058659d t \ _ZL9do_rpo_vnP8functionP8edge_defP11bitmap_headbb.cold.138 $ nm -C cc1 | grep do_rpo_vn.*cold 000000000058659d t \ do_rpo_vn(function*, edge_def*, bitmap_head*, bool, bool) [clone .cold.138] ... ] The cold clone is a part of the function that is split off from the rest of the function because it's considered cold (not frequently executed). So while the symbol points to code that is part of a function, it doesn't point to a function entry, so the desirable behaviour for "break foo" is to ignore this symbol. When compiling for c, the symbol "foo.cold" is entered as minimal symbol with the search name "foo.cold", and the lookup using "foo" fails to find that symbol. But when compiling for c++, the symbol "foo.cold" is entered as minimal symbol with both the mangled and demangled name, and for the demangled name "foo() [clone .cold]" we get the search name "foo" (because cp_search_name_hash stops hashing at '('), and the lookup using "foo" succeeds. Fix this by recognizing the cold clone suffix and returning false for such a minimal symbol in msymbol_is_function. Tested on x86_64-linux. gdb/ChangeLog: 2021-06-01 Tom de Vries <tdevries@suse.de> PR symtab/26096 * minsyms.c (msymbol_is_cold_clone): New function. (msymbol_is_function): Use msymbol_is_cold_clone. gdb/testsuite/ChangeLog: 2021-06-01 Tom de Vries <tdevries@suse.de> PR symtab/26096 * gdb.cp/cold-clone.cc: New test. * gdb.cp/cold-clone.exp: New file.
2021-06-01gdb: run 'maint selftest' with an executable loadedAndrew Burgess3-19/+78
I spotted that 'maint selftest' with an executable loaded into GDB, would (when GDB was compiled for all targets) crash GDB. I fixed this with a commit to bfd: commit 427e4066afd13d1bf52c849849475f536e285d66 Date: Thu May 20 09:16:41 2021 +0100 gdb/bfd: avoid crash when architecture is forced to csky or riscv However, this issue was not spotted as we currently only run 'maint selftest' without an executable loaded. This commit extends the testsuite to run 'maint selftest' both with and without an executable loaded into GDB. Currently, when no executable is loaded into GDB all of the selftest pass (i.e. the fail count is 0), however, when running with an executable loaded, I am seeing 1 failure (on an x86-64 GNU/Linux host). This failure is from the ARM disassembler tests, it appears that the disassembler somehow gets itself into a state where it thinks it is in thumb mode; when running the same test without an executable loaded this doesn't happen. This commit doesn't fix the ARM disassembler issue, but I thought it was worth adding this anyway, as this will spot if GDB again starts to crash when 'maint selftest' is run. gdb/testsuite/ChangeLog: * gdb.gdb/unittest.c: New file. * gdb.gdb/unittest.exp: Run with and without a binary file loaded into GDB.
2021-06-01gdb/arm: add support for bare-metal core dumpsAndrew Burgess4-1/+226
This commit adds support for bare metal core dumps on the ARM target, and is based off of this patch submitted to the mailing list: https://sourceware.org/pipermail/gdb-patches/2020-October/172845.html Compared to the version linked above this version is updated to take account of recent changes to the core dump infrastructure in GDB, there is now more shared infrastructure for core dumping within GDB, and also some common bare metal core dumping infrastructure. As a result this patch is smaller than the original proposed patch. Further, the original patch included some unrelated changes to the simulator that have been removed from this version. I have written a ChangeLog entry as the original patch was missing one. I have done absolutely no testing of this patch. It is based on the original submitted patch, which I assume was tested, but after my modifications things might have been broken, however, the original patch author has tested this version and reported it as being good: https://sourceware.org/pipermail/gdb-patches/2021-May/178900.html The core dump format is based around generating an ELF containing sections for the writable regions of memory that a user could be using. Which regions are dumped rely on GDB's existing common core dumping code, GDB will attempt to figure out the stack and heap as well as copying out writable data sections as identified by the original ELF. Register information is added to the core dump using notes, just as it is for Linux of FreeBSD core dumps. The note types used consist of the 2 basic types you would expect in a OS based core dump, NT_PRPSINFO, NT_PRSTATUS, along with the architecture specific NT_ARM_VFP note. The data layouts for each note type are described below, in all cases, all padding fields should be set to zero. Note NT_PRPSINFO is optional. Its data layout is: struct prpsinfo_t { uint8_t padding[28]; char fname[16]; char psargs[80]; } Field 'fname' - null terminated string consisting of the basename of (up to the fist 15 characters of) the executable. Any additional space should be set to zero. If there's no executable name then this field can be set to all zero. Field 'psargs' - a null terminated string up to 80 characters in length. Any additional space should be filled with zero. This field contains the full executable path and any arguments passed to the executable. If there's nothing sensible to write in this field then fill it with zero. Note NT_PRSTATUS is required, its data layout is: struct prstatus_t { uint8_t padding_1[12]; uint16_t sig; uint8_t padding_2[10]; uint32_t thread_id; uint8_t padding_3[44]; uint32_t gregs[18]; } Field 'sig' - the signal that stopped this thread. It's implementation defined what this field actually means. Within GDB this will be the signal number that the remote target reports as the stop reason for this thread. Field 'thread_is' - the thread id for this thread. It's implementation defined what this field actually means. Within GDB this will be thread thread-id that is assigned to each remote thread. Field 'gregs' - holds the general purpose registers $a1 through to $pc at indices 0 to 15. At index 16 the program status register. Index 17 should be set to zero. Note NT_ARM_VFP is optional, its data layout is: armvfp_t { uint64_t regs[32]; uint32_t fpscr; } Field 'regs' - holds the 32 d-registers 0 to 31 in order. Field 'fpscr' - holds the fpscr register. The rules for ordering the notes is the same as for Linux. The NT_PRSTATUS note must come before any other notes about additional register sets. And for multi-threaded targets all registers for a single thread should be grouped together. This is because only NT_PRSTATUS includes a thread-id, all additional register notes after a NT_PRSTATUS are assumed to belong to the same thread until a different NT_PRSTATUS is seen. gdb/ChangeLog: PR gdb/14383 * Makefile.in (ALL_TARGET_OBS): Add arm-none-tdep.o. (ALLDEPFILES): Add arm-none-tdep.c * arm-none-tdep.c: New file. * configure.tgt (arm*-*-*): Add arm-none-tdep.o to cpu_obs.
2021-06-01gdb: avoid premature dummy frame garbage collectionAndrew Burgess6-4/+238
Consider the following chain of events: * GDB is performing an inferior call, and * the inferior calls longjmp, and * GDB detects that the longjmp has completed, stops, and enters check_longjmp_breakpoint_for_call_dummy (in breakpoint.c), and * GDB tries to unwind the stack in order to check that the dummy frame (setup for the inferior call) is still on the stack, but * The unwind fails, possibly due to missing debug information, so * GDB incorrectly concludes that the inferior has longjmp'd past the dummy frame, and so deletes the dummy frame, including the dummy frame breakpoint, but then * The inferior continues, and eventually returns to the dummy frame, which is usually (always?) on the stack, the inferior starts trying to execute the random contents of the stack, this results in undefined behaviour. This situation is already warned about in the comment on the function check_longjmp_breakpoint_for_call_dummy where we say: You should call this function only at places where it is safe to currently unwind the whole stack. Failed stack unwind would discard live dummy frames. The warning here is fine, the problem is that, even though we call the function from a location within GDB where we hope to be able to unwind, sometime the state of the inferior means that the unwind will not succeed. This commit tries to improve the situation by adding the following additional check; when GDB fails to find the dummy frame on the stack, instead of just assuming that the dummy frame can be garbage collected, first find the stop_reason for the last frame on the stack. If this stop_reason indicates that the stack unwinding may have failed then we assume that the dummy frame is still in use. However, if the last frame's stop_reason indicates that the stack unwind completed successfully then we can be confident that the dummy frame is no longer in use, and we garbage collect it. Tested on x86-64 GNU/Linux. gdb/ChangeLog: * breakpoint.c (check_longjmp_breakpoint_for_call_dummy): Add check for why the backtrace stopped. gdb/testsuite/ChangeLog: * gdb.base/premature-dummy-frame-removal.c: New file. * gdb.base/premature-dummy-frame-removal.exp: New file. * gdb.base/premature-dummy-frame-removal.py: New file. Change-Id: I8f330cfe0f3f33beb3a52a36994094c4abada07e
2021-05-31gdb: pass signature to allocate_signatured_type and signatured_type constructorSimon Marchi3-28/+34
All signatured_type constucted (even those used only for lookups in hash maps) need a signature. Enforce that by passing the signature all the way to the signatured_type constructor. gdb/ChangeLog: * dwarf2/read.h (struct structured_type) <signatured_type>: New. Update all callers. (struct dwarf2_per_bfd) <allocate_signatured_type>: Add signature parameter, update all callers. * dwar2/read.c (dwarf2_per_bfd::allocate_signatured_type): Add signature parameter. Change-Id: I99bc1f88f54127666aa133ddbbabb7f7668fa14a
2021-05-31gdb: add and use signatured_type_upSimon Marchi3-7/+13
Add an alias for std::unique_ptr<signatured_type> and use it where possible. gdb/ChangeLog: * dwarf2/read.h (signatured_type_up): New, use where possible. Change-Id: I5a41e8345551434c8beeb9f269b03bdcf27989be
2021-05-31gdb: move dwarf2_per_cu_data and signatured_type upSimon Marchi2-215/+221
Move them up before dwarf2_per_bfd, this will allow adding and using signatured_type_up in the next patch. gdb/ChangeLog: * dwarf2/read.h (signatured_type, dwarf2_per_cu_data): Move up. Change-Id: I85acad4476c8236930b6f9e53ddb8bbbad009e5e
2021-05-30Set is_debug_types in allocate_signatured_typeTom Tromey2-4/+9
All callers of allocate_signatured_type set the is_debug_types flag on the result -- in fact, they are required to, because this is the sign that downcasting the object to signatured_type is safe. This patch moves this assignment into the allocation function. 2021-05-30 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_per_bfd::allocate_signatured_type): Set is_debug_types. (create_signatured_type_table_from_index) (create_signatured_type_table_from_debug_names, add_type_unit) (read_comp_units_from_section): Update.
2021-05-30Remove dwarf2_per_bfd::m_num_psymtabsTom Tromey3-15/+12
Now that CUs and TUs are stored together in all_comp_units, the m_num_psymtabs member is no longer needed -- it is always identical to the length of the vector. This patch removes it. 2021-05-30 Tom Tromey <tom@tromey.com> * dwarf2/read.h (struct dwarf2_per_bfd) <num_psymtabs, m_num_psymtabs>: Remove. (resize_symtabs): Update. * dwarf2/read.c (dwarf2_per_bfd::allocate_per_cu) (dwarf2_per_bfd::allocate_signatured_type): Update.
2021-05-29Fix InlinedFrameDecorator exampleHannes Domani2-1/+5
Argument fobj was only available in the constructor. gdb/doc/ChangeLog: 2021-05-29 Hannes Domani <ssbssa@yahoo.de> * python.texi (Writing a Frame Filter): Fix example.
2021-05-27gdb: fix tab after space indentation issuesSimon Marchi46-138/+142
I spotted some indentation issues where we had some spaces followed by tabs at beginning of line, that I wanted to fix. So while at it, I did a quick grep to find and fix all I could find. gdb/ChangeLog: * Fix tab after space indentation issues throughout. Change-Id: I1acb414dd9c593b474ae2b8667496584df4316fd