aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2020-04-16gdb: is_linked_with_cygwin_dll: mention filename in warning messagesSimon Marchi2-6/+13
When a warning is displayed, it isn't clear to the user which file is the cause of the warning. Add the filename in there. Remove the "Failed to parse .idata section" part, since the .idata section is always mentioned one way or another anyway, so it just contributes to make the message longer than it needs to be. gdb/ChangeLog: * windows-tdep.c (is_linked_with_cygwin_dll): Add filename to warning messages.
2020-04-16gdb: is_linked_with_cygwin_dll: handle import table not at beginning of ↵Simon Marchi2-13/+39
.idata section When loading the file C:\Windows\SysWOW64\msvcrt.dll, taken from a Windows 10 system, into GDB, we get the following warning: warning: Failed to parse .idata section: name's virtual address (0x0) is outside .idata section's range [0xb82b8, 0xb97f0[. This uncovers an issue with how we parse the import table, part of the .idata section. Right now, we assume that the import table is located at the beginning of the section. That was the case in everything I had tried so far, but this file is an example where that's not true. We need to compute the offset of the import table within the .idata section, and start there, instead of at the beginning of the .idata section. Using the file mentioned above, this is the values we have to work with: A) bfd_section_vma (idata_section) 101b8000 B) Import table's virtual address b82b8 C) Image base 10100000 The virtual address that BFD returns us for the section has the image base applied, so we need to subtract it first. The offset of the table in the section is therefore: B - (A - C) This patch implements that. gdb/ChangeLog: * windows-tdep.c (is_linked_with_cygwin_dll): Consider case where import table is not at beginning of .idata section.
2020-04-16Refactor delete_program_space as a destructorPedro Alves4-47/+71
Currently, while the program_space's ctor adds the new pspace to the pspaces list, the destructor doesn't remove the pspace from the pspace list. Instead, you're supposed to use delete_program_space, to both remove the pspace from the list, and deleting the pspace. This patch eliminates delete_program_space, and makes the pspace dtor remove the deleted pspace from the pspace list itself, i.e., makes the dtor do the mirror opposite of the ctor. I found this helps with a following patch that will allocate a mock program_space on the stack. It's easier to just let the regular dtor remove the mock pspace from the pspace list than arrange to call delete_program_space instead of the pspace dtor in that situation. While at it, move the ctor/dtor intro comments to the header file, and make the ctor explicit. gdb/ChangeLog: 2020-04-16 Pedro Alves <palves@redhat.com> * inferior.c (delete_inferior): Use delete operator directly instead of delete_program_space. * progspace.c (add_program_space): New, factored out from program_space::program_space. (remove_program_space): New, factored out from delete_program_space. (program_space::program_space): Remove intro comment. Rewrite. (program_space::~program_space): Remove intro comment. Call remove_program_space. (delete_program_space): Delete. * progspace.h (program_space::program_space): Make explicit. Move intro comment here, adjusted. (program_space::~program_space): Move intro comment here, adjusted. (delete_program_space): Remove.
2020-04-16Fix Cygwin gdb buildTom Tromey4-20/+42
Simon pointed out that the windows-nat sharing series broke the Cygwin build. This patch fixes the problem, by moving the Cygwin-specific code to a new handler function. This approach is taken because this code calls find_pc_partial_function, which isn't available in gdbserver. gdb/ChangeLog 2020-04-16 Tom Tromey <tromey@adacore.com> * windows-nat.c (windows_nat::handle_access_violation): New function. * nat/windows-nat.h (handle_access_violation): Declare. * nat/windows-nat.c (handle_exception): Move Cygwin code to windows-nat.c. Call handle_access_violation. gdbserver/ChangeLog 2020-04-16 Tom Tromey <tromey@adacore.com> * win32-low.cc (windows_nat::handle_access_violation): New function.
2020-04-16[gdb/symtab] Handle PU without import in "save gdb-index"Tom de Vries6-48/+160
Consider the test-case added in this patch, with resulting dwarf: ... Compilation Unit @ offset 0xc7: Length: 0x2c (32-bit) Version: 4 Abbrev Offset: 0x64 Pointer Size: 8 <0><d2>: Abbrev Number: 2 (DW_TAG_partial_unit) <d3> DW_AT_language : 2 (non-ANSI C) <d4> DW_AT_name : imported_unit.c <1><e4>: Abbrev Number: 3 (DW_TAG_base_type) <e5> DW_AT_byte_size : 4 <e6> DW_AT_encoding : 5 (signed) <e7> DW_AT_name : int <1><eb>: Abbrev Number: 4 (DW_TAG_subprogram) <ec> DW_AT_name : main <f1> DW_AT_type : <0xe4> <f5> DW_AT_external : 1 <1><f6>: Abbrev Number: 0 Compilation Unit @ offset 0xf7: Length: 0x2c (32-bit) Version: 4 Abbrev Offset: 0x85 Pointer Size: 8 <0><102>: Abbrev Number: 2 (DW_TAG_compile_unit) <103> DW_AT_language : 2 (non-ANSI C) <104> DW_AT_name : <artificial> <1><111>: Abbrev Number: 3 (DW_TAG_subprogram) <112> DW_AT_abstract_origin: <0xeb> <116> DW_AT_low_pc : 0x4004a7 <11e> DW_AT_high_pc : 0x4004b2 <1><126>: Abbrev Number: 0 ... When run with target board cc-with-gdb-index, we run into: ... (gdb) break main warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.) <repeat> warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.) <repeat> Breakpoint 1 at 0x4004ab (gdb) PASS: gdb.dwarf2/imported-unit-runto-main.exp: setting breakpoint at main run Starting program: /data/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.dwarf2/imported-unit-runto-main/imported-unit-runto-main warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.) <repeat> warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.) <repeat> Breakpoint 1, warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.) warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.) <repeat> 0x00000000004004ab in main () warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.) <repeat> (gdb) FAIL: gdb.dwarf2/imported-unit-runto-main.exp: running to main in runto ... Looking at the .gdb_index section contents using objdump --dwarf=gdb_index, we have: ... CU table: [ 0] 0x0 - 0x2d [ 1] 0x2e - 0xa4 [ 2] 0xa5 - 0xc6 [ 3] 0xf7 - 0x126 [ 4] 0x127 - 0x2de [ 5] 0x2df - 0x300 Address table: 00000000004004a7 00000000004004b2 4 Symbol table: [489] main: 4 [global, function] ... We see that both the main symbol, and main address range map to CU 4, which has offset range 0x127 - 0x2de, while main actually is contained in CU 3 at offset range 0xf7 - 0x126. This is caused by this continue in write_gdbindex, which triggers for the PU: ... /* CU of a shared file from 'dwz -m' may be unused by this main file. It may be referenced from a local scope but in such case it does not need to be present in .gdb_index. */ if (psymtab == NULL) continue; ... The continue causes the PU to be skipped in the CU table (we can see that the PU offset range 0xc7-0xf6 is missing) but the references are not taking that into account. I've tried fixing this in the optimal way, by updating the references, but ran into trouble when follow_die_offset tries to find the CU for the inter-CU ref. Because the PU is missing from the CU table, dwarf2_find_containing_comp_unit bisects to the wrong CU. Fix this by not skipping the PU in the CU table. Build and reg-tested on x86_64-linux, with native and target boards cc-with-gdb-index, cc-with-dwz and cc-with-dwz-m. gdb/ChangeLog: 2020-04-16 Tom de Vries <tdevries@suse.de> PR symtab/25791 * dwarf2/index-write.c (write_gdbindex): Generate CU table entries for CUs without psymtab. gdb/testsuite/ChangeLog: 2020-04-16 Tom de Vries <tdevries@suse.de> PR symtab/25791 * gdb.dwarf2/gdb-add-index.exp (add_gdb_index): Move ... (ensure_gdb_index): and factor out and move ... * lib/gdb.exp (add_gdb_index, ensure_gdb_index): ... here. * gdb.dwarf2/imported-unit-runto-main.exp: New file.
2020-04-16Fix compilation of python/python.c for Python 3.9Kevin Buettner2-0/+10
This commit fixes a compilation warning/error when building GDB with Python 3.9: g++ -x c++ -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -DDNF_DEBUGINFO_INSTALL -I. -I../../gdb -I../../gdb/config -DLOCALEDIR="\"/usr/share/locale\"" -DHAVE_CONFIG_H -I../../gdb/../include/opcode -I../bfd -I../../gdb/../bfd -I../../gdb/../include -I../libdecnumber -I../../gdb/../libdecnumber -I../../gdb/../gnulib/import -I../gnulib/import -DTUI=1 -I/usr/include/guile/2.0 -pthread -I/usr/include/python3.9 -I/usr/include/python3.9 -I../../gdb/.. -pthread -Wall -Wpointer-arith -Wno-unused -Wunused-value -Wunused-variable -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable -Wno-sign-compare -Wno-error=maybe-uninitialized -Wno-mismatched-tags -Wsuggest-override -Wimplicit-fallthrough=3 -Wduplicated-cond -Wshadow=local -Wdeprecated-copy -Wdeprecated-copy-dtor -Wredundant-move -Wformat -Wformat-nonliteral -Wno-unused -Werror -c -o ser-tcp.o -MT ser-tcp.o -MMD -MP -MF ./.deps/ser-tcp.Tpo ../../gdb/ser-tcp.c ../../gdb/python/python.c: In function 'bool do_start_initialization()': ../../gdb/python/python.c:1621:23: error: 'void PyEval_InitThreads()' is deprecated [-Werror=deprecated-declarations] 1621 | PyEval_InitThreads (); | ^ In file included from /usr/include/python3.9/Python.h:141, from ../../gdb/python/python-internal.h:86, from ../../gdb/python/python.c:92: /usr/include/python3.9/ceval.h:132:37: note: declared here 132 | Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void); | ^~~~~~~~~~~~~~~~~~ Information about the deprecated function can be found here: https://docs.python.org/3.9/whatsnew/3.9.html#deprecated Specifically, with regard to PyEval_InitThreads(), it says: The PyEval_InitThreads() and PyEval_ThreadsInitialized() functions are now deprecated and will be removed in Python 3.11. Calling PyEval_InitThreads() now does nothing. The GIL is initialized by Py_Initialize() since Python 3.7. (Contributed by Victor Stinner in bpo-39877.) I chose to disable the call with a #if test using PY_VERSION_HEX. There is precedent for use of PY_VERSION_HEX; it's used in two places in python-internal.h. I noticed that under certain circumstances python-internal.h defines PyEval_InitThreads to be nothing, which accomplishes the same thing. I considered doing something similar for this case, but decided against it because, at some point in the future, the presence of PyEval_InitThreads() without some explanation will be confusing to a reader who won't be able to find PyEval_InitThreads in the current (future for us) Python API. IMO, use of the #if along with an accompanying comment seemed more straightforward. gdb/ChangeLog: * python/python.c (do_start_initialization): Don't call PyEval_InitThreads for Python 3.9 and beyond. Change-Id: I0679fc10b6b76761a99538568f13188c6d8014e0
2020-04-16[gdb/testsuite] Fix maint-expand-symbols-header-file.exp for cc-with-gdb-indexTom de Vries2-1/+12
With test-case gdb.base/maint-expand-symbols-header-file.exp and target board cc-with-gdb-index, we have: ... FAIL: gdb.base/maint-expand-symbols-header-file.exp: \ verify no symtabs are expanded ... By default, with partial symbols, we find the main function in the partial symbols, and derive the initial language setting from that, without expanding any psymtab. But that doesn't work with the indices, because the indices don't store the language with the symbols. So instead, the main psymtab is expanded to get the language of main, which causes the FAIL. Fix this by manually setting the language. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-04-16 Tom de Vries <tdevries@suse.de> * gdb.base/maint-expand-symbols-header-file.exp: Set language before loading exec.
2020-04-15Fix OpenBSD build error.Kamil Rytarowski2-6/+12
This was likely introduced by 5b6d1e4fa4fc6827c7b3f0e99ff120dfa14d65d2 gdb/ChangeLog: 2020-04-15 Kamil Rytarowski <n54@gmx.com> * obsd-nat.c (obsd_nat_target::update_thread_list): Pass "this" to thread functions. (obsd_nat_target::wait): Likewise. Change-Id: Ib8d11238c55e0ebdbcf127d1f28c9693c785527a
2020-04-15Use debug_printf in windows-nat.cTom Tromey2-4/+9
While debugging a bug on Windows, I noticed that windows-nat.c is not sending its debugging output to gdb_stdlog. This is unfortunate because it means that "set logging debugredirect" doesn't work properly. This patch fixes the problem by changing windows-nat.c to use debug_printf. Note that get_windows_debug_event also writes one debugging message unconditionally. It isn't clear to me if this really ought to use DEBUG_EVENTS or not, since it seems like perhaps it is intended to note an unexpected event occurring. So, I didn't change this. I'm checking this in. gdb/ChangeLog 2020-04-15 Tom Tromey <tromey@adacore.com> * windows-nat.c (DEBUG_EXEC, DEBUG_EVENTS, DEBUG_MEM) (DEBUG_EXCEPT): Use debug_printf.
2020-04-15gdb: Don't corrupt completions hash when expanding the hash tableAndrew Burgess4-1/+120
Commit: commit 724fd9ba432a20ef2e3f2c0d6060bff131226816 Date: Mon Jan 27 17:37:20 2020 +0000 gdb: Restructure the completion_tracker class caused the completion hash table to become corrupted if the table ever needed to grow beyond its original size of 200 elements. The hash table stores completion_tracker::completion_hash_entry objects, but hashes them based on their name, which is only one field of the object. When possibly inserting a new element we compute the hash with htab_hash_string of the new elements name, and then lookup matching elements using htab_find_slot_with_hash. If there's not matching element we create a completion_hash_entry object within the hash table. However, when we allocate the hash we pass htab_hash_string to htab_create_alloc as the hash function, and this is not OK. This means that when the hash table needs to grow, existing elements within the hash are re-hashed by passing the completion_hash_entry pointer to htab_hash_string, which obviously does not do what we expect. The solution is to create a new hash function that takes a pointer to a completion_hash_entry, and then calls htab_hash_string on the name of the entry only. This regression was spotted when running the gdb.base/completion.exp test on the aarch64 target. gdb/ChangeLog: * completer.c (class completion_tracker::completion_hash_entry) <hash_name>: New member function. (completion_tracker::discard_completions): New callback to hash a completion_hash_entry, pass this to htab_create_alloc. gdb/testsuite/ChangeLog: * gdb.base/many-completions.exp: New file.
2020-04-15Better handling of realpath() failure in windows_make_so() on CygwinJon Turney2-1/+9
It seems Cygwin's realpath() can fail on certain DLLs (apparently some AV software prevent it working on it's DLLs; See [1], [2]). Warn rather than stopping with an error if that occurs. Based on an original patch from Tim Chick. [1] https://cygwin.com/ml/cygwin/2014-08/msg00401.html [2] https://cygwin.com/ml/cygwin/2015-11/msg00353.html gdb/ChangeLog: 2016-01-20 Jon Turney <jon.turney@dronecode.org.uk> * windows-nat.c (windows_make_so): Warn rather than stopping with an error if realpath() fails.
2020-04-15Fix makeinfo warnings in gdb.texinfo and python.texi docsArtur Shepilko3-11/+18
Building gdb-9.1 on a system that has an older version of makeinfo (4.8) shows the following warnings: ----------------- make[4]: Entering directory '/home/tester/gdb-9.1/build/gdb/doc' makeinfo --split-size=5000000 --split-size=5000000 -I ../../../gdb/doc/../../readline/readline/doc -I ../../../gdb/doc/../mi -I ../../../gdb/doc \ -o gdb.info ../../../gdb/doc/gdb.texinfo ../../../gdb/doc/gdb.texinfo:21867: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21867: warning: unlikely character ] in @var. ../../../gdb/doc/gdb.texinfo:21868: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21868: warning: unlikely character ] in @var. ../../../gdb/doc/gdb.texinfo:21869: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21869: warning: unlikely character ] in @var. ../../../gdb/doc/gdb.texinfo:21872: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21872: warning: unlikely character ] in @var. ../../../gdb/doc/gdb.texinfo:21874: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21874: warning: unlikely character ] in @var. ../../../gdb/doc/gdb.texinfo:21876: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21876: warning: unlikely character ] in @var. ../../../gdb/doc/gdb.texinfo:21879: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21879: warning: unlikely character ] in @var. ../../../gdb/doc/gdb.texinfo:21931: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21931: warning: unlikely character ] in @var. ../../../gdb/doc/gdb.texinfo:21933: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21933: warning: unlikely character ] in @var. ../../../gdb/doc/gdb.texinfo:21936: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21936: warning: unlikely character ] in @var. ../../../gdb/doc/gdb.texinfo:21939: warning: unlikely character [ in @var. ../../../gdb/doc/gdb.texinfo:21939: warning: unlikely character ] in @var. ../../../gdb/doc//python.texi:3297: warning: `.' or `,' must follow @xref, not `A'. make[4]: Leaving directory '/home/tester/gdb-9.1/build/gdb/doc' ----------------- These are thrown by expressions like `@var{[host]}`, intended to produce `[HOST]`. In that context this should instead be changed to `[@var{host}]`, which has the same effect but without the warnings. As for the warning in `python.texi`, there's period missing at the end of one `@xref{}` clause. Added. gdb/doc/ChangeLog: 2020-04-15 Artur Shepilko <nomadbyte@gmail.com> * gdb.texinfo: Transform @var{[host]} to [@var{host}]; this clears makeinfo warnings. * python.texi: Add a missing period trailing an @xref{} clause; this clears a makeinfo warning.
2020-04-14Implement IP_STAT+IP_STATUS (aliases of the same format) on NetBSDKamil Rytarowski2-0/+108
Output based on FreeBSD with the following changes: - "utime+stime, children" merged from "utime, children" and "stime, children". - "Minor faults, children", "Major faults, children", "Virtual memory size" removed as not available in a direct equivalent. No new values missing or skipped in FreeBSD are printed, although there is a long list of potential candiates. gdb/ChangeLog: * nbsd-nat.c (nbsd_pid_to_kinfo_proc2): New. (nbsd_nat_target::info_proc): Add do_status.
2020-04-14[gdb] Fix missing symtab includesTom de Vries5-18/+141
[ The test-case requires commit c1a66c0629 "[gdb] Expand symbolless symtabs using maint expand-symtabs". ] Consider the debug info for the test-case included in this patch. It consists of a PU: ... <0><d2>: Abbrev Number: 2 (DW_TAG_partial_unit) <1><d3>: Abbrev Number: 0 ... imported by a CU: ... <0><df>: Abbrev Number: 2 (DW_TAG_compile_unit) <e0> DW_AT_language : 2 (non-ANSI C) <e1> DW_AT_stmt_list : 0xe9 <1><e5>: Abbrev Number: 3 (DW_TAG_imported_unit) <e6> DW_AT_import : <0xd2> [Abbrev Number: 2] <1><ea>: Abbrev Number: 0 ... and the CU has a dw2-symtab-includes.h file in the .debug_line file name table: ... The Directory Table (offset 0x101): 1 /data/gdb_versions/devel/src/gdb/testsuite/gdb.dwarf2 The File Name Table (offset 0x138): Entry Dir Time Size Name 1 1 0 0 dw2-symtab-includes.h ... After expanding all symtabs, we can see the CU listed in the user field of the PU, and vice-versa the PU listed in the includes of the CU: ... $ gdb.sh -batch \ -iex "set language c" \ outputs/gdb.dwarf2/dw2-symtab-includes/dw2-symtab-includes \ -ex "maint expand-symtabs" \ -ex "maint info symtabs" ... { ((struct compunit_symtab *) 0x394dd60) debugformat DWARF 2 producer (null) dirname (null) blockvector ((struct blockvector *) 0x394dea0) user ((struct compunit_symtab *) 0x394dba0) } { ((struct compunit_symtab *) 0x394dba0) debugformat DWARF 2 producer (null) dirname (null) blockvector ((struct blockvector *) 0x394dd10) user ((struct compunit_symtab *) (null)) ( includes ((struct compunit_symtab *) 0x394dd60) ) } ... But if we instead only expand the symtab for the dw2-symtab-includes.h file, the includes and user links are gone: ... $ gdb -batch \ -iex "set language c" \ outputs/gdb.dwarf2/dw2-symtab-includes/dw2-symtab-includes \ -ex "maint expand-symtabs dw2-symtab-includes.h" \ -ex "maint info symtabs" ... { ((struct compunit_symtab *) 0x2728210) debugformat DWARF 2 producer (null) dirname (null) blockvector ((struct blockvector *) 0x2728350) user ((struct compunit_symtab *) (null)) } { ((struct compunit_symtab *) 0x2728050) debugformat DWARF 2 producer (null) dirname (null) blockvector ((struct blockvector *) 0x27281c0) user ((struct compunit_symtab *) (null)) } ... The includes are calculated by process_cu_includes in gdb/dwarf2/read.c. In the case of expanding all symtabs: - the CU partial symtab is expanded using psymtab_to_symtab - psymtab_to_symtab calls dwarf2_psymtab::read_symtab - dwarf2_psymtab::read_symtab calls dwarf2_psymtab::expand_psymtab - dwarf2_psymtab::read_symtab calls process_cu_includes, and we have the includes In the case of expanding the symtab for dw2-symtab-includes.h: - the dw2-symtab-includes.h partial symtab is expanded using psymtab_to_symtab - psymtab_to_symtab calls dwarf2_include_psymtab::read_symtab - dwarf2_include_psymtab::read_symtab calls dwarf2_include_psymtab::expand_psymtab - dwarf2_include_psymtab::expand_psymtab calls partial_symtab::expand_dependencies - partial_symtab::expand_dependencies calls dwarf2_psymtab::expand_psymtab for the CU partial symtab - the CU partial symtab is expanded using dwarf2_psymtab::expand_psymtab - process_cu_includes is never called Fix this by making sure in dwarf2_include_psymtab::read_symtab that read_symtab is called for the CU partial symtab. Tested on x86_64-linux, with native, and target board cc-with-dwz and cc-with-dwz-m. In addition, tested test-case with target boards cc-with-gdb-index.exp, cc-with-debug-names.exp and readnow.exp. gdb/ChangeLog: 2020-04-14 Simon Marchi <simon.marchi@polymtl.ca> Tom de Vries <tdevries@suse.de> PR symtab/25718 * psympriv.h (struct partial_symtab::read_symtab) (struct partial_symtab::expand_psymtab) (struct partial_symtab::read_dependencies): Update comments. * dwarf2/read.c (struct dwarf2_include_psymtab::read_symtab): Call read_symtab for includer. (struct dwarf2_include_psymtab::expand_psymtab): Assert false. (struct dwarf2_include_psymtab::readin_p): Call readin_p () for includer. (struct dwarf2_include_psymtab::m_readin): Remove. (struct dwarf2_include_psymtab::includer): New member function. (dwarf2_psymtab::expand_psymtab): Assert !readin. gdb/testsuite/ChangeLog: 2020-04-14 Tom de Vries <tdevries@suse.de> PR symtab/25718 * gdb.dwarf2/dw2-symtab-includes.exp: New file.
2020-04-14[gdb] Expand symbolless symtabs using maint expand-symtabsTom de Vries13-24/+165
Consider this test-case, consisting of header file hello.h: ... inline static const char* foo (void) { return "foo"; } ... and source file hello.c: ... int main (void) { printf ("hello: %s\n", foo ()); return 0; } ... compiled with -g: ... $ gcc hello.c -g ... When trying to expand the partial symtab for hello.h: ... $ gdb -batch \ -iex "set language c" \ a.out \ -ex "maint expand-symtabs hello.h" \ -ex "maint info psymtabs" ... we in fact find that the partial symtab for hello.h (and corresponding includer partial symtab hello.c) have not been expanded: ... { psymtab hello.h ((struct partial_symtab *) 0x27cf070) readin no ... { psymtab hello.c ((struct partial_symtab *) 0x2cf09e0) readin no ... This is due to the recursively_search_psymtabs call in psym_expand_symtabs_matching: ... if (recursively_search_psymtabs (ps, objfile, domain, lookup_name, symbol_matcher)) ... which always returns false for symbolless partial symtabs. The same problem occurs with CUs where the dwarf is generated by gas --gdwarf-2 for a foo.S: if we read such a test-case with -readnow, we'll have a symbolless symtab for foo.S. But if we read the test-case with partial symtabs, and expand those using "maint expand-symtabs", the foo.S psymtab remains unexpanded. Fix this by passing a NULL symbol_matcher and lookup_name to expand_symtabs_matching in maintenance_expand_symtabs, and skipping the call to recursively_search_psymtabs if symbol_matcher == NULL and lookup_name == NULL. Build and tested on x86_64-linux, with native. In addition, tested test-case with target boards cc-with-gdb-index.exp, cc-with-debug-names.exp and readnow.exp. gdb/ChangeLog: 2020-04-14 Tom de Vries <tdevries@suse.de> PR symtab/25720 * symmisc.c (maintenance_expand_symtabs): Call expand_symtabs_matching with NULL symbol_matcher and lookup_name. * psymtab.c (psym_expand_symtabs_matching): Handle NULL symbol_matcher and lookup_name. * dwarf2/read.c (dw2_expand_symtabs_matching) (dw2_debug_names_expand_symtabs_matching): Same. * symfile.h (struct quick_symbol_functions::expand_symtabs_matching): Make lookup_name a pointer. Update comment. * symtab.c (global_symbol_searcher::expand_symtabs): Handle lookup_name being a pointer. * symfile.c (expand_symtabs_matching): Same. * symfile-debug.c (debug_qf_expand_symtabs_matching): Same. * linespec.c (iterate_over_all_matching_symtabs): Same. gdb/testsuite/ChangeLog: 2020-04-14 Tom de Vries <tdevries@suse.de> PR symtab/25720 * gdb.base/maint-expand-symbols-header-file.c: New test. * gdb.base/maint-expand-symbols-header-file.exp: New file. * gdb.base/maint-expand-symbols-header-file.h: New test.
2020-04-14gdb/testsuite: Move helper function into lib/dwarf.expAndrew Burgess6-57/+27
Every time I write a test making use of the DWARF assembler I end up copying in the function get_func_info. Duplicating code is bad, so lets put this function into lib/dwarf.exp and remove all of the duplicates. There should be no changes in the testsuite behaviour after this commit. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-inline-many-frames.exp (get_func_info): Delete. * gdb.dwarf2/dw2-inline-small-func.exp: Pass options to get_func_info. (get_func_info): Delete. * gdb.dwarf2/dw2-is-stmt-2.exp (get_func_info): Delete. * gdb.dwarf2/dw2-is-stmt.exp (get_func_info): Delete. * lib/dwarf.exp (get_func_info): New function.
2020-04-13Move event-loop.[ch] to gdbsupport/Tom Tromey30-1019/+58
This moves event-loop.[ch] to gdbsupport/ and updates the uses in gdb. gdb/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * run-on-main-thread.c: Update include. * unittests/main-thread-selftests.c: Update include. * tui/tui-win.c: Update include. * tui/tui-io.c: Update include. * tui/tui-interp.c: Update include. * tui/tui-hooks.c: Update include. * top.h: Update include. * top.c: Update include. * ser-base.c: Update include. * remote.c: Update include. * remote-notif.c: Update include. * remote-fileio.c: Update include. * record-full.c: Update include. * record-btrace.c: Update include. * python/python.c: Update include. * posix-hdep.c: Update include. * mingw-hdep.c: Update include. * mi/mi-main.c: Update include. * mi/mi-interp.c: Update include. * main.c: Update include. * linux-nat.c: Update include. * interps.c: Update include. * infrun.c: Update include. * inf-loop.c: Update include. * event-top.c: Update include. * event-loop.c: Move to ../gdbsupport/. * event-loop.h: Move to ../gdbsupport/. * async-event.h: Update include. * Makefile.in (COMMON_SFILES, HFILES_NO_SRCDIR): Update. gdbsupport/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * event-loop.h: Move from ../gdb/. * event-loop.cc: Move from ../gdb/.
2020-04-13Introduce async-event.[ch]Tom Tromey13-345/+430
This patch splits out some gdb-specific code from event-loop, into new files async-event.[ch]. Strictly speaking this code could perhaps be put into gdbsupport/, but because gdbserver does not currently use it, it seemed better, for size reasons, to split it out. gdb/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * tui/tui-win.c: Include async-event.h. * remote.c: Include async-event.h. * remote-notif.c: Include async-event.h. * record-full.c: Include async-event.h. * record-btrace.c: Include async-event.h. * infrun.c: Include async-event.h. * event-top.c: Include async-event.h. * event-loop.h: Move some declarations to async-event.h. * event-loop.c: Don't include ser-event.h or top.h. Move some code to async-event.c. * async-event.h: New file. * async-event.c: New file. * Makefile.in (COMMON_SFILES): Add async-event.c. (HFILES_NO_SRCDIR): Add async-event.h.
2020-04-13Introduce and use flush_streamsTom Tromey3-2/+15
Code in gdbsupport can't call gdb_flush, so this introduces a new "flush_streams" function that must be supplied by the client. Note that the similar gdb_flush_out_err exists, but it isn't defined in quite the same way, so it wasn't clear to me whether the two could be merged. gdb/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * utils.c (flush_streams): New function. * event-loop.c (gdb_wait_for_event): Call flush_streams. gdbsupport/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * errors.h (flush_streams): Declare.
2020-04-13Use warning in event-loopTom Tromey2-6/+10
Change event-loop.c to avoid printf_unfiltered in favor of warning. warning is aleady available to code in gdbsupport/. gdb/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * event-loop.c (handle_file_event): Use warning, not printf_unfiltered.
2020-04-13Include <chrono> in event-loop.cTom Tromey2-0/+6
Include <chrono> in event-loop.c, because it is used there. Currently it is included indirectly, but after the subsequent patches this will no longer be the case. gdb/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * event-loop.c: Include <chrono>.
2020-04-13Move gdb_select.h to gdbsupport/Tom Tromey14-64/+29
This moves gdb_select.h to gdbsupport/, so it can be used by other code there. gdb/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * gdb_select.h: Move to ../gdbsupport/. * event-loop.c: Update include path. * top.c: Update include path. * ser-base.c: Update include path. * ui-file.c: Update include path. * ser-tcp.c: Update include path. * guile/scm-ports.c: Update include path. * posix-hdep.c: Update include path. * ser-unix.c: Update include path. * gdb_usleep.c: Update include path. * mingw-hdep.c: Update include path. * inflow.c: Update include path. * infrun.c: Update include path. * event-top.c: Update include path. gdbsupport/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * gdb_select.h: Move from ../gdb/.
2020-04-13Move event-loop configury to common.m4Tom Tromey3-8/+13
gdb_select.h and the event loop require some configure checks, so this moves the needed checks to common.m4 and updates the configure scripts. gdb/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * configure: Rebuild. * configure.ac: Remove checks that are now in GDB_AC_COMMON. gdbserver/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * configure: Rebuild. * config.in: Rebuild. gdbsupport/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * config.in, configure: Rebuild. * common.m4 (GDB_AC_COMMON): Check for poll.h, sys/poll.h, sys/select.h, and poll.
2020-04-13Move start_event_loop out of event-loop.cTom Tromey4-55/+62
A subsequent patch is going to move event-loop.c to gdbsupport. In a review of an earlier version of this series, Pedro pointed out that the resulting code would be cleaner if start_event_loop were not shared -- because gdb and gdbserver have some different needs here -- and so this moves start_event_loop to main.c. Because the only caller is there, it is also now static. gdb/ChangeLog 2020-04-13 Tom Tromey <tom@tromey.com> * event-loop.h (start_event_loop): Don't declare. * event-loop.c (start_event_loop): Move... * main.c (start_event_loop): ...here. Now static.
2020-04-13Update my email address on MAINTAINERSSergio Durigan Junior2-2/+6
Commit pushed under the obvious/trivial rule. gdb/ChangeLog: 2020-04-13 Sergio Durigan Junior <sergiodj@sergiodj.net> * MAINTAINERS: Update my email address.
2020-04-13[gdb/testsuite] Fix gdb.ada/catch_ex_std.exp gnatlink FAILTom de Vries2-0/+8
When running test-case gdb.ada/catch_ex.exp using system gnatmake, gnatmake is invoked like this: ... Executing on host: \ gnatmake foo.adb -gnata -f -Isrc/gdb/testsuite/gdb.ada/catch_ex -g -lm \ -o outputs/gdb.ada/catch_ex/foo ... When I try to use a more recent gnatmake, by mocking up a combined build: ... $ ls -la build/gcc/ lrwxrwxrwx gfortran -> /usr/bin/gfortran-10 lrwxrwxrwx gnatbind -> /usr/bin/gnatbind-10 lrwxrwxrwx gnatlink -> /usr/bin/gnatlink-10 lrwxrwxrwx gnatmake -> /usr/bin/gnatmake-10 lrwxrwxrwx xg++ -> /usr/bin/g++-10 lrwxrwxrwx xgcc -> /usr/bin/gcc-10 ... gnatmake is invoked like this: ... Executing on host: \ /data/gdb_versions/devel/build/gcc/gnatmake \ -I/data/gdb_versions/devel/build/gcc/ada/rts \ --GCC=/data/gdb_versions/devel/build/gcc/xgcc \ --GNATBIND=/data/gdb_versions/devel/build/gcc/gnatbind \ --GNATLINK=/data/gdb_versions/devel/build/gcc/gnatlink \ -cargs -B/data/gdb_versions/devel/build/gcc \ -largs --GCC=/data/gdb_versions/devel/build/gcc/xgcc \ -B/data/gdb_versions/devel/build/gcc \ -margs foo.adb -gnata -f -Isrc/gdb/testsuite/gdb.ada/catch_ex -g -lm \ -o outputs/gdb.ada/catch_ex/foo ... This is set up by this bit in find_gnatmake in /usr/share/dejagnu/libgloss.exp: ... if {![is_remote host]} { set file [lookfor_file $tool_root_dir gnatmake] if { $file == "" } { set file [lookfor_file $tool_root_dir gcc/gnatmake] } if { $file != "" } { set root [file dirname $file] set CC "$file -I$root/ada/rts --GCC=$root/xgcc \ --GNATBIND=$root/gnatbind --GNATLINK=$root/gnatlink \ -cargs -B$root \ -largs --GCC=$root/xgcc -B$root -margs" } else { ... However, when running test-case gdb.ada/catch_ex_std.exp using the mockup combined build, we get: ... Executing on host: \ /data/gdb_versions/devel/build/gcc/gnatlink foo \ -Wl,-rpath,\$ORIGIN -Wl,-lsome_package b~foo.adb:26:79: "SS_Stack" not declared in "Secondary_Stack"^M b~foo.adb:26:89: incorrect constraint for this kind of type^M b~foo.adb:121:56: "Runtime_Default_Sec_Stack_Size" not declared in "Parameters"^M FAIL: gdb.ada/catch_ex_std.exp: gnatlink foo ... The problem is caused by the fact that the test uses gnatlink directly rather than using gnatmake. The invoked gnatlink (which is gnatlink-10) calls gcc-7, which are incompatible (see gcc PR86211). This problem doesn't occur with gnatmake because there the gcc to use is passed as an argument to gnatlink. Fix this by adding the -largs bit from find_gnatmake in find_ada_tool, for the case that $tool == gnatlink. Tested on x86_64-linux, with system gcc, and gcc-10. gdb/testsuite/ChangeLog: 2020-04-13 Tom de Vries <tdevries@suse.de> * lib/ada.exp (find_ada_tool): Pass --GCC and -B to gnatlink, similar to what find_gnatmake does.
2020-04-13Implement IP_MINIMAL and IP_ALL on NetBSDKamil Rytarowski2-0/+16
gdb/ChangeLog: * nbsd-nat.c (nbsd_nat_target::info_proc): Add IP_MINIMAL and IP_ALL.
2020-04-12Implement "info proc cmdline" for NetBSDKamil Rytarowski2-0/+44
Add nbsd_pid_to_cmdline() to query the program command line. gdb/ChangeLog: * nbsd-nat.c (nbsd_pid_to_cmdline): Add. (nbsd_nat_target::info_proc): Add do_cmdline.
2020-04-12Implement "info proc cwd" for NetBSDKamil Rytarowski2-0/+31
Add nbsd_pid_to_cwd() to query the program current directory. gdb/ChangeLog: * nbsd-nat.c (nbsd_pid_to_cwd): Add. (nbsd_nat_target::info_proc): Add do_cwd.
2020-04-12Implement "info proc exe" for NetBSDKamil Rytarowski2-0/+16
Use pid_to_exec_file() to query the program. gdb/ChangeLog: * nbsd-nat.c (nbsd_nat_target::info_proc): Add do_exe.
2020-04-12Implement "info proc mappings" for NetBSDKamil Rytarowski5-0/+276
Define nbsd_nat_target::find_memory_regions and nbsd_nat_target::info_proc. info_proc handles as of now only the "mappings" command. Define a local static function kinfo_get_vmmap() that reads the process memory layout of a specified process. kinfo_get_vmmap() wraps the sysctl(3) call. nbsd-tdep.c defines now utility functions for printing the process memory layout: * nbsd_info_proc_mappings_header() * nbsd_vm_map_entry_flags() * nbsd_info_proc_mappings_entry() gdb/ChangeLog: * nbsd-nat.c; Include "nbsd-tdep.h" and "gdbarch.h". * nbsd-nat.c (nbsd_nat_target::find_memory_regions) (nbsd_nat_target::info_proc): New functions. * nbsd-nat.c (kinfo_get_vmmap): New function. * nbsd-nat.c (nbsd_nat_target::info_proc) Use nbsd_info_proc_mappings_header and nbsd_info_proc_mappings_entry. * nbsd-tdep.c (nbsd_info_proc_mappings_header) (nbsd_info_proc_mappings_entry, nbsd_vm_map_entry_flags): New functions. * nbsd-tdep.c (KINFO_VME_PROT_READ, KINFO_VME_PROT_WRITE) (KINFO_VME_PROT_EXEC, KINFO_VME_FLAG_COW) (KINFO_VME_FLAG_NEEDS_COPY, KINFO_VME_FLAG_NOCOREDUMP) (KINFO_VME_FLAG_PAGEABLE, KINFO_VME_FLAG_GROWS_UP) (KINFO_VME_FLAG_GROWS_DOWN): New.
2020-04-10gdb: fix undefined behavior reported in copy_bitwiseArtur Shepilko2-1/+6
gdb version 9.1, built with clang 8.0.0 on Ubuntu 18.04 (x86_64); --enable-ubsan (for clang's undefined behavior sanitizer) Executing command; `maint selftest copy_bitwise` bombs in runtime error: ../../gdb/utils.c:3432:28: runtime error: left shift of negative value -1 Closer look reveals the offending shift: `(~0 << nbits)`, apparently 0 is treated as signed int, resulting in negative complement. Explicitly stating it unsigned 0U fixes it and the `copy_bitwise` test passes ok.
2020-04-10Avoid infinite recursion in get_msymbol_addressTom Tromey2-1/+5
Sometimes, get_msymbol_address can cause infinite recursion, leading to a crash. This was reported previously here: https://sourceware.org/pipermail/gdb-patches/2019-November/162154.html A user on irc reported this as well, and with his help and the help of a friend of his, we found that the problem occurred because, when reloading a separate debug objfile, the objfile would lose the OBJF_MAINLINE flag. This would cause some symbols from this separate debug objfile to be marked "maybe_copied" -- but then get_msymbol_address could find the same symbol and fail as reported. This patch fixes the bug by preserving OBJF_MAINLINE. No test case, unfortunately, because I could not successfully make one. gdb/ChangeLog 2020-04-10 Tom Tromey <tromey@adacore.com> * symfile.c (symbol_file_add_separate): Preserve OBJF_MAINLINE.
2020-04-10Skip separate debug files when handling copy relocationsTom Tromey2-1/+10
get_symbol_address and get_msymbol_address call lookup_minimal_symbol_linkage, which iterates over the separate debug files of the objfile that is passed in. This means that if these functions pass in a separate debug objfile, then they are doing unnecessary work. This patch avoids the extra work by skipping separate debug objfiles in the loops. gdb/ChangeLog 2020-04-10 Tom Tromey <tromey@adacore.com> * symtab.c (get_symbol_address, get_msymbol_address): Skip separate debug files.
2020-04-10Fix debugging of WOW64 processesHannes Domani4-8/+30
The new code regarding pending stops only checks for EXCEPTION_BREAKPOINT, but for WOW64 processes STATUS_WX86_BREAKPOINT is necessary as well. Also, ignore_first_breakpoint is used now in nat/windows-nat.c as well, but was not available there. gdb/ChangeLog: 2020-04-10 Hannes Domani <ssbssa@yahoo.de> * nat/windows-nat.c (STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP): Move to... * nat/windows-nat.h (STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP): ... here. * windows-nat.c (windows_nat_target::get_windows_debug_event): Check for STATUS_WX86_BREAKPOINT. (windows_nat_target::wait): Same.
2020-04-10[gdb/testsuite] Fix -readnow FAIL in gdb.base/style.expTom de Vries2-1/+15
When running test-case gdb.base/style.exp with target board readnow, we run into: ... FAIL: gdb.base/style.exp: filename is styled when loading symbol file ... The problem is that with -readnow, an extra "Expanding full symbols" message is generated: ... (gdb) file $file^M Reading symbols from $file...^M Expanding full symbols from $file...^M (gdb) FAIL: gdb.base/style.exp: filename is styled when loading symbol file ... and the test does not expect this message. Fix this by expecting the additional message for -readnow. gdb/testsuite/ChangeLog: 2020-04-10 Tom de Vries <tdevries@suse.de> * gdb.base/style.exp: Expect "Expanding full symbols" message for -readnow.
2020-04-10[gdb/cli] Don't let python colorize strip leading newlinesTom de Vries5-2/+24
Consider the test-case gdb.base/async.exp. Using the executable, I run to main, and land on a line advertised as line 26: ... $ gdb outputs/gdb.base/async/async -ex start Reading symbols from outputs/gdb.base/async/async... Temporary breakpoint 1 at 0x4004e4: file gdb.base/async.c, line 26. Starting program: outputs/gdb.base/async/async Temporary breakpoint 1, main () at gdb.base/async.c:26 26 y = foo (); ... But actually, the line turns out to be line 28: ... $ cat -n gdb.base/async.c ... 26 y = 2; 27 z = 9; 28 y = foo (); ... This is caused by the following: the python colorizer initializes the lexer with default options (no second argument to get_lexer_for_filename): ... def colorize(filename, contents): # Don't want any errors. try: lexer = lexers.get_lexer_for_filename(filename) formatter = formatters.TerminalFormatter() return highlight(contents, lexer, formatter) ... which include option stripnl=True, which strips leading and trailing newlines. This causes the python colorizer to strip the two leading newlines of async.c. Fix this by initializing the lexer with stripnl=False. Build and reg-tested on x86_64-linux. gdb/ChangeLog: 2020-04-10 Tom de Vries <tdevries@suse.de> PR cli/25808 * python/lib/gdb/__init__.py: Initialize lexer with stripnl=False. gdb/testsuite/ChangeLog: 2020-04-10 Tom de Vries <tdevries@suse.de> PR cli/25808 * gdb.base/style.c: Add leading newlines. * gdb.base/style.exp: Use gdb_get_line_number to get specific lines. Check listing of main's one-line body.
2020-04-09gdb: move Tom de Vries to Global MaintainersSimon Marchi2-1/+6
gdb/ChangeLog: * MAINTAINERS (Global Maintainers): Add Tom de Vries. (Write After Approval): Remove Tom de Vries.
2020-04-09Partially revert my UB fix in record_lineBernd Edlinger2-19/+26
This reverts the following commit partially: commit 64dc2d4bd24ff7119c913fff91184414f09b8042 Author: Bernd Edlinger <bernd.edlinger@hotmail.de> Date: Thu Mar 12 11:52:34 2020 +0100 Fix an undefined behavior in record_line Additionally do not completely remove symbols at the same PC than the end marker, instead make them non-is-stmt breakpoints. We keep the undefined behavoir fix, but have to restore the original behavior regarding deletion of the line entries. 2020-04-09 Bernd Edlinger <bernd.edlinger@hotmail.de> revert partially: 2020-04-01 Bernd Edlinger <bernd.edlinger@hotmail.de> * buildsym.c (record_line): Fix undefined behavior and preserve lines at eof.
2020-04-09Add SVR4 psABI specific parser for AUXV entriesKamil Rytarowski5-44/+80
NetBSD and OpenBSD always use an int to store the type as defined in the SVR4 psABI specifications rather than long as assumed by the default parser. Define svr4_auxv_parse() that shares code with default_auxv_parse(). Remove obsd_auxv_parse() and switch OpenBSD to svr4_auxv_parse(). Remove not fully accurate comment from obsd-tdep.c. Use svr4_auxv_parse() on NetBSD. gdb/ChangeLog: * auxv.h (svr4_auxv_parse): New. * auxv.c (default_auxv_parse): Split into default_auxv_parse and generic_auxv_parse. (svr4_auxv_parse): Add. * obsd-tdep.c: Include "auxv.h". (obsd_auxv_parse): Remove. (obsd_init_abi): Remove comment. (obsd_init_abi): Change set_gdbarch_auxv_parse passed argument from `obsd_auxv_parse' to `svr4_auxv_parse'. * nbsd-tdep.c: Include "auxv.h". (nbsd_init_abi): Call set_gdbarch_auxv_parse.
2020-04-08Make last_wait_event staticTom Tromey3-9/+15
Now that last_wait_event is entirely handled in nat/windows-nat.c, it can be made static. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * nat/windows-nat.h (last_wait_event): Don't declare. (wait_for_debug_event): Update comment. * nat/windows-nat.c (last_wait_event): Now static.
2020-04-08Move wait_for_debug_event to nat/windows-nat.cTom Tromey4-11/+23
This moves the wait_for_debug_event helper function to nat/windows-nat.c, and changes gdbserver to use it. wait_for_debug_event is a wrapper for WaitForDebugEvent that also sets last_wait_event when appropriate. This is needed to properly handle queued stops. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * windows-nat.c (wait_for_debug_event): Move to nat/windows-nat.c. * nat/windows-nat.h (wait_for_debug_event): Declare. * nat/windows-nat.c (wait_for_debug_event): Move from windows-nat.c. No longer static. gdbserver/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * win32-low.c (win32_kill, get_child_debug_event): Use wait_for_debug_event.
2020-04-08Introduce fetch_pending_stopTom Tromey4-20/+51
This introduces a new "fetch_pending_stop" function and changes gdb to use it. This function removes the first matching pending stop from the list of such stops. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * windows-nat.c (get_windows_debug_event): Use fetch_pending_stop. * nat/windows-nat.h (fetch_pending_stop): Declare. * nat/windows-nat.c (fetch_pending_stop): New function.
2020-04-08Share some inferior-related Windows codeTom Tromey4-25/+72
This adds a couple of functions to nat/windows-nat.c and changes gdb and gdbserver to use them. One function checks the list of pending stops for a match (not yet used by gdbserver, but will be in a subsequent patch); and the other is a wrapper for ContinueDebugEvent that always uses the last "real" stop event. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * windows-nat.c (windows_continue): Use matching_pending_stop and continue_last_debug_event. * nat/windows-nat.h (matching_pending_stop) (continue_last_debug_event): Declare. * nat/windows-nat.c (DEBUG_EVENTS): New define. (matching_pending_stop, continue_last_debug_event): New functions. gdbserver/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * win32-low.c (child_continue): Call continue_last_debug_event.
2020-04-08Share handle_exceptionTom Tromey4-189/+241
Both gdb and gdbserver have a "handle_exception" function, the bulk of which is shared between the two implementations. This patch arranges for the entire thing to be moved into nat/windows-nat.c, with the differences handled by callbacks. This patch introduces one more callback to make this possible. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * windows-nat.c (MS_VC_EXCEPTION): Move to nat/windows-nat.c. (handle_exception_result): Move to nat/windows-nat.h. (DEBUG_EXCEPTION_SIMPLE): Remove. (windows_nat::handle_ms_vc_exception): New function. (handle_exception): Move to nat/windows-nat.c. (get_windows_debug_event): Update. (STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP): Move to nat/windows-nat.c. * nat/windows-nat.h (handle_ms_vc_exception): Declare. (handle_exception_result): Move from windows-nat.c. (handle_exception): Declare. * nat/windows-nat.c (MS_VC_EXCEPTION, handle_exception) (STATUS_WX86_SINGLE_STEP, STATUS_WX86_BREAKPOINT): Move from windows-nat.c. gdbserver/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * win32-low.c (handle_exception): Remove. (windows_nat::handle_ms_vc_exception): New function. (get_child_debug_event): Add "continue_status" parameter. Update. (win32_wait): Update.
2020-04-08Remove some globals from windows-nat.cTom Tromey2-6/+6
windows-nat.c has a few "count" globals that don't seem to be used. Possibly they were used for debugging at some point, but they no longer seem useful to me. Because they get in the way of some code sharing, this patch removes them. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * windows-nat.c (exception_count, event_count): Remove. (handle_exception, get_windows_debug_event) (do_initial_windows_stuff): Update.
2020-04-08Share handle_load_dll and handle_unload_dll declarationsTom Tromey3-17/+32
This changes nat/windows-nat.h to declare handle_load_dll and handle_unload_dll. The embedding application is required to implement these -- while the actual code was difficult to share due to some other differences between the two programs, sharing the declaration lets a subsequent patch share more code that uses these as callbacks. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * windows-nat.c (windows_nat::handle_load_dll) (windows_nat::handle_unload_dll): Rename. No longer static. * nat/windows-nat.h (handle_load_dll, handle_unload_dll): Declare. gdbserver/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * win32-low.c (windows_nat::handle_load_dll): Rename from handle_load_dll. No longer static. (windows_nat::handle_unload_dll): Rename from handle_unload_dll. No longer static.
2020-04-08Fix up complaints.h for namespace useTom Tromey2-2/+9
If 'complaint' is used in a namespace context, it will fail because 'stop_whining' is only declared at the top level. This patch fixes this problem in a simple way, by moving the declaration of 'stop_whining' out of the macro and to the top-level. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * complaints.h (stop_whining): Declare at top-level. (complaint): Don't declare stop_whining.
2020-04-08Normalize handle_output_debug_string APITom Tromey3-5/+21
This changes gdbserver's implementation of handle_output_debug_string to have the same calling convention as that of gdb. This allows for sharing some more code in a subsequent patch. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * windows-nat.c (windows_nat::handle_output_debug_string): Rename. No longer static. * nat/windows-nat.h (handle_output_debug_string): Declare. gdbserver/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * win32-low.c (handle_output_debug_string): Add parameter. Change return type. (win32_kill, get_child_debug_event): Update.
2020-04-08Share some Windows-related globalsTom Tromey4-88/+124
This moves some Windows-related globals into nat/windows-nat.c, sharing them between gdb and gdbserver. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * windows-nat.c (current_process_handle, current_process_id) (main_thread_id, last_sig, current_event, last_wait_event) (current_windows_thread, desired_stop_thread_id, pending_stops) (struct pending_stop, siginfo_er): Move to nat/windows-nat.c. (display_selectors, fake_create_process) (get_windows_debug_event): Update. * nat/windows-nat.h (current_process_handle, current_process_id) (main_thread_id, last_sig, current_event, last_wait_event) (current_windows_thread, desired_stop_thread_id, pending_stops) (struct pending_stop, siginfo_er): Move from windows-nat.c. * nat/windows-nat.c (current_process_handle, current_process_id) (main_thread_id, last_sig, current_event, last_wait_event) (current_windows_thread, desired_stop_thread_id, pending_stops) (siginfo_er): New globals. Move from windows-nat.c. gdbserver/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * win32-low.c (current_process_handle, current_process_id) (main_thread_id, last_sig, current_event, siginfo_er): Move to nat/windows-nat.c.