aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2020-03-18[gdb/testsuite] Add test-case gdb.dwarf2/break-inline-psymtab.expTom de Vries4-0/+99
Add a test-case that tests whether we can set a breakpoint on an inlined inline function in CU for which the partial symtab has not yet been expanded. Tested on x86_64-linux, with gcc 4.8.5, gcc-7.5.0, gcc-10.0.1, and clang 5.0.2. gdb/testsuite/ChangeLog: 2020-03-18 Tom de Vries <tdevries@suse.de> * gdb.dwarf2/break-inline-psymtab-2.c: New test. * gdb.dwarf2/break-inline-psymtab.c: New test. * gdb.dwarf2/break-inline-psymtab.exp: New file.
2020-03-18Namespace the reg class to avoid clashes with OS headersKamil Rytarowski2-0/+8
Fix build issues on NetBSD where the reg symbol exists in public headers. regformats/regdef.h:22:8: error: redefinition struct struct reg ^~~ /usr/include/amd64/reg.h:51:8: note: previous definition struct struct reg { ^~~ gdb/ChangeLog: * regformats/regdef.h: Put reg in gdb namespace. gdbserver/ChangeLog: * regcache.cc (find_register_by_number): Update. * tdesc.cc (init_target_desc): Likewise. * tdesc.h (target_desc::reg_defs): Likewise.
2020-03-18Add support for NetBSD threads in i386-bsd-nat.cKamil Rytarowski2-21/+50
NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads. Define gdb_ptrace() a wrapper function for ptrace(2) that properly passes the pid,lwp pair on NetBSD and the result of get_ptrace_pid() for others. gdb/ChangeLog: * i386-bsd-nat.c (gdb_ptrace): New. * (i386bsd_fetch_inferior_registers, i386bsd_store_inferior_registers) Switch from pid_t to ptid_t. * (i386bsd_fetch_inferior_registers, i386bsd_store_inferior_registers) Use gdb_ptrace.
2020-03-18Add support for NetBSD threads in amd64-bsd-nat.cKamil Rytarowski2-16/+39
NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads. Define gdb_ptrace() a wrapper function for ptrace(2) that properly passes the pid,lwp pair on NetBSD and the result of get_ptrace_pid() for others. gdb/ChangeLog: * amd64-bsd-nat.c (gdb_ptrace): New. * (amd64bsd_fetch_inferior_registers, amd64bsd_store_inferior_registers) Switch from pid_t to ptid_t. * (amd64bsd_fetch_inferior_registers, amd64bsd_store_inferior_registers) Use gdb_ptrace.
2020-03-18Rename the read symbol to xreadKamil Rytarowski2-9/+21
This avoids clashes with macro read in the NetBSD headers. gdb/ChangeLog: * user-regs.c (user_reg::read): Rename to... (user_reg::xread): ...this. * (append_user_reg): Rename argument `read' to `xread'. * (user_reg_add_builtin): Likewise. * (user_reg_add): Likewise. * (value_of_user_reg): Likewise.
2020-03-17Add support for NetBSD threads in sparc-nat.cKamil Rytarowski2-28/+32
NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads. Define gdb_ptrace() a wrapper function for ptrace(2) that properly passes the pid,lwp pair on NetBSD and the result of get_ptrace_pid() for others. gdb/ChangeLog: * sparc-nat.c (gdb_ptrace): New. * sparc-nat.c (sparc_fetch_inferior_registers) (sparc_store_inferior_registers) Remove obsolete comment. * sparc-nat.c (sparc_fetch_inferior_registers) (sparc_store_inferior_registers) Switch from pid_t to ptid_t. * sparc-nat.c (sparc_fetch_inferior_registers) (sparc_store_inferior_registers) Use gdb_ptrace.
2020-03-17Add support for NetBSD threads in sh-nbsd-nat.cKamil Rytarowski2-3/+11
NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads. gdb/ChangeLog: * sh-nbsd-nat.c (fetch_registers): New variable lwp and pass it to the ptrace call. * sh-nbsd-nat.c (store_registers): Likewise.
2020-03-17Inherit sh_nbsd_nat_target from nbsd_nat_targetKamil Rytarowski2-1/+9
gdb/ChangeLog: * sh-nbsd-nat.c (sh_nbsd_nat_target): Inherit from nbsd_nat_target instead of inf_ptrace_target. * sh-nbsd-nat.c: Include "nbsd-nat.h", as we are now using nbsd_nat_target.
2020-03-17Include missing header to get missing declarationsKamil Rytarowski2-0/+5
CXX amd64-bsd-nat.o amd64-bsd-nat.c:42:1: error: no previous declaration void amd64bsd_fetch_inferior_registers(regcache*, [-Werror=missing-declarations] amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ amd64-bsd-nat.c:118:1: error: no previous declaration void amd64bsd_store_inferior_registers(regcache*, [-Werror=missing-declarations] amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Detected on NetBSD/amd64 9.99.49. gdb/ChangeLog: * amd64-bsd-nat.c: Include amd64-bsd-nat.h".
2020-03-17Rewrite nbsd_nat_target::pid_to_exec_file to sysctl(3)Kamil Rytarowski2-12/+16
procfs on NetBSD is optional and not recommended. * nbsd-nat.c: Include <sys/types.h>, <sys/ptrace.h> and <sys/sysctl.h>. * nbsd-nat.c (nbsd_nat_target::pid_to_exec_file): Rewrite.
2020-03-17[gdb] Skip imports of c++ CUsTom de Vries3-0/+37
The DWARF standard appendix E.1 describes techniques that can be used for compression and deduplication: DIEs can be factored out into a new compilation unit, and referenced using DW_FORM_ref_addr. Such a new compilation unit can either use a DW_TAG_compile_unit or DW_TAG_partial_unit. If a DW_TAG_compile_unit is used, its contents is evaluated by consumers as though it were an ordinary compilation unit. If a DW_TAG_partial_unit is used, it's only considered by consumers in the context of a DW_TAG_imported_unit. An example of when DW_TAG_partial_unit is required is when the factored out DIEs are not top-level, f.i. because they were children of a namespace. In such a case the corresponding DW_TAG_imported_unit will occur as child of the namespace. In the case of factoring out DIEs from c++ compilation units, we can factor out into a new DW_TAG_compile_unit, and no DW_TAG_imported_unit is required. This begs the question how to interpret a top-level DW_TAG_imported_unit of a c++ DW_TAG_compile_unit compilation unit. The semantics of DW_TAG_imported_unit describe that the imported unit logically appears at the point of the DW_TAG_imported_unit entry. But it's not clear what the effect should be in this case, since all the imported DIEs are already globally visible anyway, due to the use of DW_TAG_compile_unit. So, skip top-level imports of c++ DW_TAG_compile_unit compilation units in process_imported_unit_die. Using the cc1 binary from PR23710 comment 1 and setting a breakpoint on do_rpo_vn: ... $ gdb \ -batch \ -iex "maint set dwarf max-cache-age 316" \ -iex "set language c++" \ -ex "b do_rpo_vn" \ cc1 ... we get a 8.1% reduction in execution time, due to reducing the number of partial symtabs expanded into full symtabs from 212 to 175. Build and reg-tested on x86_64-linux. gdb/ChangeLog: 2020-03-17 Tom de Vries <tdevries@suse.de> PR gdb/23710 * dwarf2/read.h (struct dwarf2_per_cu_data): Add unit_type and lang fields. * dwarf2/read.c (process_psymtab_comp_unit): Initialize unit_type and lang fields. (process_imported_unit_die): Skip import of c++ CUs.
2020-03-17[gdb/testsuite] Give up after consecutive timeouts in completion-support.expTom de Vries1-2/+25
When running test-case gdb.linespec/cpcompletion.exp with target board unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects, we run into lots of timeouts, in particular with this pattern: ... FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \ cmd complete "b template2_" FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \ tab complete "b template2_st" (timeout) FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \ cmd complete "b template2_st" FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \ tab complete "b template2_str" (timeout) FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \ cmd complete "b template2_str" FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \ tab complete "b template2_stru" (timeout) ... Fix this by detecting timeouts in test_complete_prefix_range_re and giving up after 3 consecutive timeouts. This reduces testing time from ~39m to ~9m. Tested on x86_64-linux.
2020-03-16Initialize base_value in pascal_object_print_valueTom Tromey2-0/+6
The val_print removal series introduced a new possibly-uninitialized warning in p-valprint.c. Examination of the code shows that the warning does not indicate a real bug, so this patch silences the warning by setting the variable in the catch clause of a try/catch. (The obvious initialization did not work due to a "goto" in this function.) gdb/ChangeLog 2020-03-16 Tom Tromey <tom@tromey.com> * p-valprint.c (pascal_object_print_value): Initialize base_value.
2020-03-16arc: Migrate to new target featuresAnton Kolesov21-351/+525
This patch replaces usage of target descriptions in ARC, where the whole description is fixed in XML, with new target descriptions where XML describes individual features, and GDB assembles those features into actual target description. v2: Removed arc.c from ALLDEPFILES in gdb/Makefile.in. Removed vim modeline from arc-tdep.c to have it in a separate patch. Removed braces from one line "if/else". Undid the type change for "jb_pc" (kept it as "int"). Joined the unnecessary line breaks into one line. No more moving around arm targets in gdb/features/Makefile. Changed pattern checking for ARC features from "arc/{aux,core}" to "arc/". v3: Added include gaurds to arc.h. Added arc_read_description to _create_ target descriptions less. v4: Got rid of ARC_SYS_TYPE_NONE. Renamed ARC_SYS_TYPE_INVALID to ARC_SYS_TYPE_NUM. Fixed a few indentations/curly braces. Converted arc_sys_type_to_str from a macro to an inline function. gdb/ChangeLog: 2020-03-16 Anton Kolesov <anton.kolesov@synopsys.com> Shahab Vahedi <shahab@synopsys.com> * Makefile.in: Add arch/arc.o * configure.tgt: Likewise. * arc-tdep.c (arc_tdesc_init): Use arc_read_description. (_initialize_arc_tdep): Don't initialize old target descriptions. (arc_read_description): New function to cache target descriptions. * arc-tdep.h (arc_read_description): Add proto type. * arch/arc.c: New file. * arch/arc.h: Likewise. * features/Makefile: Replace old target descriptions with new. * features/arc-arcompact.c: Remove. * features/arc-arcompact.xml: Likewise. * features/arc-v2.c: Likewise * features/arc-v2.xml: Likewise * features/arc/aux-arcompact.xml: New file. * features/arc/aux-v2.xml: Likewise. * features/arc/core-arcompact.xml: Likewise. * features/arc/core-v2.xml: Likewise. * features/arc/aux-arcompact.c: Generate. * features/arc/aux-v2.c: Likewise. * features/arc/core-arcompact.c: Likewise. * features/arc/core-v2.c: Likewise. * target-descriptions (maint_print_c_tdesc_cmd): Support ARC features.
2020-03-16Fix dwarf2_name caching bugTom Tromey2-10/+14
PR gdb/25663 points out that dwarf2_name will cache a value in the bcache and then return a substring. However, this substring return is only done on the branch that caches the value -- so if the function is called twice with the same arguments, it will return different values. This patch fixes this problem. This area is strange. We cache the entire demangled string, but only return the suffix. I looked at caching just the suffix, but it turns out that anonymous_struct_prefix assumes that the entire string is stored. Also weird is that this code is demangling the linkage name and then storing the demangled form back into the linkage name attribute -- that seems bad, because what if some code wants to find the actual linkage name? Fixing these issues was non-trivial, though; and in the meantime this patch seems like an improvement. Regression tested on x86-64 Fedora 30. gdb/ChangeLog 2020-03-16 Tom Tromey <tromey@adacore.com> PR gdb/25663: * dwarf2/read.c (dwarf2_name): Strip leading namespaces after putting value into bcache.
2020-03-16gdb: define builtin long type to be 64 bits on amd64 CygwinSimon Marchi3-7/+32
On Windows x86-64 (when building with MinGW), the size of the "long" type is 32 bits. amd64_windows_init_abi therefore does: set_gdbarch_long_bit (gdbarch, 32); This is also used when the chosen OS ABI is Cygwin, where the "long" type is 64 bits. GDB therefore gets sizeof(long) wrong when using the builtin long type: $ ./gdb -nx --data-directory=data-directory -batch -ex "set architecture i386:x86-64" -ex "set osabi Cygwin" -ex "print sizeof(long)" The target architecture is assumed to be i386:x86-64 $1 = 4 This patch makes GDB avoid setting the size of the long type to 32 bits when using the Cygwin OS ABI. it will inherit the value set in amd64_init_abi. With this patch, I get: $ ./gdb -nx --data-directory=data-directory -batch -ex "set architecture i386:x86-64" -ex "set osabi Cygwin" -ex "print sizeof(long)" The target architecture is assumed to be i386:x86-64 $1 = 8 gdb/ChangeLog: PR gdb/21500 * amd64-windows-tdep.c (amd64_windows_init_abi): Rename to... (amd64_windows_init_abi_common): ... this. Don't set size of long type. (amd64_windows_init_abi): New function. (amd64_cygwin_init_abi): New function. (_initialize_amd64_windows_tdep): Use amd64_cygwin_init_abi for the Cygwin OS ABI. * i386-windows-tdep.c (_initialize_i386_windows_tdep): Clarify comment.
2020-03-16gdb: select "Cygwin" OS ABI for Cygwin binariesSimon Marchi5-6/+127
Before this patch, the "Windows" OS ABI is selected for all Windows executables, including Cygwin ones. This patch makes GDB differentiate Cygwin binaries from non-Cygwin ones, and selects the "Cygwin" OS ABI for the Cygwin ones. To check whether a Windows PE executable is a Cygwin one, we check the library list in the .idata section, see if it contains "cygwin1.dll". I had to add code to parse the .idata section, because BFD doesn't seem to expose this information. BFD does parse this information, but only to print it in textual form (function pe_print_idata): https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=bfd/peXXigen.c;h=e42d646552a0ca1e856e082256cd3d943b54ddf0;hb=HEAD#l1261 Here's the relevant portion of the PE format documentation: https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-idata-section This page was also useful: https://blog.kowalczyk.info/articles/pefileformat.html#9ccef823-67e7-4372-9172-045d7b1fb006 With this patch applied, this is what I get: (gdb) file some_mingw_x86_64_binary.exe Reading symbols from some_mingw_x86_64_binary.exe... (gdb) show osabi The current OS ABI is "auto" (currently "Windows"). The default OS ABI is "GNU/Linux". (gdb) file some_mingw_i386_binary.exe Reading symbols from some_mingw_i386_binary.exe... (gdb) show osabi The current OS ABI is "auto" (currently "Windows"). The default OS ABI is "GNU/Linux". (gdb) file some_cygwin_x86_64_binary.exe Reading symbols from some_cygwin_x86_64_binary.exe... (gdb) show osabi The current OS ABI is "auto" (currently "Cygwin"). The default OS ABI is "GNU/Linux". gdb/ChangeLog: * windows-tdep.h (is_linked_with_cygwin_dll): New declaration. * windows-tdep.c (CYGWIN_DLL_NAME): New. (pe_import_directory_entry): New struct type. (is_linked_with_cygwin_dll): New function. * amd64-windows-tdep.c (amd64_windows_osabi_sniffer): Select GDB_OSABI_CYGWIN if the BFD is linked with the Cygwin DLL. * i386-windows-tdep.c (i386_windows_osabi_sniffer): Likewise.
2020-03-16gdb: rename content of i386-windows-tdep.c, cygwin to windowsSimon Marchi2-15/+21
i386-cygwin-tdep.c has just been renamed to i386-windows-tdep.c, this patch now renames everything in it that is not Cygwin-specific to replace "cygwin" with "windows". Note that I did not rename i386_cygwin_core_osabi_sniffer, since that appears to be Cygwin-specific. gdb/ChangeLog: * i386-windows-tdep.c: Mass-rename "cygwin" to "windows", except i386_cygwin_core_osabi_sniffer.
2020-03-16gdb: rename i386-cygwin-tdep.c to i386-windows-tdep.cSimon Marchi4-5/+13
Since this file contains things that apply not only to Cygwin binaries, but also to non-Cygwin Windows binaries, I think it would make more sense for it to be called i386-windows-tdep.c. It is analogous to amd64-windows-tdep.c, which we already have. gdb/ChangeLog: * i386-cygwin-tdep.c: Rename to... * i386-windows-tdep.c: ... this. * Makefile.in (ALL_TARGET_OBS): Rename i386-cygwin-tdep.c to i386-windows-tdep.c. * configure.tgt: Likewise.
2020-03-16gdb: add Windows OS ABISimon Marchi6-6/+39
GDB currently uses the "Cygwin" OS ABI (GDB_OSABI_CYGWIN) for everything related to Windows. If you build a GDB for a MinGW or Cygwin target, it will have "Cygwin" as the default OS ABI in both cases (see configure.tgt). If you load either a MinGW or Cygwin binary, the "Cygwin" OS ABI will be selected in both cases. This is misleading, because Cygwin binaries are a subset of the binaries running on Windows. When building something with MinGW, the resulting binary has nothing to do with Cygwin. Cygwin binaries are only special in that they are Windows binaries that link to the cygwin1.dll library (if my understanding is correct). Looking at i386-cygwin-tdep.c, we can see that GDB does nothing different when dealing with Cygwin binaries versus non-Cygwin Windows binaries. However, there is at least one known bug which would require us to make a distinction between the two OS ABIs, and that is the size of the built-in "long" type on x86-64. On native Windows, this is 4, whereas on Cygwin it's 8. So, this patch adds a new OS ABI, "Windows", and makes GDB use it for i386 and x86-64 PE executables, instead of the "Cygwin" OS ABI. A subsequent patch will improve the OS ABI detection so that GDB differentiates the non-Cygwin Windows binaries from the Cygwin Windows binaries, and applies the "Cygwin" OS ABI for the latter. The default OS ABI remains "Cygwin" for the GDBs built with a Cygwin target. I've decided to split the i386_cygwin_osabi_sniffer function in two, I think it's cleaner to have a separate sniffer for Windows binaries and Cygwin cores, each checking one specific thing. gdb/ChangeLog: * osabi.h (enum gdb_osabi): Add GDB_OSABI_WINDOWS. * osabi.c (gdb_osabi_names): Add "Windows". * i386-cygwin-tdep.c (i386_cygwin_osabi_sniffer): Return GDB_OSABI_WINDOWS when the binary's target is "pei-i386". (i386_cygwin_core_osabi_sniffer): New function, extracted from i386_cygwin_osabi_sniffer. (_initialize_i386_cygwin_tdep): Register OS ABI GDB_OSABI_WINDOWS for i386. * amd64-windows-tdep.c (amd64_windows_osabi_sniffer): Return GDB_OSABI_WINDOWS when the binary's target is "pei-x86-64". (_initialize_amd64_windows_tdep): Register OS ABI GDB_OSABI_WINDOWS for x86-64. * configure.tgt: Use GDB_OSABI_WINDOWS as the default OS ABI when the target matches '*-*-mingw*'.
2020-03-16gdb: move enum gdb_osabi to osabi.hSimon Marchi5-31/+40
I think it makes sense to have it there instead of in the catch-all defs.h. gdb/ChangeLog: * defs.h (enum gdb_osabi): Move to... * osabi.h (enum gdb_osabi): ... here. * gdbarch.sh: Include osabi.h in gdbarch.h. * gdbarch.h: Re-generate.
2020-03-16gdb: recognize 64 bits Windows executables as Cygwin osabiSimon Marchi2-0/+20
If I generate two Windows PE executables, one 32 bits and one 64 bits: $ x86_64-w64-mingw32-gcc test.c -g3 -O0 -o test_64 $ i686-w64-mingw32-gcc test.c -g3 -O0 -o test_32 $ file test_64 test_64: PE32+ executable (console) x86-64, for MS Windows $ file test_32 test_32: PE32 executable (console) Intel 80386, for MS Windows When I load the 32 bits binary in my GNU/Linux-hosted GDB, the osabi is correctly recognized as "Cygwin": $ ./gdb --data-directory=data-directory -nx test_32 (gdb) show osabi The current OS ABI is "auto" (currently "Cygwin"). When I load the 64 bits binary in GDB, the osabi is incorrectly recognized as "GNU/Linux": $ ./gdb --data-directory=data-directory -nx test_64 (gdb) show osabi The current OS ABI is "auto" (currently "GNU/Linux"). The 32 bits one gets recognized by the i386_cygwin_osabi_sniffer function, by its target name: if (strcmp (target_name, "pei-i386") == 0) return GDB_OSABI_CYGWIN; The target name for the 64 bits binaries is "pei-x86-64". It doesn't get recognized by any osabi sniffer, so GDB falls back on its default osabi, "GNU/Linux". This patch adds an osabi sniffer function for the Windows 64 bits executables in amd64-windows-tdep.c. With it, the osabi is recognized as "Cygwin", just like with the 32 bits binary. Note that it may seems strange to have a binary generated by MinGW (which has nothing to do with Cygwin) be recognized as a Cygwin binary. This is indeed not accurate, but at the moment GDB uses the Cygwin for everything Windows. Subsequent patches will add a separate "Windows" OS ABI for Windows binaries that are not Cygwin binaries. gdb/ChangeLog: * amd64-windows-tdep.c (amd64_windows_osabi_sniffer): New function. (_initialize_amd64_windows_tdep): Register osabi sniffer.
2020-03-16[gdb/testsuite] Add cache_verify option for gdb_caching_procsTom de Vries2-5/+37
Test-case gdb.base/gdb-caching-proc.exp tests whether procs declared using gdb_caching_proc give the same results when called more than once. While this tests consistency of the procs in the context of that test-case, it doesn't test consistency across the call sites. Add a local variable cache_verify to proc gdb_do_cache, that can be set to 1 to verify gdb_caching_proc consistency across the call sites. Likewise, add a local variable cache_verify_proc to set to the name of the gdb_caching_proc to verify. This can f.i. be used when changing an existing proc into a gdb_caching_proc. Tested on x86_64-linux, with cache_verify set to both 0 and 1. gdb/testsuite/ChangeLog: 2020-03-16 Tom de Vries <tdevries@suse.de> * lib/cache.exp (gdb_do_cache): Add and handle local variables cache_verify and cache_verify_proc.
2020-03-15[gdb/testsuite] Fix solib-list.exp test-case for exec with debug-infoTom de Vries2-2/+20
Since commit a2fedca99c "Implement 'set/show exec-file-mismatch'.", I see the following regression on openSUSE Leap 15.1: ... FAIL: gdb.server/solib-list.exp: non-stop 0: target remote \ (got interactive prompt) FAIL: gdb.server/solib-list.exp: non-stop 1: target remote \ (got interactive prompt) ... The first FAIL in more detail: ... (gdb) PASS: gdb.server/solib-list.exp: non-stop 0: file binfile target remote localhost:2346 Remote debugging using localhost:2346 warning: Mismatch between current exec-file /data/gdb_versions/devel/build/\ gdb/testsuite/outputs/gdb.server/solib-list/solib-list and automatically determined exec-file /lib64/ld-2.26.so exec-file-mismatch handling is currently "ask" Load new symbol table from "/lib64/ld-2.26.so"? (y or n) n warning: loading /lib64/ld-2.26.so Not confirmed. Reading /lib64/ld-linux-x86-64.so.2 from remote target... warning: File transfers from remote targets can be slow. \ Use "set sysroot" to access files locally instead. Reading /lib64/ld-linux-x86-64.so.2 from remote target... Reading symbols from target:/lib64/ld-linux-x86-64.so.2... Reading /lib64/ld-2.26.so-2.26-lp151.18.7.x86_64.debug from remote target... Reading /lib64/.debug/ld-2.26.so-2.26-lp151.18.7.x86_64.debug from remote \ target... Reading /data/gdb_versions/devel/install/lib64/debug//lib64/\ ld-2.26.so-2.26-lp151.18.7.x86_64.debug from remote target... Reading /data/gdb_versions/devel/install/lib64/debug/lib64/\ /ld-2.26.so-2.26-lp151.18.7.x86_64.debug from remote target... Reading target:/data/gdb_versions/devel/install/lib64/debug/lib64/\ /ld-2.26.so-2.26-lp151.18.7.x86_64.debug from remote target... (No debugging symbols found in target:/lib64/ld-linux-x86-64.so.2) 0x00007ffff7dd7ea0 in ?? () (gdb) FAIL: gdb.server/solib-list.exp: non-stop 0: target remote (got \ interactive prompt) ... The commit introduces the "Load new symbol table from" question, and gdb_test_multiple defaults to answering "no" and reporting the "got interactive prompt" FAIL. This FAIL is not seen on f.i. debian 10.2. The difference originates from the fact that the solib-list executable has debug-info in the openSUSE case, while it doesn't in the debian case. We can prevent the failure on openSUSE by stripping the executable from debug-info: ... + exec strip --strip-debug ${binfile} ... The difference in behaviour is a bug or improvement opportunity in the exec-file-mismatch, filed as PR25475. This patch fixes the FAIL by handling the question in the test-case. Tested on x86_64-linux. Tested on x86_64-linux with the gdbserver part of the patch introducing the test-case reverted to ensure that this still FAILs. gdb/testsuite/ChangeLog: 2020-03-15 Tom de Vries <tdevries@suse.de> * gdb.server/solib-list.exp: Handle 'Load new symbol table from "/lib64/ld-2.26.so"? (y or n)'.
2020-03-15[gdb/testsuite] Fix check-read1 FAIL with gdb.base/maint.expTom de Vries2-26/+24
When running test-case gdb.base/maint.exp with check-read1, I run into: ... FAIL: gdb.base/maint.exp: (timeout) maint print objfiles ... The FAIL happens because command output contains long lines like this: ... file1 at $hex, file2 at $hex, ..., $file$n at $hex, ... F.i., such a line for libc.so.debug contains 82000 chars. Fix this this by reading long lines bit by bit. Also, replace the testing of the command output formulated using a gdb_send combined with gdb_expect-in-a-loop, with a regular gdb_test_multiple with exp_continue. Tested on x86_64-linux, with make targets check and check-read1. gdb/testsuite/ChangeLog: 2020-03-15 Tom de Vries <tdevries@suse.de> * gdb.base/maint.exp: Use exp_continue in long lines for "maint print objfiles".
2020-03-14Add C parser support for "restrict" and "_Atomic"Tom Tromey7-68/+133
A user noticed that "watch -location" would fail with a "restrict" pointer. The issue here is that if the DWARF mentions "restrict", gdb will put this into the type name -- but then the C parser will not be able to parse this type. This patch adds support for "restrict" and "_Atomic" to the C parser. C++ doesn't have "restrict", but does have some GCC extensions. The type printer is changed to handle this difference as well, so that watch expressions will work properly. gdb/ChangeLog 2020-03-14 Tom Tromey <tom@tromey.com> * c-typeprint.c (cp_type_print_method_args): Print "__restrict__" for C++. (c_type_print_modifier): Likewise. Add "language" parameter. (c_type_print_varspec_prefix, c_type_print_base_struct_union) (c_type_print_base_1): Update. * type-stack.h (enum type_pieces) <tp_atomic, tp_restrict>: New constants. * type-stack.c (type_stack::insert): Handle tp_atomic and tp_restrict. (type_stack::follow_type_instance_flags): Likewise. (type_stack::follow_types): Likewise. Merge type-following code. * c-exp.y (RESTRICT, ATOMIC): New tokens. (space_identifier, cv_with_space_id) (const_or_volatile_or_space_identifier_noopt) (const_or_volatile_or_space_identifier): Remove. (single_qualifier, qualifier_seq_noopt, qualifier_seq): New rules. (ptr_operator, typebase): Update. (enum token_flag) <FLAG_C>: New constant. (ident_tokens): Add "restrict", "__restrict__", "__restrict", and "_Atomic". (lex_one_token): Handle FLAG_C. gdb/testsuite/ChangeLog 2020-03-14 Tom Tromey <tom@tromey.com> * gdb.base/cvexpr.exp: Add test for _Atomic and restrict.
2020-03-14[gdb/testsuite] Fix check-read1 FAILs in mi-fortran-modules.expTom de Vries2-17/+103
When running test-case gdb.mi/mi-fortran-modules.exp with check-read1, I run into: ... FAIL: gdb.mi/mi-fortran-modules.exp: -symbol-info-module-functions (timeout) FAIL: gdb.mi/mi-fortran-modules.exp: -symbol-info-module-functions \ --name _all (unexpected output) FAIL: gdb.mi/mi-fortran-modules.exp: -symbol-info-module-functions \ --module mod[123] (unexpected output) FAIL: gdb.mi/mi-fortran-modules.exp: -symbol-info-module-variables \ (unexpected output) ... Fix this by using exp_continue. Tested on x86_64, using make target check and check-read1. gdb/testsuite/ChangeLog: 2020-03-14 Tom de Vries <tdevries@suse.de> * gdb.mi/mi-fortran-modules.exp: Use exp_continue.
2020-03-14Add support for NetBSD threads in m68k-bsd-nat.cKamil Rytarowski2-6/+14
NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads. gdb/ChangeLog: * m68k-bsd-nat.c (fetch_registers): New variable lwp and pass it to the ptrace call. * m68k-bsd-nat.c (store_registers): Likewise.
2020-03-14m68k: bsd: Change type from char * to gdb_byte *Kamil Rytarowski2-4/+12
* m68k-bsd-nat.c (m68kbsd_supply_gregset): Change type of regs to gdb_byte *. * m68k-bsd-nat.c (m68kbsd_supply_fpregset): Likewise. * m68k-bsd-nat.c (m68kbsd_collect_gregset): Likewise. * m68k-bsd-nat.c (m68kbsd_supply_pcb): Cast &tmp to gdb_byte *.
2020-03-14Inherit m68k_bsd_nat_target from nbsd_nat_targetKamil Rytarowski2-1/+9
gdb/ChangeLog: * m68k-bsd-nat.c (m68k_bsd_nat_target): Inherit from nbsd_nat_target instead of inf_ptrace_target. * m68k-bsd-nat.c: Include "nbsd-nat.h", as we are now using nbsd_nat_target.
2020-03-14Define _KERNTYPES in m68k-bsd-nat.cKamil Rytarowski2-0/+7
Fixes build on NetBSD. types.h does not define register_t by default. gdb/ChangeLog: * m68k-bsd-nat.c: Define _KERNTYPES to get the declaration of register_t.
2020-03-14Add support for NetBSD threads in alpha-bsd-nat.cKamil Rytarowski2-6/+16
NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads. gdb/ChangeLog: * alpha-bsd-nat.c (fetch_registers): New variable lwp and pass it to the ptrace call. * alpha-bsd-nat.c (store_registers): Likewise.
2020-03-14Remove unused code from alpha-bsd-nat.cKamil Rytarowski2-42/+8
gdb/ChangeLog: * alpha-bsd-nat.c: Remove <sys/procfs.h> and "gregset.h" from includes. * alpha-bsd-nat.c (gregset_t, fpregset_t): Remove. * alpha-bsd-nat.c (supply_gregset, fill_gregset, supply_fpregset, fill_fpregset): Likewise.
2020-03-14Inherit alpha_netbsd_nat_target from nbsd_nat_targetKamil Rytarowski2-1/+9
gdb/ChangeLog: * alpha-bsd-nat.c (alpha_netbsd_nat_target): Inherit from nbsd_nat_target instead of inf_ptrace_target. * alpha-bsd-nat.c: Include "nbsd-nat.h", as we are now using nbsd_nat_target.
2020-03-14Define _KERNTYPES in alpha-bsd-nat.cKamil Rytarowski2-0/+7
Fixes build on NetBSD. types.h does not define register_t by default. gdb/ChangeLog: * alpha-bsd-nat.c: Define _KERNTYPES to get the declaration of register_t.
2020-03-14[gdb/testsuite] Fix check-read1 FAIL in attach-many-short-lived-threads.expTom de Vries2-5/+16
When running test-case gdb.threads/attach-many-short-lived-threads.exp with check-read1, I ran into: ... FAIL: gdb.threads/attach-many-short-lived-threads.exp: iter 1: \ no new threads (timeout) ... Fix this by rewriting the gdb_test_multiple call using -lbl and exp_continue. Tested on x86_64-linux, with make targets check and check-read1. gdb/testsuite/ChangeLog: 2020-03-14 Tom de Vries <tdevries@suse.de> * gdb.threads/attach-many-short-lived-threads.exp: Read "info threads" result in line-by-line fashion.
2020-03-14Add support for NetBSD threads in arm-nbsd-nat.cKamil Rytarowski2-9/+28
NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads. gdb/ChangeLog: * arm-nbsd-nat.c (fetch_register): New variable lwp and pass it to the ptrace call. * arm-nbsd-nat.c (fetch_fp_register): Likewise. * arm-nbsd-nat.c (fetch_fp_regs): Likewise. * arm-nbsd-nat.c (store_register): Likewise. * arm-nbsd-nat.c (store_regs): Likewise. * arm-nbsd-nat.c (store_fp_register): Likewise. * arm-nbsd-nat.c (store_fp_regs): Likewise.
2020-03-14Inherit arm_netbsd_nat_target from nbsd_nat_targetKamil Rytarowski2-1/+9
gdb/ChangeLog: * arm-nbsd-nat.c (arm_netbsd_nat_target): Inherit from nbsd_nat_target instead of inf_ptrace_target. * arm-nbsd-nat.c: Include "nbsd-nat.h", as we are now using nbsd_nat_target.
2020-03-14Add support for NetBSD threads in x86-bsd-nat.cKamil Rytarowski2-3/+23
NetBSD ptrace(2) PT_GETDBREGS/PT_SETDBREGS accepts thread id (LWP) as the 4th argument for threads. gdb/ChangeLog: * x86-bsd-nat.c (x86bsd_dr_get): New variable lwp and pass it to the ptrace call. * x86-bsd-nat.c (x86bsd_dr_set): Likewise.
2020-03-14Add support for threads in vax_bsd_nat_targetKamil Rytarowski2-4/+13
ptrace(2) PT_GETREGS/PT_SETREGS accepts thread id (LWP) as the 4th argument for threads. gdb/ChangeLog: * vax-bsd-nat.c (vaxbsd_supply_gregset): New variable lwp and pass it to the ptrace call. * vax-bsd-nat.c (vaxbsd_collect_gregset): Likewise.
2020-03-14Add explicit cast to fix build of vax-bsd-nat.cKamil Rytarowski2-2/+7
gdb/ChangeLog: * vax-bsd-nat.c (vaxbsd_supply_gregset): Cast gregs to const gdb_byte *. * vax-bsd-nat.c (vaxbsd_collect_gregset): Cast gregs to void *.
2020-03-14Inherit vax_bsd_nat_target from nbsd_nat_targetKamil Rytarowski2-1/+9
gdb/ChangeLog: * vax-bsd-nat.c (vax_bsd_nat_target): Inherit from nbsd_nat_target instead of inf_ptrace_target. * vax-bsd-nat.c: Include "nbsd-nat.h", as we are now using nbsd_nat_target.
2020-03-14Define _KERNTYPES in mips-nbsd-nat.cKamil Rytarowski2-0/+7
Fixes build on NetBSD. types.h does not define register_t by default. gdb/ChangeLog: * mips-nbsd-nat.c: Define _KERNTYPES to get the declaration of register_t.
2020-03-14Define _KERNTYPES in ppc-nbsd-nat.cKamil Rytarowski2-0/+7
Fixes build on NetBSD. types.h does not define register_t by default. gdb/ChangeLog: * ppc-nbsd-nat.c: Define _KERNTYPES to get the declaration of register_t.
2020-03-14Define _KERNTYPES in vax-bsd-nat.cKamil Rytarowski2-0/+7
Fixes build on NetBSD. types.h does not define register_t by default. gdb/ChangeLog: * vax-bsd-nat.c: Define _KERNTYPES to get the declaration of register_t.
2020-03-14[gdb/testsuite] Fix unrecognized debug output level 'statement-frontiers' ↵Tom de Vries3-0/+20
message When running testcase gdb.cp/step-and-next-inline.exp, I get: ... Running src/gdb/testsuite/gdb.cp/step-and-next-inline.exp ... gdb compile failed, g++: error: unrecognized debug output level \ 'statement-frontiers' gdb compile failed, g++: error: unrecognized debug output level \ 'statement-frontiers' === gdb Summary === # of untested testcases 2 ... Fix this by using a new gdb_caching_proc supports_statement_frontiers. Tested on x86_64-linux, with gcc 7.5.0 (which does not support -gstatement-frontiers) and with gcc 8.4.0 (which does support -gstatement-frontiers). gdb/testsuite/ChangeLog: 2020-03-14 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (supports_statement_frontiers): New proc. * gdb.cp/step-and-next-inline.exp: Use supports_statement_frontiers.
2020-03-14[gdb/testsuite] Fix FAIL in gdb.base/printcmds.expTom de Vries2-1/+6
With test-case gdb.base/printcmds.exp, I run into: ... (gdb) print teststring2^M $563 = (charptr) "more contents"^M (gdb) FAIL: gdb.base/printcmds.exp: print teststring2 ... The corresponding test is: ... gdb_test "print teststring2" " = (charptr) \"more contents\"" ... Fix the FAIL by adding the missing quoting for the parentheses around charptr. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-03-14 Tom de Vries <tdevries@suse.de> * gdb.base/printcmds.exp: Add missing quoting for "print teststring2".
2020-03-13Remove val_printTom Tromey31-3011/+94
We can finally remove val_print and various helper functions that are no longer needed. gdb/ChangeLog 2020-03-13 Tom Tromey <tom@tromey.com> * value.h (val_print): Don't declare. * valprint.h (val_print_array_elements) (val_print_scalar_formatted, generic_val_print): Don't declare. * valprint.c (generic_val_print_array): Take a struct value. (generic_val_print_ptr, generic_val_print_memberptr) (generic_val_print_bool, generic_val_print_int) (generic_val_print_char, generic_val_print_complex) (generic_val_print): Remove. (generic_value_print): Update. (do_val_print): Remove unused parameters. Don't call la_val_print. (val_print): Remove. (common_val_print): Update. Don't call value_check_printable. (val_print_scalar_formatted, val_print_array_elements): Remove. * rust-lang.c (rust_val_print): Remove. (rust_language_defn): Update. * p-valprint.c (pascal_val_print): Remove. (pascal_value_print_inner): Update. (pascal_object_print_val_fields, pascal_object_print_val): Remove. (pascal_object_print_static_field): Update. * p-lang.h (pascal_val_print): Don't declare. * p-lang.c (pascal_language_defn): Update. * opencl-lang.c (opencl_language_defn): Update. * objc-lang.c (objc_language_defn): Update. * m2-valprint.c (m2_print_unbounded_array, m2_val_print): Remove. * m2-lang.h (m2_val_print): Don't declare. * m2-lang.c (m2_language_defn): Update. * language.h (struct language_defn) <la_val_print>: Remove. * language.c (unk_lang_value_print_inner): Rename. Change argument types. (unknown_language_defn, auto_language_defn): Update. * go-valprint.c (go_val_print): Remove. * go-lang.h (go_val_print): Don't declare. * go-lang.c (go_language_defn): Update. * f-valprint.c (f_val_print): Remove. * f-lang.h (f_value_print): Don't declare. * f-lang.c (f_language_defn): Update. * d-valprint.c (d_val_print): Remove. * d-lang.h (d_value_print): Don't declare. * d-lang.c (d_language_defn): Update. * cp-valprint.c (cp_print_value_fields) (cp_print_value_fields_rtti, cp_print_value): Remove. (cp_print_static_field): Update. * c-valprint.c (c_val_print_array, c_val_print_ptr) (c_val_print_struct, c_val_print_union, c_val_print_int) (c_val_print_memberptr, c_val_print): Remove. * c-lang.h (c_val_print_array, cp_print_value_fields) (cp_print_value_fields_rtti): Don't declare. * c-lang.c (c_language_defn, cplus_language_defn) (asm_language_defn, minimal_language_defn): Update. * ada-valprint.c (ada_val_print_ptr, ada_val_print_num): Remove. (ada_val_print_enum): Take a struct value. (ada_val_print_flt, ada_val_print_array, ada_val_print_1) (ada_val_print): Remove. (ada_value_print_1): Update. (printable_val_type): Remove. * ada-lang.h (ada_val_print): Don't declare. * ada-lang.c (ada_language_defn): Update.
2020-03-13Change extension language pretty-printers to use value APITom Tromey12-76/+119
This changes the extension language pretty-printers to use the value API. Note that new functions were needed, for both Guile and Python. Currently both languages always wrap values by removing the values from the value chain. This makes sense to avoid strange behavior with watchpoints, and to avoid excessive memory use. However, when printing, it's important to leave the passed-in value untouched, in case pretty-printing does nothing -- that way the caller can still access it. gdb/ChangeLog 2020-03-13 Tom Tromey <tom@tromey.com> * valprint.c (do_val_print): Update. * python/python-internal.h (gdbpy_apply_val_pretty_printer): Take a struct value. (value_to_value_object_no_release): Declare. * python/py-value.c (value_to_value_object_no_release): New function. * python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Take a struct value. * guile/scm-value.c (vlscm_scm_from_value_no_release): New function. * guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer): Take a struct value. * guile/guile-internal.h (vlscm_scm_from_value_no_release): Declare. (gdbscm_apply_val_pretty_printer): Take a struct value. * extension.h (apply_ext_lang_val_pretty_printer): Take a struct value. * extension.c (apply_ext_lang_val_pretty_printer): Take a struct value. * extension-priv.h (struct extension_language_ops) <apply_val_pretty_printer>: Take a struct value. * cp-valprint.c (cp_print_value): Create a struct value. (cp_print_value): Update.
2020-03-13Change print_field_values to use value-based APITom Tromey2-7/+11
This converts print_field_values to use the value-based API, by having it call common_val_print rather than val_print. gdb/ChangeLog 2020-03-13 Tom Tromey <tom@tromey.com> * ada-valprint.c (print_field_values): Call common_val_print.