+2013-11-04 Tom Tromey <tromey@redhat.com>
+
+ * gdb.base/fullname.exp: Use standard_output_file,
+ relative_filename.
+ * gdb.base/hashline1.exp: Use standard_testfile,
+ standard_output_file, relative_filename, clean_restart.
+ * gdb.base/hashline2.exp: Use standard_testfile,
+ standard_output_file.
+ * gdb.base/hashline3.exp: Use standard_testfile,
+ standard_output_file, relative_filename.
+ * lib/gdb.exp (relative_filename): New proc.
+
2013-11-04 Tom Tromey <tromey@redhat.com>
* gdb.base/fileio.c (test_open, test_write, test_read)
}
# Build the test executable using a relative path.
-if { [gdb_compile "${subdir}/tmp-${srcfile}" "${binfile}" executable {debug}] != "" } {
+if { [gdb_compile [relative_filename [pwd] [standard_output_file tmp-${srcfile}]] \
+ "${binfile}" executable {debug}] != "" } {
return -1
}
# we'll run GDB from.
set save_pwd [pwd]
-cd ${subdir}
+cd [standard_output_file {}]
if { [gdb_compile [standard_output_file tmp-${srcfile}] "${testfile}" \
executable {debug}] != "" } {
cd $save_pwd
# srcfile is in objdir because we need to machine generate it in order
# to get the correct path in the #line directive.
-set testfile "hashline1"
-set srcfile "${testfile}.c"
-set binfile "${objdir}/${subdir}/${testfile}"
+standard_testfile .c
-set fd [open ${objdir}/${subdir}/${srcfile} w]
-puts $fd "#line 2 \"[pwd]/${subdir}/${srcfile}\""
+set new_srcfile [standard_output_file $srcfile]
+set fd [open $new_srcfile w]
+puts $fd "#line 2 \"$new_srcfile\""
puts $fd "int main () { return 0; } /* set breakpoint here */"
close $fd
# The choice of path name for the source file is important in order to trigger
-# the bug. Using ${objdir}/${subdir}/${srcfile} here won't trigger the bug.
-if { [gdb_compile "./${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+# the bug. Using $new_srcfile here won't trigger the bug.
+set compile_name [relative_filename $objdir $new_srcfile]
+if { [gdb_compile $compile_name "${binfile}" executable {debug}] != "" } {
untested hashline1.exp
return -1
}
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
-set bp_location [gdb_get_line_number "set breakpoint here" ${objdir}/${subdir}/${srcfile}]
+set bp_location [gdb_get_line_number "set breakpoint here" $new_srcfile]
# Try to set a breakpoint on the specified file location.
# srcfile is in objdir because we need to machine generate it in order
# to get the correct path in the #line directive.
-set testfile "hashline2"
-set srcfile "${testfile}.c"
-set binfile "${objdir}/${subdir}/${testfile}"
+standard_testfile .c
-set fd [open ${objdir}/${subdir}/${srcfile} w]
-puts $fd "#line 2 \"///[pwd]/${subdir}/${srcfile}\""
+set new_srcfile [standard_output_file $srcfile]
+set fd [open $new_srcfile w]
+puts $fd "#line 2 \"///${new_srcfile}\""
puts $fd "int main () { return 0; } /* set breakpoint here */"
close $fd
-if { [gdb_compile "${objdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+if { [gdb_compile $new_srcfile "${binfile}" executable {debug}] != "" } {
untested hashline2.exp
return -1
}
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
-set bp_location [gdb_get_line_number "set breakpoint here" ${objdir}/${subdir}/${srcfile}]
+set bp_location [gdb_get_line_number "set breakpoint here" ${new_srcfile}]
# Try to set a breakpoint on the specified file location.
# srcfile is in objdir because we need to machine generate it in order
# to get the correct path in the #line directive.
-set testfile "hashline3"
-set srcfile "${testfile}.c"
-set binfile "${objdir}/${subdir}/${testfile}"
+standard_testfile
-set fd [open ${objdir}/${subdir}/${srcfile} w]
-puts $fd "#line 2 \"./${subdir}/${srcfile}\""
+set new_srcfile [standard_output_file $srcfile]
+set fd [open $new_srcfile w]
+set relative [relative_filename $objdir $new_srcfile]
+puts $fd "#line 2 \"./$relative\""
puts $fd "int main () { return 0; } /* set breakpoint here */"
close $fd
-if { [gdb_compile "${objdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+if { [gdb_compile $new_srcfile "${binfile}" executable {debug}] != "" } {
untested hashline3.exp
return -1
}
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
-set bp_location [gdb_get_line_number "set breakpoint here" ${objdir}/${subdir}/${srcfile}]
+set bp_location [gdb_get_line_number "set breakpoint here" $new_srcfile]
# Try to set a breakpoint on the specified file location.
}
}
+# ROOT and FULL are file names. Returns the relative path from ROOT
+# to FULL. Note that FULL must be in a subdirectory of ROOT.
+# For example, given ROOT = /usr/bin and FULL = /usr/bin/ls, this
+# will return "ls".
+
+proc relative_filename {root full} {
+ set root_split [file split $root]
+ set full_split [file split $full]
+
+ set len [llength $root_split]
+
+ if {[eval file join $root_split]
+ != [eval file join [lrange $full_split 0 [expr {$len - 1}]]]} {
+ error "$full not a subdir of $root"
+ }
+
+ return [eval file join [lrange $full_split $len end]]
+}
+
# Log gdb command line and script if requested.
if {[info exists TRANSCRIPT]} {
rename send_gdb real_send_gdb