+2020-06-19 Tom de Vries <tdevries@suse.de>
+
+ * lib/gdb.exp (gdb_note): New proc.
+ * lib/future.exp (gdb_default_target_compile_1): Factor out of ...
+ (gdb_default_target_compile): ... here. Only call
+ gdb_default_target_compile_1 if use_gdb_compile(<lang>) is set.
+ (use_gdb_compile): Change to array.
+ (toplevel): Update sets of use_gdb_compile to specify language.
+ Warn about default_target_compile override. Store dejagnu's version
+ of default_target_compile in dejagnu_default_target_compile.
+
2020-06-18 Tom de Vries <tdevries@suse.de>
* lib/gdb.exp (gdb_init): Move all but call to default_gdb_init to ...
return $eu_unstrip
}
-proc gdb_default_target_compile {source destfile type options} {
+# Local version of default_target_compile, to be used for languages that
+# dejagnu's default_target_compile doesn't support.
+proc gdb_default_target_compile_1 {source destfile type options} {
global target_triplet
global tool_root_dir
global CFLAGS_FOR_TARGET
return ${comp_output}
}
-# See if the version of dejaGNU being used to run the testsuite is
-# recent enough to contain support for building Ada programs or not.
-# If not, then use the functions above in place of the ones provided
-# by dejaGNU. This is only temporary (brobecker/2004-03-31).
+# If dejagnu's default_target_compile supports the language specified in
+# OPTIONS, use it. Otherwise, use gdb_default_target_compile_1.
+proc gdb_default_target_compile {source destfile type options} {
+ global use_gdb_compile
+
+ set need_local 0
+ foreach i $options {
+
+ if { $i == "ada" || $i == "d" || $i == "go" || $i == "rust" } {
+ set need_local [info exists use_gdb_compile($i)]
+ break
+ }
+
+ if { $i == "c++" } {
+ break
+ }
+
+ if { $i == "f77" || $i == "f90" } {
+ set need_local [info exists use_gdb_compile(fortran)]
+ break
+ }
+ }
+
+ if { $need_local } {
+ return [gdb_default_target_compile_1 $source $destfile $type $options]
+ }
+
+ return [dejagnu_default_target_compile $source $destfile $type $options]
+}
+
+# Array of languages for which dejagnu's default_target_compile is missing
+# support.
+array set use_gdb_compile [list]
+
+# Note missing support in dejagnu's default_target_compile. This
+# needs to be fixed by porting the missing support to Dejagnu.
+set note_prefix "Dejagnu's default_target_compile is missing support for "
+set note_suffix ", using local override"
-set use_gdb_compile 0
if {[info procs find_gnatmake] == ""} {
rename gdb_find_gnatmake find_gnatmake
- set use_gdb_compile 1
+ set use_gdb_compile(ada) 1
+ gdb_note [join [list $note_prefix "Ada" $note_suffix] ""]
}
if {[info procs find_gfortran] == ""} {
rename gdb_find_gfortran find_gfortran
- set use_gdb_compile 1
+ set use_gdb_compile(fortran) 1
+ gdb_note [join [list $note_prefix "Fortran" $note_suffix] ""]
}
if {[info procs find_go_linker] == ""} {
rename gdb_find_go find_go
rename gdb_find_go_linker find_go_linker
- set use_gdb_compile 1
+ set use_gdb_compile(go) 1
+ gdb_note [join [list $note_prefix "Go" $note_suffix] ""]
}
if {[info procs find_gdc] == ""} {
rename gdb_find_gdc find_gdc
- set use_gdb_compile 1
+ set use_gdb_compile(d) 1
+ gdb_note [join [list $note_prefix "D" $note_suffix] ""]
}
if {[info procs find_rustc] == ""} {
rename gdb_find_rustc find_rustc
- set use_gdb_compile 1
+ set use_gdb_compile(rust) 1
+ gdb_note [join [list $note_prefix "Rust" $note_suffix] ""]
}
-if {$use_gdb_compile} {
- catch {rename default_target_compile {}}
+# If dejagnu's default_target_compile is missing support for any language,
+# override it.
+if { [array size use_gdb_compile] != 0 } {
+ catch {rename default_target_compile dejagnu_default_target_compile}
rename gdb_default_target_compile default_target_compile
}