aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2023-03-14Add methods and operators to gdb_mpzTom Tromey6-61/+140
This adds various methods and operators to gdb_mpz, as a step toward hiding the implementation. This only adds the operators that were needed. Many more could be added as required.
2023-03-14Clean up gmp-utils.h includesTom Tromey3-2/+2
gmp-utils.h includes "defs.h", but normally the rule in gdb is that the .c files include this first. This patch changes this code to match the rest of gdb.
2023-03-14Fix DAP frame bug with older versions of PythonTom Tromey1-18/+15
Tom de Vries pointed out that one DAP test failed on Python 3.6 because gdb.Frame is not hashable. This patch fixes the problem by using a list to hold the frames. This is less efficient but there normally won't be that many frames. Tested-by: Tom de Vries <tdevries@suse.de>
2023-03-14[gdb/testsuite] Add gdb.testsuite/board-sanity.expTom de Vries4-42/+124
Add a test-case that tests the sanity of target/host boards. It contains a number of tests related to remote file manipulation, exercising: - remote_upload - remote_download - remote_file exists - remote_file delete which check that these work together as expected. Tested on x86_64-linux, with all relevant gdb/testsuite/boards/*.exp boards. For target board remote-stdio-gdbserver.exp, this revealed a trivial problem with the return value of proc ${board}_file for delete, so fix this. The test-case shows that the proc ${board}_download in local-remote-host-native.exp is broken, so remove it. Likewise for board local-remote-host.exp, so remove proc ${board}_download and associated ${board}_file. Tested on x86_64-linux.
2023-03-13gdb: add gdbarch::displaced_step_buffer_lengthAndrew Burgess8-12/+66
The gdbarch::max_insn_length field is used mostly to support displaced stepping; it controls the size of the buffers allocated for the displaced-step instruction, and is also used when first copying the instruction, and later, when fixing up the instruction, in order to read in and parse the instruction being stepped. However, it has started to be used in other places in GDB, for example, it's used in the Python disassembler API, and it is used on amd64 as part of branch-tracing instruction classification. The problem is that the value assigned to max_insn_length is not always the maximum instruction length, but sometimes is a multiple of that length, as required to support displaced stepping, see rs600, ARM, and AArch64 for examples of this. It seems to me that we are overloading the meaning of the max_insn_length field, and I think that could potentially lead to confusion. I propose that we add a new gdbarch field, gdbarch::displaced_step_buffer_length, this new field will do exactly what it says on the tin; represent the required displaced step buffer size. The max_insn_length field can then do exactly what it claims to do; represent the maximum length of a single instruction. As some architectures (e.g. i386, and amd64) only require their displaced step buffers to be a single instruction in size, I propose that the default for displaced_step_buffer_length will be the value of max_insn_length. Architectures than need more buffer space can then override this default as needed. I've updated all architectures to setup the new field if appropriate, and I've audited all calls to gdbarch_max_insn_length and switched to gdbarch_displaced_step_buffer_length where appropriate. There should be no user visible changes after this commit. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-13gdbarch: make invalid=True the default for all ComponentsAndrew Burgess2-15/+18
This commit switches the default value for the 'invalid' field from False to True. All components that previous set the invalid field to True explicitly have had the field removed. I think that True is a good choice for the default, this means that we now get the validity checks by default, and if anyone adds a new Component they need to make a choice to add an 'invalid=False' line and disable the validation. The flip side of this is that 'invalid=False' seems to be far more common than 'invalid=True'. But I don't see a huge problem with this, we shouldn't be aiming to reduce our typing, rather we should choose based on which is least likely to introduce bugs. I think assuming that we should do a validity check will achieve that. Some additional components need to have an 'invalid=False' line added to their definition, these are components that have a predefault value, which is sufficient; the tdep code doesn't need to replace this value if it doesn't want to. Without adding the 'invalid=False' these components would be considered to be invalid if they have not changed from their predefault value -- but the predefault is fine. There's no change in the generated code after this commit, so there will be no user visible changes after this commit. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-13gdbarch: remove some unneeded predefault="0" from gdbarch_components.pyAndrew Burgess2-26/+6
I noticed that there are a bunch of 'predefault="0"' lines in gdbarch_components.py, and that some (just some, not all) of these are not needed. The gdbarch is already zero initialized, but these lines seem to exists so that we can know when to compare against "0" and when to compare against "NULL". At least, this seems to be useful in some places in the generated code. Specifically, if we remove the predefault="0" line from the max_insn_length component then we end up generating a line like: gdb_assert (gdbarch->max_insn_length != NULL); which doesn't compile as we compare a ULONGEST to NULL. In this commit I remove all the predefault="0" lines that I claim are obviously not needed. These are lines for components that are not Values (i.e. the component holds a function pointer anyway), or for Value components that hold a pointer type, in which case using NULL is fine. The only changes after this commit are some fields that have nullptr as their initial value, and gcore_bfd_target now compares to NULL not 0 in gdbarch_gcore_bfd_target_p, which, given the field is of type 'const char *', seems like an improvement. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-13gdbarch: improve generation of validation in gdbarch gettersAndrew Burgess2-18/+16
We currently generate some validation code within the gdbarch getter methods. This commit adjusts the algorithm used to generate this validation slightly to make the gdbarch.py code (I think) clearer; there's no significant changes to what is generated. The validation algorithm for gdbarch values is now: - If the Value has an 'invalid' field that is a string, use that for validation, - If the Value has its 'predicate' field set to true, then check the predicate returns true, this ensures the predicate has been called, - If the Value has its 'invalid' field set to True, or the Value has 'postdefault' field, then check the fields has changed from its initial value, - Otherwise no validation is performed. The only changes after this commit are: - Some comments change slightly, and - For 'gcore_bfd_target' and 'max_insn_length' we now validate by calling the predicate rather than checking the field value directly, the underlying check being performed is unchanged though. There should be no user visible changes after this commit. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-13gdbarch: use predefault for more value components within gdbarchAndrew Burgess2-24/+12
For some reason the following value components of gdbarch: bfloat16_format half_format float_format double_format long_double_format so_ops All use a postdefault but no predefault to set the default value for the component. As the postdefault values for these components are all constant pointers that don't depend on other fields within the gdbarch, then I don't see any reason why we couldn't use a predefault instead. So lets do that. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-13gdb/gdbarch: remove the 'invalid=None' state from gdbarch_components.pyAndrew Burgess4-25/+36
This commit ensures that the 'invalid' property of all components is either True, False, or a string. Additionally, this commit allows a component to have both a predicate and for the 'invalid' property to be a string. Removing the option for 'invalid' to be None allows us to simplify the algorithms in gdbarch.py a little. Allowing a component to have both a predicate and an 'invalid' string means that we can validate the value that a tdep sets into a field, but also allow a predicate to ensure that the field has changed from the default. This functionality isn't going to be used in this series, but I have tested it locally and believe that it would work, and this might make it easier for others to add new components in the future. In gdbarch_types.py, I've updated the type annotations to show that the 'invalid' field should not be None, and I've changed the default for this field from None to False. The change to using False as the default is temporary. Later in this series I'm going to change the default to True, but we need more fixes before that can be done. Additionally, in gdbarch_types.py I've removed an assert from Component.get_predicate. This assert ensured that we didn't have the predicate field set to True and the invalid field set to a string. However, no component currently uses this configuration, and after this commit, that combination is now supported, so the assert can be removed. As a consequence of the gdbarch_types.py changes we see some additional comments generated in gdbarch.c about verification being skipped due to the invalid field being False. This comment is inline with plenty of other getters that also have a similar comment. Plenty of the getters do have validation, so I think it is reasonable to have a comment noting that the validation has been skipped for a specific reason, rather than due to some bug. In gdbarch_components.py I've had to add 'invalid=True' for two components: gcore_bfd_target and max_insn_length, without this the validation in the gdbarch getter would disappear. And in gdbarch.py I've reworked the logic for generating the verify_gdbarch function, and for generating the getter functions. The logic for generating the getter functions is still not ideal, I ended up having to add this additional logic block: elif c.postdefault is not None and c.predefault is not None: print(" /* Check variable changed from pre-default. */", file=f) print(f" gdb_assert (gdbarch->{c.name} != {c.predefault});", file=f) which was needed to ensure we continued to generate the same code as before, without this the fact that invalid is now False when it would previously have been None, meant that we dropped the gdb_assert in favour of a comment like: print(f" /* Skip verify of {c.name}, invalid_p == 0 */", file=f) which is clearly not a good change. We could potentially look at improving this in a later commit, but I don't plan to do that in this series. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-13gdb/gdbarch: split postdefault setup from invalid check in gdbarch.pyAndrew Burgess2-38/+44
Restructure how gdbarch.py generates the verify_gdbarch function. Previously the postdefault handling was bundled together with the validation. This means that a field can't have both a postdefault, and set its invalid attribute to a string. This doesn't seem reasonable to me, I see no reason why a field can't have both a postdefault (used when the tdep doesn't set the field), and an invalid expression, which can be used to validate the value that a tdep might set. In this commit I restructure the verify_gdbarch generation code to allow the above, there is no change in the actual generated code in this commit, that will come in later commit. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-13gdb/gdbarch: remove yet more 'invalid=True' from gdbarch_components.pyAndrew Burgess1-9/+0
Following on from the previous commit, this commit removes yet more 'invalid=True' lines from gdbarch_components.py where the invalid setting has no effect. Due to the algorithm used in gdbarch.py for generated verify_gdbarch, if a component has a postdefault value then no invalid check will ever be generated for the component, as such setting 'invalid=True' on the component is pointless. This commit removes the setting of invalid. There is no change in the generated code after this commit. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-13gdb/gdbarch: remove unused 'invalid=True' from gdbarch_components.pyAndrew Burgess1-64/+0
Due to the algorithm used to generate verify_gdbarch in gdbarch.py, if a component has a predicate, then a validation check will never be generated. There are a bunch of components that are declared with both a predicate AND have 'invalid=True' set. The 'invalid=True' has no effect. In this commit I clean things up by removing all these additional 'invalid=True' lines. There's no change in any of the generated files after this commit. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-13Fix crash in inside_main_funcTom Tromey3-0/+73
gdb 13.1 crashes while running the rust compiler's debugger tests. The crash has a number of causes. First, the rust compiler still uses the C++-like _Z mangling, but with its own twist -- some hex digits added to the end of a symbol. So, while gdb finds the correct name of "main": (top-gdb) p name $13 = 0x292e0c0 "rustc_gdb_1031745::main" It isn't found in the minsyms, because C++ demangling yields: [99] t 0x90c0 _ZN17rustc_gdb_10317454main17h5b5be7fe16a97225E section .text rustc_gdb_1031745::main::h5b5be7fe16a97225 zko06yobckx336v This could perhaps be fixed. I also filed a new PR to suggest preferring the linkage name of the main program. Next, the rust compiler emits both a DW_TAG_subprogram and a DW_TAG_namespace for "main". This happens because the file is named "main.rs" -- i.e., the bug is specific to the source file name. The crash also seems to require the nested function inside of 'main', at least for me. The namespace always is generated, but perhaps this changes the ordering in the DWARF. When inside_main_func looks up the main symbol, it finds the namespace symbol rather than the function. (I filed a bug about fixing gdb's symbol tables -- long overdue.) Meanwhile, as I think it's important to fix this crash sooner rather than later, this patch changes inside_main_func to check that the symbol that is found is LOC_BLOCK. This perhaps should have been done in the first place, anyway. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30158
2023-03-13[gdb/testsuite] Fix gdb.python/tui-window-factory.exp for remote hostTom de Vries1-1/+4
When running gdb.python/tui-window.exp with host board local-remote-host-notty and target board native-gdbserver, I get: ... FAIL: gdb.python/tui-window-factory.exp: msg_2: \ check test_window box (box check: ul corner is l, not +) ... The problem is that the result of Term::prepare_for_tui is not checked. Fix this by adding the missing check. Tested on x86_64-linux.
2023-03-13[gdb/testsuite] Fix gdb.python/tui-window.exp for remote hostTom de Vries1-0/+1
When running gdb.python/tui-window.exp with host board local-remote-host-notty and target board native-gdbserver, I get: ... UNSUPPORTED: gdb.python/tui-window.exp: TUI not supported FAIL: gdb.python/tui-window.exp: test title ... Fix this by adding the missing return after the unsupported. Tested on x86_64-linux.
2023-03-13[gdb/testsuite] Fix gdb.tui/completion.exp for local-remote-host-nottyTom de Vries1-5/+8
When running test-case gdb.tui/completion.exp with host board local-remote-host-notty and target board native-gdbserver, I get: ... FAIL: gdb.tui/completion.exp: completion of layout names: \ tab completion (timeout) ... The test-case contains a few tests that do tab completion, which requires readline, which is unavailable with host board local-remote-host-notty. Fix this by adding the missing check for readline_is_used. Tested on x86_64-linux.
2023-03-13[gdb/testsuite] Fix gdb.tui/tui-layout.exp for remote hostTom de Vries1-0/+4
When running test-case gdb.tui/tui-layout.exp with host board local-remote-host-notty and target board native-gdbserver, I get: ... FAIL: gdb.tui/tui-layout.exp: terminal=dumb: execution=false: layout=asm: \ layout asm (timeout) ... The problem is that the test-case expects that the default "setenv TERM dumb" has effect, which is not the case for remote host. Fix this by skipping the test for remote host. Tested on x86_64-linux.
2023-03-13[gdb/testsuite] Fix gdb.tui/tui-nl-filtered-output.exp for remote hostTom de Vries1-1/+4
When running test-case gdb.tui/tui-nl-filtered-output.exp with host board local-remote-host-notty and target board native-gdbserver, I get: ... FAIL: gdb.tui/tui-nl-filtered-output.exp: check printf output ... The problem is that Term::enter_tui is returning 0, but the test-case doesn't check for this, and consequently runs unsupported tests. Fix this by adding the missing check. Tested on x86_64-linux.
2023-03-13[gdb/testsuite] Require ![is_remote host] for TUITom de Vries1-0/+8
When running test-case gdb.tui/corefile-run.exp with both host and target board local-remote-host-native.exp, we run into: ... FAIL: gdb.tui/corefile-run.exp: load corefile ... while this passes with USE_TUI=0. The problem is that the TUI setup code uses "setenv TERM ansi", which has no effect on remote host. I can confirm this analysis by working around this problem in local-remote-host-native.exp like this: ... - spawn $RSH -t -l $username $remote $cmd + spawn $RSH -t -l $username $remote "export TERM=ansi; $cmd" ... For now, simply make TUI unsupported for remote host, by returning 0 in prepare_for_tui. Tested on x86_64-linux.
2023-03-13[gdb/testsuite] Handle USE_TUI in gdb.tui/corefile-run.expTom de Vries1-3/+15
Once in a while I find myself rewriting a TUI test-case into a non-TUI test-case, to better understand whether the problem I'm looking at is related to the TUI or not. I've got the impression that I've done this sufficiently often that it's worth committing the non-TUI version, so having just written a non-TUI version of gdb.tui/corefile-run.exp, let's commit it. The non-TUI version can be enabled by doing: ... $ make check "RUNTESTFLAGS=gdb.tui/corefile-run.exp USE_TUI=0" ... Also remove hard-coding of a source line number. Tested on x86_64-linux.
2023-03-13[gdb/testsuite] Fix untested message in gdb.tui/corefile-run.expTom de Vries2-6/+22
In test-case gdb.tui/corefile-run.exp, we have this bit: ... require !use_gdb_stub if { [target_info gdb_protocol] == "extended-remote" } { untested "not supported" return } ... So with target board native-gdbserver we get: ... UNSUPPORTED: gdb.tui/corefile-run.exp: require failed: !use_gdb_stub ... and with target board native-extended-gdbserver instead: ... UNTESTED: gdb.tui/corefile-run.exp: not supported ... Fix this by: - adding an optional argument target_description to proc target_can_use_run_cmd - handling the target_description == core && [target_info gdb_protocol] == "extended-remote" case in the proc - using require {target_can_use_run_cmd core} such that now in both cases we have: ... UNSUPPORTED: gdb.tui/corefile-run.exp: require failed: \ target_can_use_run_cmd core ... Tested on x86_64-linux.
2023-03-13[gdb/testsuite] Fix gdb.threads/step-bg-decr-pc-switch-thread.exp for ↵Tom de Vries1-2/+13
native-gdbserver With test-case gdb.threads/step-bg-decr-pc-switch-thread.exp and target board native-gdbserver, I run into: ... (gdb) UNSUPPORTED: gdb.threads/step-bg-decr-pc-switch-thread.exp: \ switch to main thread Remote debugging from host ::1, port 43914^M monitor exit^M Cannot execute this command while the target is running.^M Use the "interrupt" command to stop the target^M and then try again.^M (gdb) WARNING: Timed out waiting for EOF in server after monitor exit ... Fix this by following the advice and issuing an interrupt command, allowing the following monitor exit command to succeed. Tested on x86_64-linux.
2023-03-13[gdb/obvious]: fix python formatting for test gdb.python/py-typeprint.pyBruno Larsen1-3/+8
python black formatter was complaining about the formatting of gdb.python/py-typeprint.py, so this commit corrects it.
2023-03-13gdb/testsuite: add regression test for per-objfile typeprintersBruno Larsen3-3/+32
PR python/17136 reported an unhandled exception when using typeprinters only valid on some objfiles, rather than being a global typeprinter. The fix was accepted without a regression test, and we've been carrying one out-of-tree for a while but I think it's worth upstreaming. The code itself was developed by Jan Kratochvil. Co-Authored-By: Jan Kratochvil <jkratochvil@azul.com> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17136 Reviewed-By: Andrew Burgess <aburgess@redhat.com> Approved-By: Tom Tromey <tom@tromey.com>
2023-03-13Remove dead code from scalar_binopTom Tromey1-16/+0
scalar_binop has code for "&&" and "||", but I think this code can't currently be run -- and, furthermore, it doesn't make sense to have this code here, as the point of these operators is to short-circuit evaluation. This patch removes the dead code. Regression tested on x86-64 Fedora 36. Approved-by: Kevin Buettner <kevinb@redhat.com>
2023-03-13aarch64: Expand documentation of XML featuresLuis Machado1-8/+202
Similar to the arm target documentation situation, the documentation of the XML features for AArch64 targets is rather brief. I have received the same feedback that what gdb carries in the documentation is quite unclear from the perspective of what debugging servers should define in the XML features, how and what the outcome is in gdb. This patch attempts to clarify a bit more what all the possible features are.
2023-03-13arm: Expand documentation of XML featuresLuis Machado1-24/+259
The documentation of the XML features for Arm targets is very brief. I have received feedback saying it is quite unclear from the perspective of the debugging servers what should be defined in the XML features, how and what the outcome is in gdb. This patch attempts to clarify a bit more what all the possible features are.
2023-03-11Change linetable_entry::is_stmt to boolTom Tromey4-5/+5
This changes linetable_entry::is_stmt to type bool, rather than unsigned. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-11Remove extra scopes from objfile_relocate1Tom Tromey1-43/+33
objfile_relocate1 introduces new scopes that aren't necessary. I noticed this while working on an earlier patch in this series. This patch removes these. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-11Constify linetablesTom Tromey10-48/+54
Linetables no longer change after they are created. This patch applies const to them. Note there is one hack to cast away const in mdebugread.c. This code allocates a linetable using 'malloc', then later copies it to the obstack. While this could be cleaned up, I chose not to do so because I have no way of testing it. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-11Change linetables to be objfile-independentTom Tromey15-76/+110
This changes linetables to not add the text offset to the addresses they contain. I did this in a few steps, necessarily combined together in one patch: I renamed the 'pc' member to 'm_pc', added the appropriate accessors, and then recompiled. Then I fixed all the errors. Where possible I generally chose to use the raw_pc accessor, as it is less expensive. Note that this patch discounts the possibility that the text section offset might cause wraparound in the addresses in the line table. However, this was already discounted -- in particular, objfile_relocate1 did not re-sort the table in this scenario. (There was a bug open about this, but as far as I can tell this has never happened, it's not even clear what inspired that bug.) Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-11Add operator< and operator== to linetable_entryTom Tromey4-17/+16
This adds a couple of comparison operators to linetable_entry, and simplifies both the calls to sort and one other spot that checks for equality. Approved-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-10PR gdb/30214: Prefer local include paths to system include pathsJohn Baldwin1-2/+2
Some systems may install binutils headers into a system location (e.g. /usr/local/include on FreeBSD) which may also include headers for other external packages used by GDB such as zlib or zstd. If a system include path such as /usr/local/include is added before local include paths to directories within a clone or release tarball, then headers from the external binutils package are used which can result in build failures if the external binutils package is out of sync with the version of GDB being built. To fix, sort the include paths in INTERNAL_CFLAGS_BASE to add CFLAGS for "local" componenets before external components. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30214 Reviewed-By: Tom Tromey <tom@tromey.com>
2023-03-10[gdb/testsuite] Fix gdb.python/py-completion.expTom de Vries1-0/+2
With test-case gdb.python/py-completion.exp and target board native-extended-gdbserver I get this warning: ... (gdb) PASS: gdb.python/py-completion.exp: discard #2 completefilecommandcond $outputs/gdb.python/py-completion/py-completion-t^G\ PASS: gdb.python/py-completion.exp: completefilecommandcond completion Remote debugging from host ::1, port 53346^M monitor exit^M not implemented^M (gdb) WARNING: Timed out waiting for EOF in server after monitor exit ... Fix this by adding the missing "discard #3", such that we have instead: ... (gdb) PASS: gdb.python/py-completion.exp: discard #2 completefilecommandcond $outputs/gdb.python/py-completion/py-completion-t^G\ PASS: gdb.python/py-completion.exp: completefilecommandcond completion ^M not implemented^M (gdb) PASS: gdb.python/py-completion.exp: discard #3 Remote debugging from host ::1, port 36278^M monitor exit^M (gdb) ... Tested on x86_64-linux.
2023-03-10[gdb/testsuite] Fix gdb.python/py-cmd.expTom de Vries1-1/+1
[ Using $pp as shorthand for the pagination prompt "--Type <RET> for more, q to quit, c to continue without paging--". ] The test-case gdb.python/py-cmd.exp passes, but the handling of the test_multiline command output looks a bit odd: ... (gdb) test_multiline test_multiline output ... test_multiline output $ppPASS: gdb.python/py-cmd.exp: verify pagination from test_multiline q test_multiline Quit (gdb) test_multiline test_multiline output ... test_multiline output $ppPASS: gdb.python/py-cmd.exp: verify pagination from test_multiline: q ... What happens is: - a test_multiline command is issued - some output is printed, followed by a pagination prompt - the test-case concludes that pagination occurred, and produces a PASS - "q\n" is replied to the pagination prompt - without waiting for response to the "q\n", another test_multiline command is issued - in response to the "q\n" we get "Quit\n(gdb) " - some output is printed, followed by a pagination prompt - the test-case concludes that there's a valid response to the "q\n", and produces a PASS, consuming the second pagination prompt, but without a reply. My conclusion is that the second test_multiline command is unintentional, so fix this by removing it. Without it, we have the more straightforward: ... (gdb) test_multiline test_multiline output ... test_multiline output $ppPASS: gdb.python/py-cmd.exp: verify pagination from test_multiline q Quit (gdb) PASS: gdb.python/py-cmd.exp: verify pagination from test_multiline: q ... This also fixes the following warning with target board native-gdbserver: ... WARNING: Timed out waiting for EOF in server after monitor exit ... Tested on x86_64-linux.
2023-03-10[gdb/testsuite] Fix py-autoloaded-pretty-printers-in-newobjfile-event.exp ↵Tom de Vries1-0/+17
for remote target With test-case gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event.exp and target board remote-gdbserver-on-localhost, I run into: ... FAIL: $exp: runto: run to main ... I can easily fix this using "gdb_load_shlib $binfile_lib", but then run into: ... (gdb) print all_good^M $1 = false^M (gdb) FAIL: $exp: print all_good info pretty-printer^M ... Sysroot is set to "target:", so gdb downloads the shared library from the target (Using $so as shorthand for libpy-autoloaded-pretty-printers-in-newobjfile-event.so): ... Reading /home/remote-target/$so from remote target...^M ... and internally refers to it as "target:/home/remote-target/$so". In load_auto_scripts_for_objfile, gdb gives up trying to auto-load scripts for $so once it checks for is_target_filename. Fix this by declaring auto-load unsupported if sysroot starts with "target:". Tested on x86_64-linux.
2023-03-10[gdb/testsuite] Fix gdb.python/py-event-load.exp for remote targetTom de Vries1-2/+3
Fix test-case gdb.python/py-event-load.exp for target board remote-gdbserver-on-localhost using gdb_download_shlib. Tested on x86_64-linux.
2023-03-10Use require with test_compiler_infoTom Tromey1-4/+1
One spot that checks test_compiler_info can be switched to use 'require'.
2023-03-10More uses of require with istargetTom Tromey9-26/+10
I found a few more spots that check istarget that can be switched to use 'require'.
2023-03-10Use require with gdb_skip_stdio_testTom Tromey1-3/+1
One use of gdb_skip_stdio_test can use 'require'.
2023-03-10Use require with target_infoTom Tromey75-341/+100
This changes many tests to use 'require' when checking target_info. In a few spots, the require is hoisted to the top of the file, to avoid doing any extra work when the test is going to be skipped anyway.
2023-03-10Move allocate_stub_method to stabsread.cTom Tromey3-22/+20
allocate_stub_method is only called from stabsread.c, and I don't think it will be needed anywhere else. So, move it and make it static. Tested by rebuilding.
2023-03-09gdb, gdbserver, gdbsupport: fix whitespace issuesSimon Marchi56-354/+349
Replace spaces with tabs in a bunch of places. Change-Id: If0f87180f1d13028dc178e5a8af7882a067868b0
2023-03-09[gdb/testsuite] Fix gdb.threads/pending-fork-event-detach.exp for remote targetTom de Vries1-1/+14
Fix test-case gdb.threads/pending-fork-event-detach.exp for target board remote-gdbserver-on-localhost using gdb_remote_download for $touch_file_bin. Then, fix the test-case for target board remote-stdio-gdbserver with REMOTE_TMPDIR=~/tmp.remote-stdio-gdbserver by creating $touch_file_path on target using remote_download, and using the resulting path. Tested on x86_64-linux.
2023-03-09[gdb/testsuite] Fix gdb.threads/multiple-successive-infcall.exp on ↵Tom de Vries1-0/+3
native-gdbserver With test-case gdb.threads/multiple-successive-infcall.exp and target board native-gdbserver I run into: ... (gdb) continue^M Continuing.^M [New Thread 758.759]^M ^M Thread 1 "multiple-succes" hit Breakpoint 2, main () at \ multiple-successive-infcall.c:97^M 97 thread_ids[tid] = tid + 2; /* prethreadcreationmarker */^M (gdb) FAIL: gdb.threads/multiple-successive-infcall.exp: thread=5: \ created new thread ... The problem is that the new thread message doesn't match the regexp, which expects something like this instead: ... [New Thread 0x7ffff746e700 (LWP 570)]^M ... Fix this by accepting this form of new thread message. Tested on x86_64-linux.
2023-03-09[gdb/testsuite] Fix gdb.threads/thread-specific-bp.exp on native-gdbserverTom de Vries1-1/+7
With test-case gdb.threads/thread-specific-bp.exp and target board native-gdbserver I run into: ... (gdb) PASS: gdb.threads/thread-specific-bp.exp: non_stop=off: thread 1 selected continue^M Continuing.^M Thread-specific breakpoint 3 deleted - thread 2 no longer in the thread list.^M ^M Thread 1 "thread-specific" hit Breakpoint 4, end () at \ thread-specific-bp.c:29^M 29 }^M (gdb) FAIL: gdb.threads/thread-specific-bp.exp: non_stop=off: \ continue to end (timeout) ... The problem is that the test-case tries to match the "[Thread ... exited]" message which we do see with native testing: ... Continuing.^M [Thread 0x7ffff746e700 (LWP 7047) exited]^M Thread-specific breakpoint 3 deleted - thread 2 no longer in the thread list.^M ... The fact that the message is missing was reported as PR remote/30129. We could add a KFAIL for this, but the functionality the test-case is trying to test has nothing to do with the message, so it should pass. I only added matching of the message in commit 2e5843d87c4 ("[gdb/testsuite] Fix gdb.threads/thread-specific-bp.exp") to handle a race, not realizing doing so broke testing on native-gdbserver. Fix this by matching the "Thread-specific breakpoint $decimal deleted" message instead. Tested on x86_64-linux.
2023-03-09[gdb/testsuite] Fix gdb.server/*.exp for remote targetTom de Vries6-12/+24
Fix test-cases for target board remote-gdbserver-on-localhost by using gdb_remote_download. Tested on x86_64-linux.
2023-03-09[gdb/testsuite] Fix gdb.server/unittest.exp for remote targetTom de Vries1-1/+1
With test-case gdb.server/unittest.exp and a build with --disable-unit-tests I get: ... (gdb) builtin_spawn /data/vries/gdb/leap-15-4/build/gdbserver/gdbserver \ --selftest^M Selftests have been disabled for this build.^M UNSUPPORTED: gdb.server/unittest.exp: unit tests ... but with target board remote-stdio-gdbserver I get instead: ... (gdb) builtin_spawn /usr/bin/ssh -t -l vries localhost \ /data/vries/gdb/leap-15-4/build/gdbserver/gdbserver --selftest^M Selftests have been disabled for this build.^M Connection to localhost closed.^M^M FAIL: gdb.server/unittest.exp: unit tests ... Fix this by making the regexp less strict. Tested on x86_64-linux.
2023-03-09[gdb/testsuite] Fix gdbserver path in remote-stdio-gdbserver.expTom de Vries1-3/+1
With test-case gdb.server/unittest.exp and target board remote-stdio-gdbserver I run into: ... (gdb) builtin_spawn /usr/bin/ssh -t -l vries localhost /usr/bin/gdbserver \ --selftest^M Selftests have been disabled for this build.^M UNSUPPORTED: gdb.server/unittest.exp: unit tests ... due to using the system gdbserver /usr/bin/gdbserver rather than the one from the build. Fix this by removing the hard-coding of /usr/bin/gdbserver in remote-stdio-gdbserver, allowing find_gdbserver to do its work, such that we have instead: ... (gdb) builtin_spawn /usr/bin/ssh -t -l vries localhost \ /data/vries/gdb/leap-15-4/build/gdbserver/gdbserver --selftest^M Running selftest remote_memory_tagging.^M Ran 1 unit tests, 0 failed^M Connection to localhost closed.^M^M PASS: gdb.server/unittest.exp: unit tests ... Tested on x86_64-linux.