Summary: | source -s foo.py with foo.py a symlink to foo.notpy fails | ||
---|---|---|---|
Product: | gdb | Reporter: | dje |
Component: | python | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | P2 | ||
Version: | unknown | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Last reconfirmed: | ||
Attachments: | patch + testcase |
Description
dje
2015-09-08 21:19:48 UTC
Created attachment 8592 [details]
patch + testcase
Comment on attachment 8592 [details] patch + testcase >==== gdb/gdb-7.9.x/gdb/cli/cli-cmds.c#2 - gdb/gdb-7.9.x/gdb/cli/cli-cmds.c ==== >--- gdb/cli/cli-cmds.c 2015-02-23 13:07:25.000000000 -0800 >+++ gdb/gdb-7.9.x/gdb/cli/cli-cmds.c 2015-09-08 13:55:50.187471783 -0700 >@@ -537,10 +537,16 @@ > return 1; > } > >-/* Load script FILE, which has already been opened as STREAM. */ >+/* Load script FILE, which has already been opened as STREAM. >+ FILE_TO_OPEN is the form of FILE to use if one needs to open the file. >+ This is provided as FILE may have been found via the source search path. >+ An important thing to note here is that FILE may be a symlink to a file >+ with a different or non-existing suffix, and thus one cannot infer the >+ extension language from FILE_TO_OPEN. */ > > static void >-source_script_from_stream (FILE *stream, const char *file) >+source_script_from_stream (FILE *stream, const char *file, >+ const char *file_to_open) > { > if (script_ext_mode != script_ext_off) > { >@@ -555,7 +561,7 @@ > = ext_lang_script_sourcer (extlang); > > gdb_assert (sourcer != NULL); >- sourcer (extlang, stream, file); >+ sourcer (extlang, stream, file_to_open); > return; > } > else if (script_ext_mode == script_ext_soft) >@@ -608,7 +614,7 @@ > anyway so that error messages show the actual file used. But only do > this if we (may have) used search_path, as printing the full path in > errors for the non-search case can be more noise than signal. */ >- source_script_from_stream (stream, search_path ? full_path : file); >+ source_script_from_stream (stream, file, search_path ? full_path : file); > do_cleanups (old_cleanups); > } > >==== gdb/testsuite/gdb.python/python.exp#1 - gdb/gdb-7.9.x/gdb/testsuite/gdb.python/python.exp ==== >--- gdb/gdb-7.9.x/gdb/testsuite/gdb.python/python.exp 2015-01-14 16:43:56.000000000 -0800 >+++ gdb/gdb-7.9.x/gdb/testsuite/gdb.python/python.exp 2015-09-08 14:19:04.246904083 -0700 >@@ -96,6 +96,19 @@ > > gdb_test "source -s source2.py" "yes" "source -s source2.py" > >+set remote_source2_symlink_notpy \ >+ [gdb_remote_download host ${srcdir}/${subdir}/source2.py \ >+ [standard_output_file "source2-symlink.notpy"]] >+set remote_source2_symlink_py [standard_output_file "source2-symlink.py"] >+remote_file host delete $remote_source2_symlink_py >+set status [remote_exec host "ln -sf $remote_source2_symlink_notpy $remote_source2_symlink_py"] >+set test "source -s source2-symlink.py" >+if {[lindex $status 0] == 0} { >+ gdb_test "source -s $remote_source2_symlink_py" "yes" $test >+} else { >+ unsupported "$test (host does not support symbolic links)" >+} >+ > gdb_test "python print (gdb.current_objfile())" "None" > gdb_test "python print (gdb.objfiles())" "\\\[\\\]" > The master branch has been updated by Doug Evans <devans@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1a70ae976b673f7762f14734785b34fc5ba92eae commit 1a70ae976b673f7762f14734785b34fc5ba92eae Author: Doug Evans <dje@google.com> Date: Mon Oct 26 14:33:19 2015 -0700 PR python/18938: source -s foo.py with foo.py a symlink to foo.notpy fails gdb/ChangeLog: PR python/18938 * cli/cli-cmds (source_script_fron_sctream): New arg file_to_open. All callers updated. gdb/testsuite/ChangeLog: * gdb.python/python.exp: Add test for symlink from .py file to .notpy file. patch applied |