Index: gdb/testsuite/lib/future.exp |
diff --git a/gdb/testsuite/lib/future.exp b/gdb/testsuite/lib/future.exp |
index 4e26dcb0aa16c73e3a28a3b57acefdac237fb99b..bf47988d0b33b03cb120c0ee84359fe8af040686 100644 |
--- a/gdb/testsuite/lib/future.exp |
+++ b/gdb/testsuite/lib/future.exp |
@@ -60,6 +60,30 @@ proc gdb_find_gfortran {} { |
return $CC |
} |
+proc gdb_find_go {} { |
+ global tool_root_dir |
+ |
+ set GO "" |
+ |
+ if {![is_remote host]} { |
+ set file [lookfor_file $tool_root_dir gccgo] |
+ if { $file != "" } { |
+ set root [file dirname $file] |
+ set GO "$file -B$root/gcc/" |
+ } |
+ } |
+ |
+ if { $GO == "" } { |
+ set GO [transform gccgo] |
+ } |
+ |
+ return $GO |
+} |
+ |
+proc gdb_find_go_linker {} { |
+ return [find_go] |
+} |
+ |
proc gdb_default_target_compile {source destfile type options} { |
global target_triplet |
global tool_root_dir |
@@ -74,6 +98,11 @@ proc gdb_default_target_compile {source destfile type options} { |
set libs "" |
set compiler_type "c" |
set compiler "" |
+ set linker "" |
+ # linker_opts_order is one of "sources-then-flags", "flags-then-sources". |
+ # The order shouldn't matter. It's done this way to preserve |
+ # existing behavior. |
+ set linker_opts_order "sources-then-flags" |
set ldflags "" |
set dest [target_info name] |
@@ -138,6 +167,26 @@ proc gdb_default_target_compile {source destfile type options} { |
} |
} |
+ if { $i == "go" } { |
+ set compiler_type "go" |
+ if {[board_info $dest exists goflags]} { |
+ append add_flags " [target_info goflags]" |
+ } |
+ if {[board_info $dest exists gocompiler]} { |
+ set compiler [target_info gocompiler] |
+ } else { |
+ set compiler [find_go] |
+ } |
+ if {[board_info $dest exists golinker]} { |
+ set linker [target_info golinker] |
+ } else { |
+ set linker [find_go_linker] |
+ } |
+ if {[board_info $dest exists golinker_opts_order]} { |
+ set linker_opts_order [target_info golinker_opts_order] |
+ } |
+ } |
+ |
if {[regexp "^dest=" $i]} { |
regsub "^dest=" $i "" tmp |
if {[board_info $tmp exists name]} { |
@@ -193,6 +242,8 @@ proc gdb_default_target_compile {source destfile type options} { |
global F77_FOR_TARGET |
global F90_FOR_TARGET |
global GNATMAKE_FOR_TARGET |
+ global GO_FOR_TARGET |
+ global GO_LD_FOR_TARGET |
if {[info exists GNATMAKE_FOR_TARGET]} { |
if { $compiler_type == "ada" } { |
@@ -224,6 +275,19 @@ proc gdb_default_target_compile {source destfile type options} { |
} |
} |
+ if { $compiler_type == "go" } { |
+ if {[info exists GO_FOR_TARGET]} { |
+ set compiler $GO_FOR_TARGET |
+ } |
+ if {[info exists GO_LD_FOR_TARGET]} { |
+ set linker $GO_LD_FOR_TARGET |
+ } |
+ } |
+ |
+ if { $type == "executable" && $linker != "" } { |
+ set compiler $linker |
+ } |
+ |
if { $compiler == "" } { |
set compiler [board_info $dest compiler] |
if { $compiler == "" } { |
@@ -366,10 +430,26 @@ proc gdb_default_target_compile {source destfile type options} { |
# This is obscure: we put SOURCES at the end when building an |
# object, because otherwise, in some situations, libtool will |
# become confused about the name of the actual source file. |
- if {$type == "object"} { |
- set opts "$add_flags $sources" |
- } else { |
- set opts "$sources $add_flags" |
+ switch $type { |
+ "object" { |
+ set opts "$add_flags $sources" |
+ } |
+ "executable" { |
+ switch $linker_opts_order { |
+ "flags-then-sources" { |
+ set opts "$add_flags $sources" |
+ } |
+ "sources-then-flags" { |
+ set opts "$sources $add_flags" |
+ } |
+ default { |
+ error "Invalid value for board_info linker_opts_order" |
+ } |
+ } |
+ } |
+ default { |
+ set opts "$sources $add_flags" |
+ } |
} |
if {[is_remote host]} { |
@@ -431,6 +511,12 @@ if {[info procs find_gfortran] == ""} { |
set use_gdb_compile 1 |
} |
+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 |
+} |
+ |
if {$use_gdb_compile} { |
catch {rename default_target_compile {}} |
rename gdb_default_target_compile default_target_compile |