aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2022-10-19gdb/testsuite: avoid temporary file in gdb/testsuite (unittest.exp)Andrew Burgess2-19/+137
I spotted that the gdb.gdb/unittest.exp script causes a temporary file inserters_extractors-2.txt to be created in build/gdb/testsuite/ instead of in build/gdb/testsuite/output/gdb.gdb/unittest/. This is because some of the 'maint selftest' tests create temporary files in GDB's current directory, specifically, the two source files: gdb/unittests/basic_string_view/inserters/wchar_t/2.cc gdb/unittests/basic_string_view/inserters/char/2.cc both create a temporary file called inserters_extractors-2.txt, though we only run the second of these as part of GDB's selftests. I initially proposed just using GDB's 'cd' command in unittest.exp to switch to the test output directory before running the selftests, however, Pedro pointed out that there was a risk here that, if GDB crashed during shutdown, the generated core file would be left in the test output directory rather than in the testsuite directory. As a result, our clever core file spotting logic would fail to spot the core file and alert the user. Instead, I propose this slightly more involved solution. I've added a new with_gdb_cwd directory proc, used like this: with_gdb_cwd $directory { # Tests here... } The new proc temporarily switches to $directory and then runs the tests within the block. After running the tests the previous current working directory is restored. Additionally, after switching back to the previous cwd, we check that GDB is still responsive. This means that if GDB crashed immediately prior to restoring the previous directory, and left the core file in the wrong place, then the responsiveness check will fail, and a FAIL will be emitted, this should be enough to alert the user that something has gone wrong. With this commit in place the unittest.exp script now leaves its temporary file in the test output directory.
2022-10-19gdb/testsuite: avoid creating files in gdb/testsuite directoryAndrew Burgess1-1/+1
I spotted that the test gdb.dwarf2/dw2-using-debug-str.exp was creating an output file called debug_str_section in the root build/gdb/testsuite directory instead of using the build/gdb/testsuite/output/gdb.dwarf2/dw2-using-debug-str/ directory. This appears to be caused by a missing '$' character. We setup a variable debug_str_section which contains a path within the output directory, but then when we build the objcopy command we use 'debug_str_section' without a '$' prefix, as a result, we create the debug_str_section file. This commit adds the missing '$', the file is now created in the output directory.
2022-10-19aarch64-pe support for LD, GAS and BFDJedidiah Thompson1-2/+6
Allows aarch64-pe to be targeted natively, not having to use objcopy to convert it from ELF to PE. Based on initial work by Jedidiah Thompson Co-authored-by: Jedidiah Thompson <wej22007@outlook.com> Co-authored-by: Zac Walker <zac.walker@linaro.org>
2022-10-19[gdb/testsuite] Fix ERROR in gdb.python/py-breakpoint.expTom de Vries1-0/+2
With test-case gdb.python/py-breakpoint.exp I run into: ... (gdb) ERROR: tcl error sourcing gdb.python/py-breakpoint.exp. ERROR: can't read "skip_hw_watchpoint_tests_p": no such variable while executing "if {$skip_hw_watchpoint_tests_p} { gdb_test_no_output "set can-use-hw-watchpoints 0" "" }" ... Fix this by adding the missing "global skip_hw_watchpoint_tests_p" in two procs. Tested on x86_64-linux.
2022-10-18gdb: check for groups with duplicate names in reggroups:addSimon Marchi1-2/+7
In the downstream ROCm GDB port, we would create multiple register groups with duplicate names. While it did not really hurt, it certainly wasn't the intent. And I don't think it ever makes sense to do so. To catch these, change the assert in reggroups::add to check for duplicate names. It's no longer necessary to check for duplicate reggroup pointers, because adding the same group twice would be caught by the duplicate name check. Change-Id: Id216a58acf91f1b314d3cba2d02de73656f8851d Approved-By: Tom Tromey <tom@tromey.com>
2022-10-18Remove dead code from py-finishbreakpoint.cTom Tromey1-6/+1
PR python/16324 points out that comparing a frame id to null_frame_id can never succeed, and proposes simply removing the dead code. That is what this patch does. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16324
2022-10-18Update tests to use skip_hw_watchpoint_tests to test for HW watchpoint support.Carl Love16-23/+143
The hardware watchpoint check has been updated in a couple of recent patches. This patch updates the hardware watchpoint test in the remaining gdb tests. The issue is the PowerPC processors support hardware watchpoints with the exception of Power 9. The hardware watchpoint support is disabled on Power 9. The test skip_hw_watchpoint_tests must be used to correctly determine if the PowerPC processor supports hardware watchpoints. This patch fixes 6 test failures in test gdb.threads/watchpoint-fork.exp. Test gdb.base/watch-vfork.exp runs with can-use-hw-watchpoints set to true and false. When the test is run with can-use-hw-watchpoints set to true, gdb just falls back to using software watchpoints. The patch reduces the number of expected passes by 2 since because it now only runs once with can-use-hw-watchpoints set to false. Test gdb.mi/mi-watch.exp runs the test with argument hw and sw. If the argument is hw and hardware watchpoints are not supported the test exits. The number of expected passes is cut in half with the patch as it now only runs the test using software breakpoints. Previously the pass to use hardware watchpoints was not skipped and the test actually ran using software watchpoints. The following tests run the same with and without the patch. The tests are supposed to execute the gdb command "set can-use-hw-watchpoints 0" if the processor does not support hardware bwatchpoints. However the command was not being executed and gdb was falling back to using software watchpoints since the Power 9 watchpoint resource check fails. With the patch, the tests now execute the command and the test runs using software watchpoints as it did previously. The tests are: gdb.base/commands.exp gdb.base/cond-eval-mode.exp gdb.base/display.exp gdb.base/gdb11531.exp gdb.base/recurse.exp gdb.base/value-double-free.exp gdb.base/watch-bitfields.exp gdb.base/watch-cond-infcall.exp gdb.base/watch-cond.exp gdb.base/watchpoint-solib.exp gdb.base/watchpoints.exp The following two tests are not supported on the Power 9 system used to test the changes. The patch does not change the tests results for these tests: gdb.python/py-breakpoint.exp gdb.mi/mi-watch-nonstop.exp
2022-10-18[gdb/testsuite] Handle header files with local-remote-host.expTom de Vries5-1/+21
With test-case gdb.base/included.exp and host board local-remote-host.exp with tentative fix for PR29697 I run into: ... included.c:18:10: fatal error: included.h: No such file or directory #include "included.h" ^~~~~~~~~~~~ compilation terminated. ... Fix this by adding the missing gdb_remote_download calls. Likewise in a few other test-cases. Tested on x86_64-linux.
2022-10-18[gdb/testsuite] Fix gdb.server/no-thread-db.exp with local-remote-host.expTom de Vries1-1/+2
With test-case gdb.server/no-thread-db.exp and host board local-remote-host.exp with a tentative fix for PR29697 I run into: ... (gdb) print foo^M Cannot find thread-local storage for Thread 29613.29613, executable file \ $HOME/no-thread-db:^M Remote target failed to process qGetTLSAddr request^M (gdb) FAIL: gdb.server/no-thread-db.exp: print foo ... The regexp in the test-case expects the full $binfile pathname, but we have instead $HOME/no-thread-db. Fix this by making the regexp less strict. Tested on x86_64-linux.
2022-10-18[gdb/testsuite] Fix gdb.base/return-nodebug.exp with local-remote-host.expTom de Vries3-6/+28
With host board local-remote-host.exp and test-case gdb.base/return-nodebug.exp, I run into: ... Executing on host: gcc -fno-stack-protector -fdiagnostics-color=never \ -DTYPE=signed\ char -c -g -o return-nodebug-signed-char0.o \ /home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.base/return-nodebug.c \ (timeout = 300) builtin_spawn [open ...]^M gcc: error: char: No such file or directory ... Avoid the quoting problem by not using spaces in the define. Tested on x86_64-linux.
2022-10-18[gdb/testsuite] Fix gdb.server/file-transfer.exp with local-remote-host.expTom de Vries1-2/+6
When running test-case gdb.server/file-transfer.exp with host board local-remote-host.exp, I get: ... Executing on host: cmp -s $outputs/gdb.server/file-transfer/file-transfer \ down-server (timeout = 300) builtin_spawn [open ...]^M XYZ2ZYX FAIL: gdb.server/file-transfer.exp: compare intermediate binary file ... The remote host and remote target cases are handled here together here in proc test_file_transfer: ... if {![is_remote host] && ![is_remote target]} { set up_server [standard_output_file $up_server] set down_server [standard_output_file $down_server] } ... Fix this by handling them separately. Tested on x86_64-linux.
2022-10-18[gdb/testsuite] Update boards/READMETom de Vries1-1/+1
Update gdb/testsuite/boards/README to reflect recent commit c4c8c27263d ("[gdb/testsuite] Fix host board local-remote-host-notty.exp timeouts"), which means the board now uses a pseudo-tty, but with editing disabled.
2022-10-18gdb, solib-svr4: support namespaces in DSO iterationMarkus Metzger6-16/+159
When looking up names, GDB needs to stay within one linker namespace to find the correct instance in case the same name is provided in more than one namespace. Modify svr4_iterate_over_objfiles_in_search_order() to stay within the namespace of the current_objfile argument. If no current_objfile is provided (i.e. it is nullptr), iterate over objfiles in the initial namespace. For objfiles that do not have a corresponding so_list to provide the namespace, assume that the objfile was loaded into the initial namespace. This would cover the main executable objfile (which is indeed loaded into the initial namespace) as well as manually added symbol files. Expected fails: - gdb.base/non-lazy-array-index.exp: the expression parser may lookup global symbols, which may result in xfers to read auxv for determining the debug base as part of svr4_iterate_over_objfiles_in_search_order(). - gdb.server/non-lazy-array-index.exp: symbol lookup may access the target to read AUXV in order to determine the debug base for SVR4 linker namespaces. Known issues: - get_symbol_address() and get_msymbol_address() search objfiles for a 'better' match. This was introduced by 4b610737f02 Handle copy relocations to handle copy relocations but it now causes a wrong address to be read after symbol lookup actually cound the correct symbol. This can be seen, for example, with gdb.base/dlmopen.exp when compiled with clang. - gnu ifuncs are only looked up in the initial namespace. - lookup_minimal_symbol() and lookup_minimal_symbol_text() directly iterate over objfiles and are not aware of linker namespaces.
2022-10-18gdb: update gnu ifunc resolveMarkus Metzger1-66/+87
Update elf_gnu_ifunc_resolve_by_cache() and elf_gnu_ifunc_resolve_by_got() to use gdbarch_iterate_over_objfiles_in_search_order() in order to restrict the objfile traversal to the initial namespace. In order to extend this to other namespaces, we'd need to provide context, e.g. via an objfile inside that namespace.
2022-10-18gdb, symtab: inline find_quick_global_symbol_languageMarkus Metzger1-24/+19
There is only one use of find_quick_global_symbol_language that calls it for the special symbol "main". Inline the function as it is probably not correct in the general case where we may have multiple instances of global symbols with the same name but different languages in different libraries in different linker namespaces. Further, change the objfiles iteration into a call to gdbarch_iterate_over_objfiles_in_search_order, which would only search the initial linker namespace, where we expect "main" to be located.
2022-10-18gdb, hppa: remove unused hppa_lookup_stub_minimal_symbolMarkus Metzger2-35/+0
I stumbled over this while reviewing all objfiles traversals with regards to impact of linker namespaces. Recursive grep only finds two occurrences of hppa_lookup_stub_minimal_symbol: - the declaration in hppa-tdep.h. - the definition in hppa-tdep.c. There appear to be no calls to this function. Remove it.
2022-10-18gdb, cp: update add_symbol_overload_list_qualifiedMarkus Metzger1-24/+24
Iterate over objfiles in search order using the objfile of the selected block as current_objfile so the iteration can stay inside the block's linker namespace.
2022-10-18fixup! gdb, ada: update ada_lookup_simple_minsymMarkus Metzger1-3/+0
remove get_selected_block()
2022-10-18gdb, ada: update ada_lookup_simple_minsymMarkus Metzger3-16/+28
Iterate over objfile in search order using the objfile of the context block as current_objfile so the iteration can stay inside the block's linker namespace.
2022-10-18gdb, ada: collect standard exceptions in all objfilesMarkus Metzger1-7/+23
When searching for standard exceptions for Ada, we lookup the minimal symbol of each exception. With linker namespaces there can be multiple instances in different namespaces. Collect them all.
2022-10-18gdb, python: use gdbarch_iterate_over_objfiles_in_search_orderMarkus Metzger3-65/+64
The implementation of gdb.lookup_objfile() iterates over all objfiles and compares their name or build id to the user-provided search string. This will cause problems when supporting linker namespaces as the first objfile in any namespace will be found. Instead, use gdbarch_iterate_over_objfiles_in_search_order to only consider the namespace of gdb.current_objfile() for the search, which defaults to the initial namespace when gdb.current_objfile() is None.
2022-10-18gdb, compile: unlink objfile stored in moduleMarkus Metzger1-12/+9
When cleaning up after a compile command, we iterate over all objfiles and unlink the first objfile with the same name as the one we compiled. Since we already store a pointer to that objfile in the module and use it to get the name we're comparing against, there's no reason to iterate, at all. We can simply use that objfile. This further avoids potential issues when an objfile with the same name is loaded into a different linker namespace.
2022-10-18gdb, gdbserver: extend RSP to support namespacesMarkus Metzger3-5/+53
Introduce a new qXfer:libraries-svr4:read annex key/value pair lmid=<namespace identifier> to be used together with start and prev to provide the namespace of start and prev to gdbserver. Unknown key/value pairs are ignored by gdbserver so no new supports check is needed. Introduce a new library-list-svr4 library attribute lmid to provide the namespace of a library entry to GDB. This implementation uses the address of a namespace's r_debug object as namespace identifier. This should have incremented the minor version but since unknown XML attributes are ignored, anyway, and since changing the version results in a warning from GDB, the version is left at 1.0.
2022-10-18gdb, gdbserver: support dlmopen()Markus Metzger9-91/+639
In glibc, the r_debug structure contains (amongst others) the following fields: int r_version: Version number for this protocol. It should be greater than 0. If r_version is 2, struct r_debug is extended to struct r_debug_extended with one additional field: struct r_debug_extended *r_next; Link to the next r_debug_extended structure. Each r_debug_extended structure represents a different namespace. The first r_debug_extended structure is for the default namespace. 1. Change solib_svr4_r_map argument to take the debug base. 2. Add solib_svr4_r_next to find the link map in the next namespace from the r_next field. 3. Update svr4_current_sos_direct to get the link map in the next namespace from the r_next field. 4. Don't check shared libraries in other namespaces when updating shared libraries in a new namespace. 5. Update svr4_same to check the load offset in addition to the name 6. Update svr4_default_sos to also set l_addr_inferior 7. Change the flat solib_list into a per-namespace list using the namespace's r_debug address to identify the namespace. Add gdb.base/dlmopen.exp to test this. To remain backwards compatible with older gdbserver, we reserve the namespace zero for a flat list of solibs from all namespaces. Subsequent patches will extend RSP to allow listing libraries grouped by namespace. This fixes PR 11839. Co-authored-by: Lu, Hongjiu <hongjiu.lu@intel.com>
2022-10-18gdb, solib-svr4: remove locate_base()Markus Metzger1-51/+11
Whenever we call locate_base(), we clear info->debug_base directly before the call. Thus, we never cache the base location as locate_base() had intended. Move the svr4_have_link_map_offsets() check into elf_locate_base(), inline locate_base() at all call sites, and remove it.
2022-10-18gdb, testsuite: extend gdb_test_multiple checksMarkus Metzger1-0/+8
Check for warning: Corrupted shared library list and for Invalid cast. warning: Probes-based dynamic linker interface failed. Reverting to original interface. in gdb_test_multiple.
2022-10-17kfail an Ada test for GCC < 12Tom Tromey1-0/+12
I noticed one particular Ada test was failing on Fedora 34, but works when I switch to GCC 12. This patch arranges to kfail the test when an older compiler is used. I tested this with GCC 11, 12, and 13. I'm going to check it in.
2022-10-17Remove a nullptr check in DWARF scannerTom Tromey1-1/+0
In scan_attributes, The DWARF scanner checks whether maybe_defer is nullptr, but this can never happen. This patch removes the check.
2022-10-17gdbarch-components.py: Remove spurious space from "frame_info_ptr " paramsPedro Alves1-15/+15
If you run gdbarch.py today, you'll get local modifications compared to what's in the tree, like: --- c/gdb/gdbarch-gen.h +++ w/gdb/gdbarch-gen.h @@ -315,8 +315,8 @@ extern void set_gdbarch_register_type (struct gdbarch *gdbarch, gdbarch_register should match the address at which the breakpoint was set in the dummy frame. */ -typedef struct frame_id (gdbarch_dummy_id_ftype) (struct gdbarch *gdbarch, frame_info_ptr this_frame); -extern struct frame_id gdbarch_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame); +typedef struct frame_id (gdbarch_dummy_id_ftype) (struct gdbarch *gdbarch, frame_info_ptr this_frame); +extern struct frame_id gdbarch_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame); extern void set_gdbarch_dummy_id (struct gdbarch *gdbarch, gdbarch_dummy_id_ftype *dummy_id); etc. The extra space comes from the "frame_info_ptr " param that appears in a number of gdbarch methods in gdbarch-components.py. With the extra space removed, running ./gdbarch.py generates the exact code that's in the tree already. Change-Id: If7d20b8c6b2fd9ff466142a01bd2611c9ef9f53e
2022-10-17Change .gdb_index de-duplication implementationTom Tromey1-36/+41
While investigating PR symtab/29179, I found that one Ada test failed because, although a certain symbol was present in the index, with the new DWARF reader it pointed to a different CU than was chosen by earlier versions of gdb. This patch changes how symbol de-duplication is done, deferring the process until the entire symbol table has been constructed. This way, it's possible to always choose the lower-numbered CU among duplicates, which is how gdb (implicitly) previously worked. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29179
2022-10-17Improve Ada support in .gdb_indexTom Tromey3-13/+41
The cooked index work changed how .gdb_index is constructed, and in the process broke .gdb_index support. This is PR symtab/29179. This patch partially fixes the problem. It arranges for Ada names to be encoded in the form expected by the index code. In particular, linkage names for Ada are emitted, including the "main" name; names are Ada-encoded; and names are no longer case-folded, something that prevented operator names from round-tripping correctly. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29179
2022-10-17Don't add type linkage names to cooked indexTom Tromey1-5/+0
The compiler will sometimes emit a linkage name for a type, like: <1d3> DW_AT_linkage_name: (indirect string, offset: 0x106f): 11__mbstate_t These names aren't very useful, and this patch changes the DWARF reader so that they are ignored by the cooked index.
2022-10-17Fix regression in c-linkage-name.exp with gdb indexTom Tromey1-3/+4
c-linkage-name.exp started failing with the gdb-index target board due to an earlier patch. The problem here is that some linkage names must be in the index -- but, based on inspection, not C++ linkage names. This patch updates the code to exclude only these.
2022-10-17Fix null pointer representationsTaiseiIto1-9/+9
Since "NULL" and "0" are used to represent invalid address in function "gdbarch_find_by_info" in "binutils-gdb/gdb/arch-utils.c", I modified them to "nullptr".
2022-10-17gdb: silence unused-but-set-variable warning about yynerrs in cp-name-parser.ySimon Marchi1-1/+6
When building with clang 15 on Ubuntu 20.04, I get: CXX cp-name-parser.o cp-name-parser.c.tmp:1777:9: error: variable 'cpnameyynerrs' set but not used [-Werror,-Wunused-but-set-variable] int yynerrs; ^ /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:58:18: note: expanded from macro 'yynerrs' #define yynerrs GDB_YY_REMAP (yynerrs) ^ /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:40:29: note: expanded from macro 'GDB_YY_REMAP' #define GDB_YY_REMAP(YYSYM) GDB_YY_REMAP_1 (GDB_YY_REMAP_PREFIX, YYSYM) ^ /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:39:39: note: expanded from macro 'GDB_YY_REMAP_1' #define GDB_YY_REMAP_1(PREFIX, YYSYM) GDB_YY_REMAP_2 (PREFIX, YYSYM) ^ /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:38:39: note: expanded from macro 'GDB_YY_REMAP_2' #define GDB_YY_REMAP_2(PREFIX, YYSYM) PREFIX ## YYSYM ^ <scratch space>:45:1: note: expanded from here cpnameyynerrs ^ This is because clang 15 warns for something like this: int n; n = 0; ++n; whereas previous versions do not. yynerrs is defined in yyparse and is there for actions to use. Since the actions in cp-name-parser.y don't use it, we get a warning. We see this problem on this particular .y file because it uses `%pure-parser` [1], which makes yynerrs a local rather than a global. I initially fixed this by using DIAGNOSTIC_IGNORE_UNUSED_BUT_SET_VARIABLE (like in commit f7aa1a5acc5 ("gold: Suppress "unused" variable warning on Clang")), but then I realized we could suppress the warning in a more fine-grained way using this in a rule: (void) yynerrs; [1] https://www.gnu.org/software/bison/manual/html_node/Error-Reporting-Function.html Change-Id: I6cae7a4207c19fe1b719e2ac19be69122ebe3af1
2022-10-16More uses of checked_static_castTom Tromey1-10/+10
This patch changes a few more uses of static_cast to use checked_static_cast. In this patch, cast-to-references are converted by moving the dereference outside of the cast, as checked_static_cast only handles pointers.
2022-10-16Use checked_static_cast in more placesTom Tromey9-24/+27
I looked through all the uses of static_cast<... *> in gdb and converted many of them to checked_static_cast. I couldn't test a few of these changes.
2022-10-15gdb/arm: Don't rely on loop detection to stop unwindingTorbjörn SVENSSON1-7/+6
Setting SP of the next frame to the same address as the current frame is an ugly way to stop the unwinding. A cleaner way is to rely on the frame_unwind_stop_reason function to return UNWIND_OUTERMOST. Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2022-10-14[gdb/testsuite] Add boards/READMETom de Vries1-0/+88
Add a file gdb/testsuite/boards/README, to make it easier to get a high-level overview of the various boards.
2022-10-14[gdb/contrib] Handle STRIP_ARGS_{STRIP,KEEP}_DEBUG in cc-with-tweaks.shTom de Vries1-2/+7
Handle new environment variable STRIP_ARGS_STRIP_DEBUG, defaulting to --strip-debug in gdb/contrib/cc-with-tweaks.sh, such that we can easily reproduce the PR29277 assert using: ... $ export STRIP_ARGS_STRIP_DEBUG=--strip-all $ make check RUNTESTFLAGS="gdb.base/jit-reader.exp \ --target_board cc-with-gnu-debuglink" ... For completeness sake and to avoid confusion about which of the two used strip invocations the passed args apply to, likewise add STRIP_ARGS_KEEP_DEBUG, defaulting to --only-keep-debug. Script checked with shellcheck, no new warnings added. Tested on x86_64-linux.
2022-10-14[gdb] Fix heap-buffer-overflow in find_program_interpreterTom de Vries4-4/+79
With the test-case included in this patch, we run into: ... (gdb) target remote localhost:2347^M `target:twice-connect' has disappeared; keeping its symbols.^M Remote debugging using localhost:2347^M warning: Unable to find dynamic linker breakpoint function.^M GDB will be unable to debug shared library initializers^M and track explicitly loaded dynamic code.^M Reading /usr/lib/debug/.build-id/$hex/$hex.debug from remote target...^M 0x00007ffff7dd4550 in ?? ()^M (gdb) PASS: gdb.server/twice-connect.exp: session=second: gdbserver started FAIL: gdb.server/twice-connect.exp: found interpreter ... The problem originates in find_program_interpreter, where bfd_get_section_contents is called to read .interp, but fails. The function returns false but the result is ignored, so find_program_interpreter returns some random string. Fix this by checking the result of the call to bfd_get_section_contents. Tested on x86_64-linux. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29652
2022-10-14[gdb/testsuite] Fix gdb.server/unittest.exp with host board ↵Tom de Vries1-1/+1
local-remote-host.exp With test-case gdb.server/unittest.exp and host board local-remote-host.exp I run into: ... builtin_spawn build/gdbserver/gdbserver --selftest^M ERROR: : spawn id exp7 not open while executing "expect { -i exp7 -timeout 10 -i $server_spawn_id -re "Ran ($decimal) unit tests, 0 failed" { set num_ran $expect_out(1,string) gdb_assert "..." ("uplevel" body line 1) invoked from within "uplevel $body" NONE : spawn id exp7 not open UNRESOLVED: gdb.server/unittest.exp: unit tests ... The problem is (as fixed for avr in commit df5b8876083 ("gdb/testsuite: better handle failures in simavr board, reap simavr process")), that gdb_expect through remote_expect adds a "-i <gdb spawn id> -timeout 10", which is the one causing the error. As in aforementioned commit, fix this by using expect instead. Tested on x86_64-linux.
2022-10-14[gdb/testsuite] Fix host board local-remote-host-notty.exp timeoutsTom de Vries2-32/+43
With test-case gdb.server/stop-reply-no-thread-multi.exp and host board local-remote-host-notty.exp we occasionally run into a silent out, due to getting: ... (gdb) kill^M (gdb) The program is not being run.^M ... instead of the expected: ... (gdb) kill^M The program is not being run.^M (gdb) ... Likewise, we occasionally run into a nonsilent timeout: ... (gdb) disconnect^M (gdb) You can't do that when your target is `exec'^M FAIL: gdb.server/stop-reply-no-thread.exp: to_disable=Tthread: t_nonstop=on: \ disconnect (timeout) ... Typically, this results in the test-case taking more than two minutes to run. The problem can be reproduced using just: ... $ ssh -l $USER 127.0.0.1 gdb -q -ex kill ... Note that ssh by default uses -T which disables pseudo-tty allocation (as opposed to -t which forces pseudo-tty allocation): ... $ ssh -l $USER 127.0.0.1 -T tty not a tty $ ssh -l $USER 127.0.0.1 -t tty /dev/pts/5 Connection to 127.0.0.1 closed. ... and according to https://stackoverflow.com/a/63241102 the behaviour we're seeing is specific to using '-T'. The related host board local-remote-host.exp does use '-t', and the only difference between the two boards mentioned is whether editing is on or off. Fix this by: - moving the content of local-remote-host-notty.exp into local-remote-host.exp - consequently, extending the copyright years in local-remote-host.exp - including local-remote-host.exp in local-remote-host-notty.exp (making local-remote-host-notty.exp use '-t') - adding -iex "set editing off" to GDBFLAGS in local-remote-host-notty.exp This results in the test-case taking just 6 seconds to run. Tested on x86_64-linux. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29669
2022-10-14[gdb/testsuite] Disable styling in host board local-remote-host.expTom de Vries1-0/+2
With test-case gdb.server/stop-reply-no-thread.exp and host board local-remote-host.exp, I run into: ... Breakpoint 1, ^[[33mmain^[[m () at ^[[32mstop-reply-no-thread.c^[[m:21^M 21 ^[[01;34mreturn^[[m ^[[35m0^[[m^[[31m;^[[m^M (gdb) FAIL: gdb.server/stop-reply-no-thread.exp: to_disable=: t_nonstop=off: \ continue to main ... The problem is that styling is enabled, and that is causing a regexp mismatch. With native, styling is disabled in default_gdb_init by doing 'setenv TERM "dumb"', but that only has effect because the build (where we execute runtest, and consequently the setenv) and the host (where we execute gdb) are the same. For this host board however, gdb executes on a remote host, and the setenv has no effect. We could try to make some generic way to set TERM on the host, but for the purposes of this test-case it seems sufficient to just add: ... set GDBFLAGS "${GDBFLAGS} -iex \"set style enabled off\"" ... so let's go with that for now. Tested on x86_64-linux.
2022-10-14Use scoped_value_mark in more placesTom Tromey8-54/+37
I looked at all the spots using value_mark, and converted all the straightforward ones to use scoped_value_mark instead. Regression tested on x86-64 Fedora 34.
2022-10-14gdb/arm: Stop unwinding on error, but do not assertTorbjörn SVENSSON1-7/+40
When it's impossible to read the FPCCR and XPSR, the unwinding is unpredictable as the it's not possible to determine the correct frame size or padding. The only sane thing to do in this condition is to stop the unwinding. Example session without this patch: (gdb) bt #0 SVC_Handler () at .../GPIO/GPIO_EXTI/Src/stm32f4xx_it.c:112 .../gdb/arm-tdep.c:3594: internal-error: arm_m_exception_cache: Assertion `safe_read_memory_unsigned_integer (FPCCR, ARM_INT_REGISTER_SIZE, byte_order, &fpccr)' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. ----- Backtrace ----- 0x5583bfb2a157 gdb_internal_backtrace_1 ... --------------------- This is a bug, please report it. For instructions, see: <https://www.gnu.org/software/gdb/bugs/>. Aborted (core dumped) Example session with this patch: (gdb) bt #0 SVC_Handler () at .../GPIO/GPIO_EXTI/Src/stm32f4xx_it.c:112 warning: Could not fetch required FPCCR content. Further unwind is impossible. #1 <signal handler called> (gdb) Reviewed-by: Pedro Alves <pedro@palves.net> Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2022-10-14[gdb/testsuite] Drop unnecessary -Wl,-soname in gdb.base/skip-solib.expTom de Vries1-1/+1
I noticed in gdb.base/skip-solib.exp: ... if {[gdb_compile_shlib ${srcdir}/${subdir}/${srcfile_lib} ${binfile_lib} \ [list debug -Wl,-soname,${libname}.so]] != ""} { return -1 } ... that the -Wl,-soname argument is missing an ldflags= prefix, but adding it gives us a duplicate: ... Executing on host: gcc -fno-stack-protector \ outputs/gdb.base/skip-solib/skip-solib-lib.c.o -fdiagnostics-color=never \ -shared -g -Wl,-soname,libskip-solib.so -Wl,-soname,libskip-solib.so -lm \ -o outputs/gdb.base/skip-solib/libskip-solib.so (timeout = 300) ... so apparently it's taken care of by gdb_compile_shlib. Drop the inactive and also unnecessary -Wl,-soname,${libname}.so from the flags list for the gdb_compile_shlib call. Tested on x86_64-linux.
2022-10-14[gdb/testsuite] Fix gdb.base/infoline-reloc-main-from-zero.exp with PIETom de Vries1-0/+1
With test-case gdb.base/infoline-reloc-main-from-zero.exp and target board unix/-fPIE/-pie I run into: ... gdb compile failed, ld: infoline-reloc-main-from-zero: error: \ PHDR segment not covered by LOAD segment collect2: error: ld returned 1 exit status ... When running with native, I find that the executable is static: ... $ file infoline-reloc-main-from-zero infoline-reloc-main-from-zero: ELF 64-bit LSB executable, x86-64, \ version 1 (SYSV), statically linked, BuildID[sha1]=$hex, with debug_info, \ not stripped ... despite not having been compiled with -static. Fix the compilation by adding -static to the compilation flags. Tested on x86_64-linux.
2022-10-14[gdb/testsuite] Fix gdb.base/infoline-reloc-main-from-zero.exp with clangTom de Vries16-26/+26
With test-case gdb.base/infoline-reloc-main-from-zero.exp and clang I run into: ... gdb compile failed, clang-13.0: warning: -e main: 'linker' input unused \ [-Wunused-command-line-argument] clang-13.0: warning: -Wl,-Ttext=0x00: 'linker' input unused \ [-Wunused-command-line-argument] clang-13.0: warning: -Wl,-N: 'linker' input unused \ [-Wunused-command-line-argument] UNTESTED: gdb.base/infoline-reloc-main-from-zero.exp: \ infoline-reloc-main-from-zero.exp UNTESTED: gdb.base/infoline-reloc-main-from-zero.exp: failed to compile ... Fix this by using ldflags instead of additional_flags. Likewise, fix all occurrences of: ... $ find gdb/testsuite -name *.exp | xargs grep additional_flags.*Wl ... Tested on x86_64-linux.
2022-10-14[gdb/testsuite] Fix nopie test-cases with target board unix/-fPIE/-pieTom de Vries1-1/+4
Compilers default to either PIE or no-PIE executables. In order to test PIE executables with a compiler that produces non-PIE by default, we can use target board unix/-fPIE/-pie, which set the multilib_flags of the target board to "-fPIE -pie". Likewise, we can use target board unix/-fno-PIE/-no-pie with a compiler that produces PIE by default. The target board unix/-fno-PIE/-no-pie has a potential problem when compiling shared libs, because the multilib_flags will override the attempts of gdb_compile_shlib to compile with -fPIC. This is taken care of by running the body of gdb_compile_shlib wrapped in with_PIE_multilib_flags_filtered. The target board unix/-fPIE/-pie has a problem with nopie compilations. The current approach is to do the compilation hoping for the best, and if we find out that the resulting executable is PIE despite specifying nopie, we error out with the standard error message "nopie failed to prevent PIE executable". That however does not work for hard-coded assembly nopie test-cases, which will just noisily refuse to compile: ... ld: amd64-disp-step0.o: relocation R_X86_64_32S against `.text' can not be \ used when making a PIE object; recompile with -fPIE^M ... Fix this in gdb_compile by filtering out the PIE settings in the target board multilib_flags when pie or nopie is specified. Tested on x86_64-linux.