[testsuite] Fixes for gdb.python tests on remote Windows host
Commit Message
The attached patch fixes a bunch of FAILs and ERRORs I've seen in
gdb.python tests running on remote Windows host. As noted in the commit
message, the fixes are mostly obvious and repetitive; e.g., remember to
copy the .py script to the remote host before trying to source it.
Since this is a pretty big patch, though, I wasn't sure the whole thing
qualifies as "obvious", and wanted to give folks a chance to object
before I check it in. So I propose to push it to trunk in a week if I
don't hear any objection or review (or promise to review) meanwhile.
-Sandra
Comments
Do the mingw checks in this patch also need to consider cygwin? E.g.:
This GDB was configured as "x86_64-pc-cygwin".
On Mon, Aug 12, 2019 at 5:20 PM Sandra Loosemore
<sandra@codesourcery.com> wrote:
>
> The attached patch fixes a bunch of FAILs and ERRORs I've seen in
> gdb.python tests running on remote Windows host. As noted in the commit
> message, the fixes are mostly obvious and repetitive; e.g., remember to
> copy the .py script to the remote host before trying to source it.
> Since this is a pretty big patch, though, I wasn't sure the whole thing
> qualifies as "obvious", and wanted to give folks a chance to object
> before I check it in. So I propose to push it to trunk in a week if I
> don't hear any objection or review (or promise to review) meanwhile.
>
> -Sandra
On 2019-08-12 6:20 p.m., Sandra Loosemore wrote:
> The attached patch fixes a bunch of FAILs and ERRORs I've seen in
> gdb.python tests running on remote Windows host. As noted in the commit
> message, the fixes are mostly obvious and repetitive; e.g., remember to
> copy the .py script to the remote host before trying to source it.
> Since this is a pretty big patch, though, I wasn't sure the whole thing
> qualifies as "obvious", and wanted to give folks a chance to object
> before I check it in. So I propose to push it to trunk in a week if I
> don't hear any objection or review (or promise to review) meanwhile.
>
> -Sandra
Hi Sandra,
Windows and remote host testing are two aspects that are really not tested upstream,
so thanks a lot for doing this. I ran the gdb.python testsuite locally on Linux and
didn't see any change in the results, which is good.
Just two nits on my side:
> diff --git a/gdb/testsuite/gdb.python/py-section-script.exp b/gdb/testsuite/gdb.python/py-section-script.exp
> index c4a6974..0ab1519 100644
> --- a/gdb/testsuite/gdb.python/py-section-script.exp
> +++ b/gdb/testsuite/gdb.python/py-section-script.exp
> @@ -77,22 +77,35 @@ gdb_exit
> gdb_start
> gdb_reinitialize_dir $srcdir/$subdir
>
> -gdb_test_no_output "set auto-load safe-path ${remote_python_file}:${binfile}" \
> +# Get the name of the binfile on the host; on a remote host this means
> +# stripping off any directory prefix.
> +if [is_remote host] {
> + set remote_binfile [file tail ${binfile}]
> +} else {
> + set remote_binfile ${binfile}
> +}
4 spaces indentation
> +
> +if [ishost *-*-mingw*] {
> + set remote_pathsep ";"
> +} else {
> + set remote_pathsep ":"
> +}
> +gdb_test_no_output "set auto-load safe-path ${remote_python_file}${remote_pathsep}${remote_binfile}" \
> "set auto-load safe-path"
> gdb_load ${binfile}
>
> # Verify gdb loaded each script and they appear once in the list.
> set test_name "verify scripts loaded"
> gdb_test_multiple "info auto-load python-scripts" "$test_name" {
> + -re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" {
> + pass "$test_name"
> + }
> -re "${testfile}.py.*${testfile}.py.*$gdb_prompt $" {
> fail "$test_name"
> }
> -re "inlined-script.*inlined-script.*$gdb_prompt $" {
> fail "$test_name"
> }
> - -re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" {
> - pass "$test_name"
> - }
Is this last change necessary?
Simon
On 8/12/19 7:34 PM, Christian Biesinger wrote:
> Do the mingw checks in this patch also need to consider cygwin? E.g.:
> This GDB was configured as "x86_64-pc-cygwin".
I believe they are completely separate targets. I don't know much about
cygwin, but I assume that Python built for cygwin library is linked with
the cygwin C library and understands cygwin's fake symbolic links, while
Python built for the mingw C library certainly does not. Similarly,
using ";" instead of ":" in PATH-like things is a Windows thing, while
I'm pretty sure cygwin emulates the POSIX syntax.
-Sandra
On 8/12/19 7:46 PM, Simon Marchi wrote:
> On 2019-08-12 6:20 p.m., Sandra Loosemore wrote:
>> The attached patch fixes a bunch of FAILs and ERRORs I've seen in
>> gdb.python tests running on remote Windows host. As noted in the commit
>> message, the fixes are mostly obvious and repetitive; e.g., remember to
>> copy the .py script to the remote host before trying to source it.
>> Since this is a pretty big patch, though, I wasn't sure the whole thing
>> qualifies as "obvious", and wanted to give folks a chance to object
>> before I check it in. So I propose to push it to trunk in a week if I
>> don't hear any objection or review (or promise to review) meanwhile.
>>
>> -Sandra
>
> Hi Sandra,
>
> Windows and remote host testing are two aspects that are really not tested upstream,
> so thanks a lot for doing this. I ran the gdb.python testsuite locally on Linux and
> didn't see any change in the results, which is good.
>
> Just two nits on my side:
>
>> diff --git a/gdb/testsuite/gdb.python/py-section-script.exp b/gdb/testsuite/gdb.python/py-section-script.exp
>> index c4a6974..0ab1519 100644
>> --- a/gdb/testsuite/gdb.python/py-section-script.exp
>> +++ b/gdb/testsuite/gdb.python/py-section-script.exp
>> @@ -77,22 +77,35 @@ gdb_exit
>> gdb_start
>> gdb_reinitialize_dir $srcdir/$subdir
>>
>> -gdb_test_no_output "set auto-load safe-path ${remote_python_file}:${binfile}" \
>> +# Get the name of the binfile on the host; on a remote host this means
>> +# stripping off any directory prefix.
>> +if [is_remote host] {
>> + set remote_binfile [file tail ${binfile}]
>> +} else {
>> + set remote_binfile ${binfile}
>> +}
>
> 4 spaces indentation
Ooops! I need to do something to make Emacs go into tcl mode
automatically for .exp files.
>
>> +
>> +if [ishost *-*-mingw*] {
>> + set remote_pathsep ";"
>> +} else {
>> + set remote_pathsep ":"
>> +}
>> +gdb_test_no_output "set auto-load safe-path ${remote_python_file}${remote_pathsep}${remote_binfile}" \
>> "set auto-load safe-path"
>> gdb_load ${binfile}
>>
>> # Verify gdb loaded each script and they appear once in the list.
>> set test_name "verify scripts loaded"
>> gdb_test_multiple "info auto-load python-scripts" "$test_name" {
>> + -re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" {
>> + pass "$test_name"
>> + }
>> -re "${testfile}.py.*${testfile}.py.*$gdb_prompt $" {
>> fail "$test_name"
>> }
>> -re "inlined-script.*inlined-script.*$gdb_prompt $" {
>> fail "$test_name"
>> }
>> - -re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" {
>> - pass "$test_name"
>> - }
>
> Is this last change necessary?
Yes. On Windows host, the output I'm seeing for this test that it's
trying to match is:
(gdb) info auto-load python-scripts
Loaded Script
Yes py-section-script.py
full name: \\long\windows\path\to\py-section-script.py
Yes gdb.inlined-script
(gdb)
This matches the first "fail" pattern as well as the "pass" pattern, so
the ordering is important. From the comment on this test, it's clear
this output is intended to be a "pass", so that one should go first.
-Sandra
On 2019-08-12 10:31 p.m., Sandra Loosemore wrote:
> Yes. On Windows host, the output I'm seeing for this test that it's
> trying to match is:
>
> (gdb) info auto-load python-scripts
> Loaded Script
>
>
> Yes py-section-script.py
>
>
> full name: \\long\windows\path\to\py-section-script.py
> Yes gdb.inlined-script
>
>
> (gdb)
>
> This matches the first "fail" pattern as well as the "pass" pattern, so
> the ordering is important. From the comment on this test, it's clear
> this output is intended to be a "pass", so that one should go first.
>
> -Sandra
Ok, that clears it up, thanks.
Simon
On 2019-08-12 10:18 p.m., Sandra Loosemore wrote:
> I believe they are completely separate targets. I don't know much about
> cygwin, but I assume that Python built for cygwin library is linked with
> the cygwin C library and understands cygwin's fake symbolic links, while
> Python built for the mingw C library certainly does not. Similarly,
> using ";" instead of ":" in PATH-like things is a Windows thing, while
> I'm pretty sure cygwin emulates the POSIX syntax.
Indeed, testing on cygwin would be a whole other task.
I forgot to mention, the patch LGTM, so if Christian is fine with this response too, then please push.
Simon
On Mon, Aug 12, 2019 at 9:54 PM Simon Marchi <simark@simark.ca> wrote:
>
> On 2019-08-12 10:18 p.m., Sandra Loosemore wrote:
> > I believe they are completely separate targets. I don't know much about
> > cygwin, but I assume that Python built for cygwin library is linked with
> > the cygwin C library and understands cygwin's fake symbolic links, while
> > Python built for the mingw C library certainly does not. Similarly,
> > using ";" instead of ":" in PATH-like things is a Windows thing, while
> > I'm pretty sure cygwin emulates the POSIX syntax.
>
> Indeed, testing on cygwin would be a whole other task.
>
> I forgot to mention, the patch LGTM, so if Christian is fine with this response too, then please push.
Yeah, that sounds good.
Christian
On 8/12/19 8:54 PM, Simon Marchi wrote:
> On 2019-08-12 10:18 p.m., Sandra Loosemore wrote:
>> I believe they are completely separate targets. I don't know much about
>> cygwin, but I assume that Python built for cygwin library is linked with
>> the cygwin C library and understands cygwin's fake symbolic links, while
>> Python built for the mingw C library certainly does not. Similarly,
>> using ";" instead of ":" in PATH-like things is a Windows thing, while
>> I'm pretty sure cygwin emulates the POSIX syntax.
>
> Indeed, testing on cygwin would be a whole other task.
>
> I forgot to mention, the patch LGTM, so if Christian is fine with this response too, then please push.
Thanks for the speedy review! I fixed the indentation problem you noted
before pushing the patch.
BTW, these are not the only issues I noticed in running the Python tests
on Windows host. There's another set involving the "explore" command
and the python interactive help which fail with timeouts because the
expected output is getting buffered. At this point I'm not sure whether
this is a problem with our test environment (we use cygwin ssh, which
native Windows doesn't recognize as a tty), or some misconfiguration in
the version of Windows python we are using. I've got a local patch to
temporarily disable those tests to speed up testing, but I don't think
that's a good fix for mainline. It would be better to figure out how to
force Python to unbuffer the output.
-Sandra
commit a71336a227b8e4f78c24073168bdb45c57d156ef
Author: Sandra Loosemore <sandra@codesourcery.com>
Date: Mon Aug 12 14:39:07 2019 -0700
Fixes for gdb.python tests on remote Windows host.
This patch fixes several test ERRORs and FAILs seen from running
gdb.python tests on a remote Windows host. The problems fixed
generally fall into these categories:
- Failure to copy the .py script to the host.
- Confusion between build and host pathnames.
- Assuming pathnames printed on the host include "/" as a directory
separator.
- Tests that need to be conditionally disabled due to missing features
on the host, etc.
2019-08-12 Sandra Loosemore <sandra@codesourcery.com>
gdb/testsuite/
* gdb.python/py-completion.exp: Download the .py file to the host
and use its host pathname. Conditionalize tests that use
tab completion and manipulate files on the build machine.
* gdb.python/py-events.exp: Download the .py file to the host
and use its host pathname.
* gdb.python/py-evsignal.exp: Likewise.
* gdb.python/py-evthreads.exp: Likewise.
* gdb.python/py-framefilter-invalidarg.exp: Match Windows
pathname syntax.
* gdb.python/py-framefilter.exp: Download the .py file to the right
place on the host. Match Windows pathname syntax.
* gdb.python/py-mi-var-info-path-expression.exp: Download the
.py file to the host and use its host pathname.
* gdb.python/py-objfile-script.exp: Match Windows pathname syntax.
* gdb.python/py-objfile.exp: Expect a host pathname, not a
build pathname. Skip symlink test on Windows host. Add missing
newline at end of file.
* gdb.python/py-pp-maint.exp: Download the .py file to the host
and use its host pathname.
* gdb.python/py-pp-registration.exp: Match Windows pathname syntax.
* gdb.python/py-section-script.exp: Use host location of binfile
on safe-path. Use correct path separator on Windows host.
Reorder alternatives in gdb_test_multiple to prevent matching
the wrong alternative on success.
* gdb.python/py-symtab.exp: Match Windows pathname syntax.
@@ -1,3 +1,31 @@
+2019-08-12 Sandra Loosemore <sandra@codesourcery.com>
+
+ * gdb.python/py-completion.exp: Download the .py file to the host
+ and use its host pathname. Conditionalize tests that use
+ tab completion and manipulate files on the build machine.
+ * gdb.python/py-events.exp: Download the .py file to the host
+ and use its host pathname.
+ * gdb.python/py-evsignal.exp: Likewise.
+ * gdb.python/py-evthreads.exp: Likewise.
+ * gdb.python/py-framefilter-invalidarg.exp: Match Windows
+ pathname syntax.
+ * gdb.python/py-framefilter.exp: Download the .py file to the right
+ place on the host. Match Windows pathname syntax.
+ * gdb.python/py-mi-var-info-path-expression.exp: Download the
+ .py file to the host and use its host pathname.
+ * gdb.python/py-objfile-script.exp: Match Windows pathname syntax.
+ * gdb.python/py-objfile.exp: Expect a host pathname, not a
+ build pathname. Skip symlink test on Windows host. Add missing
+ newline at end of file.
+ * gdb.python/py-pp-maint.exp: Download the .py file to the host
+ and use its host pathname.
+ * gdb.python/py-pp-registration.exp: Match Windows pathname syntax.
+ * gdb.python/py-section-script.exp: Use host location of binfile
+ on safe-path. Use correct path separator on Windows host.
+ Reorder alternatives in gdb_test_multiple to prevent matching
+ the wrong alternative on success.
+ * gdb.python/py-symtab.exp: Match Windows pathname syntax.
+
2019-08-12 Patrick Palka <patrick@parcs.ath.cx>
* gdb.gdb/selftest.exp (test_with_self): Update test to now
@@ -17,65 +17,69 @@ set testfile "py-completion"
load_lib gdb-python.exp
+set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]
+set discard 0
gdb_exit
gdb_start
# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }
-gdb_test_no_output "source ${srcdir}/${subdir}/${testfile}.py" \
- "load python file"
-
-# Create a temporary directory
-set testdir "[standard_output_file "py-completion-testdir"]/"
-set testdir_regex [string_to_regexp $testdir]
-set testdir_complete [standard_output_file "py-completion-test"]
-file mkdir $testdir
-
-# This one should always pass.
-send_gdb "completefileinit ${testdir_complete}\t"
-gdb_test_multiple "" "completefileinit completion" {
- -re "^completefileinit ${testdir_regex}$" {
- pass "completefileinit completion"
+# Tab completion tests require readline support, and this set of tests
+# doesn't work on a remote host either.
+if { [readline_is_used] && ![is_remote host] } {
+ gdb_test_no_output "source ${pyfile}" "load python file"
+
+ # Create a temporary directory
+ set testdir "[standard_output_file "py-completion-testdir"]/"
+ set testdir_regex [string_to_regexp $testdir]
+ set testdir_complete [standard_output_file "py-completion-test"]
+ file mkdir $testdir
+
+ # This one should always pass.
+ send_gdb "completefileinit ${testdir_complete}\t"
+ gdb_test_multiple "" "completefileinit completion" {
+ -re "^completefileinit ${testdir_regex}$" {
+ pass "completefileinit completion"
+ }
}
-}
-# Just discarding whatever we typed.
-set discard 0
-gdb_test " " ".*" "discard #[incr discard]"
+ # Just discarding whatever we typed.
+ gdb_test " " ".*" "discard #[incr discard]"
-# This is the problematic one.
-send_gdb "completefilemethod ${testdir_complete}\t"
-gdb_test_multiple "" "completefilemethod completion" {
- -re "^completefilemethod ${testdir_regex} $" {
- fail "completefilemethod completion (completed filename as wrong command arg)"
- }
- -re "^completefilemethod ${testdir_regex}$" {
- pass "completefilemethod completion"
+ # This is the problematic one.
+ send_gdb "completefilemethod ${testdir_complete}\t"
+ gdb_test_multiple "" "completefilemethod completion" {
+ -re "^completefilemethod ${testdir_regex} $" {
+ fail "completefilemethod completion (completed filename as wrong command arg)"
+ }
+ -re "^completefilemethod ${testdir_regex}$" {
+ pass "completefilemethod completion"
+ }
}
-}
-# Discarding again
-gdb_test " " ".*" "discard #[incr discard]"
+ # Discarding again
+ gdb_test " " ".*" "discard #[incr discard]"
-# Another problematic
-set completion_regex "[string_to_regexp [standard_output_file "py-completion-t"]]"
-send_gdb "completefilecommandcond [standard_output_file "py-completion-t\t"]"
-gdb_test_multiple "" "completefilecommandcond completion" {
- -re "^completefilecommandcond ${testdir}$" {
- fail "completefilecommandcond completion (completed filename instead of command)"
- }
- -re "^completefilecommandcond ${completion_regex}\007$" {
- pass "completefilecommandcond completion"
+ # Another problematic
+ set completion_regex "[string_to_regexp [standard_output_file "py-completion-t"]]"
+ send_gdb "completefilecommandcond [standard_output_file "py-completion-t\t"]"
+ gdb_test_multiple "" "completefilecommandcond completion" {
+ -re "^completefilecommandcond ${testdir}$" {
+ fail "completefilecommandcond completion (completed filename instead of command)"
+ }
+ -re "^completefilecommandcond ${completion_regex}\007$" {
+ pass "completefilecommandcond completion"
+ }
}
+
}
# Start gdb over again to clear out current state. This can interfere
# with the expected output of the below tests in a buggy gdb.
gdb_exit
gdb_start
-gdb_test_no_output "source ${srcdir}/${subdir}/${testfile}.py" \
- "load python file again"
+gdb_test_no_output "source ${pyfile}" "load python file again"
gdb_test_sequence "complete completel" \
"list all completions of 'complete completel'" {
@@ -26,7 +26,6 @@ set lib_opts debug
standard_testfile
set exec_opts [list debug shlib=$lib_sl]
-set pyfile ${srcdir}/${subdir}/${testfile}.py
if [get_compiler_info] {
return -1
@@ -43,6 +42,7 @@ clean_restart ${testfile}
if { [skip_python_tests] } { continue }
+set pyfile [gdb_remote_download host ${srcdir}/${subdir}/py-events.py]
gdb_test_no_output "source ${pyfile}" "load python file"
gdb_test "test-objfile-events" "Object file events registered."
@@ -23,7 +23,6 @@ if {[target_info gdb_protocol] == "remote"
load_lib gdb-python.exp
standard_testfile py-evthreads.c
-set pyfile ${srcdir}/${subdir}/py-events.py
if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
return -1
@@ -32,6 +31,7 @@ clean_restart $testfile
if { [skip_python_tests] } { continue }
+set pyfile [gdb_remote_download host ${srcdir}/${subdir}/py-events.py]
gdb_test_no_output "source ${pyfile}" "load python file"
gdb_test "test-events" "Event testers registered."
@@ -21,7 +21,6 @@ if { ![support_displaced_stepping] } {
load_lib gdb-python.exp
standard_testfile
-set pyfile ${srcdir}/${subdir}/py-events.py
if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
return -1
@@ -34,6 +33,7 @@ save_vars { GDBFLAGS } {
if { [skip_python_tests] } { continue }
+set pyfile [gdb_remote_download host ${srcdir}/${subdir}/py-events.py]
gdb_test_no_output "source ${pyfile}" "load python file"
gdb_test "test-events" "Event testers registered."
@@ -48,7 +48,7 @@ gdb_test_no_output "set auto-load safe-path ${remote_obj_python_file}" \
"set auto-load safe-path"
gdb_load ${binfile}
# Verify gdb loaded the script.
-gdb_test "info auto-load python-scripts" "Yes.*/${testfile}-gdb.py.*" \
+gdb_test "info auto-load python-scripts" "Yes.*${testfile}-gdb.py.*" \
"Test auto-load had loaded python scripts"
if ![runto_main] then {
@@ -41,16 +41,15 @@ gdb_test "info frame-filter" \
# Care is taken to put it in the same directory as the binary so that
# gdb will find it.
set remote_obj_python_file \
- [remote_download \
- host ${srcdir}/${subdir}/${testfile}-gdb.py.in \
- [standard_output_file ${testfile}-gdb.py]]
+ [gdb_remote_download host ${srcdir}/${subdir}/${testfile}-gdb.py.in \
+ ${testfile}-gdb.py]
gdb_reinitialize_dir $srcdir/$subdir
gdb_test_no_output "set auto-load safe-path ${remote_obj_python_file}" \
"set auto-load safe-path"
gdb_load ${binfile}
# Verify gdb loaded the script.
-gdb_test "info auto-load python-scripts" "Yes.*/${testfile}-gdb.py.*" \
+gdb_test "info auto-load python-scripts" "Yes.*${testfile}-gdb.py.*" \
"Test auto-load had loaded python scripts"
if ![runto_main] then {
@@ -302,9 +301,8 @@ if { [skip_python_tests] } { continue }
# Care is taken to put it in the same directory as the binary so that
# gdb will find it.
set remote_obj_python_file \
- [remote_download \
- host ${srcdir}/${subdir}/${testfile}-gdb.py.in \
- [standard_output_file ${testfile}-gdb.py]]
+ [gdb_remote_download host ${srcdir}/${subdir}/${testfile}-gdb.py.in \
+ ${testfile}-gdb.py]
gdb_reinitialize_dir $srcdir/$subdir
gdb_test_no_output "set auto-load safe-path ${remote_obj_python_file}" \
@@ -312,7 +310,7 @@ gdb_test_no_output "set auto-load safe-path ${remote_obj_python_file}" \
gdb_load ${binfile}
# Verify gdb loaded the script.
-gdb_test "info auto-load python-scripts" "Yes.*/${testfile}-gdb.py.*" \
+gdb_test "info auto-load python-scripts" "Yes.*${testfile}-gdb.py.*" \
"Set autoload path for no debug info tests"
if ![runto_main] then {
perror "couldn't run to breakpoint"
@@ -35,7 +35,8 @@ if {[gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable {debug}] != "" }
# Skip all tests if Python scripting is not enabled.
if { [mi_skip_python_tests] } { continue }
-mi_gdb_test "source ${srcdir}/${subdir}/${testfile}.py" \
+set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]
+mi_gdb_test "source ${pyfile}" \
".*\\^done" \
"load python file"
@@ -40,7 +40,7 @@ gdb_test_no_output "set auto-load safe-path ${remote_python_file}" "set auto-loa
gdb_load ${binfile}
# Verify gdb loaded the script.
-gdb_test "info auto-load python-scripts" "Yes.*/${testfile}-gdb.py.*"
+gdb_test "info auto-load python-scripts" "Yes.*${testfile}-gdb.py.*"
if ![runto_main] {
perror "couldn't run to main"
@@ -46,7 +46,7 @@ gdb_test "python print (objfile.username)" "${testfile}" \
"Get objfile user name"
gdb_test "python print (objfile)" \
- "<gdb.Objfile filename=[string_to_regexp ${binfile}]>"
+ "<gdb.Objfile filename=.*${testfile}.*>"
gdb_test_no_output "python dir(objfile)"
@@ -158,17 +158,20 @@ if { [get_python_valueof "sep_objfile.build_id" "None"] != "None" } {
# An objfile that was a symlink to a differently named file is still
# findable with its original name.
-set symlink_binary [standard_output_file "symlink-binary"]
-remote_exec host "rm -f ${symlink_binary}"
-remote_exec host "ln -sf ${testfile} ${symlink_binary}"
-if [remote_file host exists "${symlink_binary}"] {
- clean_restart "${symlink_binary}"
- gdb_test "python print (gdb.lookup_objfile (\"${symlink_binary}\").filename)" \
- "${testfile}" "gdb.lookup_objfile of symlinked binary"
+# On Windows we don't have proper symlinks, so skip this.
+if ![ishost *-*-mingw*] {
+ set symlink_binary [standard_output_file "symlink-binary"]
+ remote_exec host "rm -f ${symlink_binary}"
+ remote_exec host "ln -sf ${testfile} ${symlink_binary}"
+ if [remote_file host exists "${symlink_binary}"] {
+ clean_restart "${symlink_binary}"
+ gdb_test "python print (gdb.lookup_objfile (\"${symlink_binary}\").filename)" \
+ "${testfile}" "gdb.lookup_objfile of symlinked binary"
+ }
}
# Test printing an Objfile object that is no longer valid.
gdb_py_test_silent_cmd "python objfile = gdb.objfiles()\[0\]" \
"get first objfile" 1
gdb_file_cmd ${binfile}
-gdb_test "python print(objfile)" "<gdb.Objfile \\\(invalid\\\)>"
\ No newline at end of file
+gdb_test "python print(objfile)" "<gdb.Objfile \\\(invalid\\\)>"
@@ -41,7 +41,7 @@ gdb_test "b [gdb_get_line_number {break to inspect} ${testfile}.c ]" \
".*Breakpoint.*"
gdb_test "continue" ".*Breakpoint.*"
-set python_file ${srcdir}/${subdir}/${testfile}.py
+set python_file [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]
gdb_test_no_output "source ${python_file}" "load python file"
@@ -91,7 +91,7 @@ with_test_prefix "verbose on" {
gdb_test "py gdb.printing.register_pretty_printer(gdb, lookup_function_lookup_test)" \
"Registering global lookup_function_lookup_test pretty-printer ..."
gdb_test "py gdb.printing.register_pretty_printer(progspace, my_pretty_printer1)" \
- "Registering pp-test pretty-printer for .*/py-pp-registration ..."
+ "Registering pp-test pretty-printer for .*py-pp-registration ..."
test_printers "s1"
}
@@ -77,22 +77,35 @@ gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
-gdb_test_no_output "set auto-load safe-path ${remote_python_file}:${binfile}" \
+# Get the name of the binfile on the host; on a remote host this means
+# stripping off any directory prefix.
+if [is_remote host] {
+ set remote_binfile [file tail ${binfile}]
+} else {
+ set remote_binfile ${binfile}
+}
+
+if [ishost *-*-mingw*] {
+ set remote_pathsep ";"
+} else {
+ set remote_pathsep ":"
+}
+gdb_test_no_output "set auto-load safe-path ${remote_python_file}${remote_pathsep}${remote_binfile}" \
"set auto-load safe-path"
gdb_load ${binfile}
# Verify gdb loaded each script and they appear once in the list.
set test_name "verify scripts loaded"
gdb_test_multiple "info auto-load python-scripts" "$test_name" {
+ -re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" {
+ pass "$test_name"
+ }
-re "${testfile}.py.*${testfile}.py.*$gdb_prompt $" {
fail "$test_name"
}
-re "inlined-script.*inlined-script.*$gdb_prompt $" {
fail "$test_name"
}
- -re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" {
- pass "$test_name"
- }
}
# Again, with a regexp this time.
@@ -66,8 +66,8 @@ gdb_test "python print (sal.is_valid())" "True" "test sal.is_valid"
# Test symbol table.
gdb_test "python print (symtab.filename)" ".*${py_symbol_c}" "test symtab.filename"
-gdb_test "python print (symtab.objfile)" "<gdb.Objfile filename=${binfile}>" \
- "test symtab.objfile"
+gdb_test "python print (symtab.objfile)" \
+ "<gdb.Objfile filename=.*${testfile}.*>" "test symtab.objfile"
gdb_test "python print (symtab.fullname())" ".*${full_py_symbol_c}" "test symtab.fullname"
gdb_test "python print (symtab.is_valid())" "True" "test symtab.is_valid()"
gdb_test "python print (\"qq\" in global_symbols)" "True" "test qq in global symbols"