[3/8] gen-perf-test: debian --as-needed

Message ID 001a113814301105f6051b5adb36@google.com
State New, archived
Headers

Commit Message

Doug Evans July 21, 2015, 4:11 a.m. UTC
  Hi.

The problem being solved here is that debian changed
the default handling of --as-needed.  This patch makes
things work the same regardless of distro.

Alternatively, I can just check in the early_flags support, and leave
debian-specific fixes to a board file or some such.

2015-07-20  Doug Evans  <dje@google.com>

	* lib/future.exp (gdb_default_target_compile): New option
	"early_flags".
	* lib/gdb.exp (gdb_compile): Undo debian's change in default of
	--as-needed.
  

Patch

diff --git a/gdb/testsuite/lib/future.exp b/gdb/testsuite/lib/future.exp
index a27e120..994843e 100644
--- a/gdb/testsuite/lib/future.exp
+++ b/gdb/testsuite/lib/future.exp
@@ -135,14 +135,15 @@  proc gdb_default_target_compile {source destfile type  
options} {
  	error "Must supply an output filename for the compile to  
default_target_compile"
      }

+    set early_flags ""
      set add_flags ""
      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.
+    # The order matters for things like -Wl,--as-needed.  The default is to
+    # preserve existing behavior.
      set linker_opts_order "sources-then-flags"
      set ldflags ""
      set dest [target_info name]
@@ -240,6 +241,10 @@  proc gdb_default_target_compile {source destfile type  
options} {
  	    regsub "^compiler=" $i "" tmp
  	    set compiler $tmp
  	}
+	if {[regexp "^early_flags=" $i]} {
+	    regsub "^early_flags=" $i "" tmp
+	    append early_flags " $tmp"
+	}
  	if {[regexp "^additional_flags=" $i]} {
  	    regsub "^additional_flags=" $i "" tmp
  	    append add_flags " $tmp"
@@ -473,15 +478,15 @@  proc gdb_default_target_compile {source destfile type  
options} {
      # become confused about the name of the actual source file.
      switch $type {
  	"object" {
-	    set opts "$add_flags $sources"
+	    set opts "$early_flags $add_flags $sources"
  	}
  	"executable" {
  	    switch $linker_opts_order {
  		"flags-then-sources" {
-		    set opts "$add_flags $sources"
+		    set opts "$early_flags $add_flags $sources"
  		}
  		"sources-then-flags" {
-		    set opts "$sources $add_flags"
+		    set opts "$early_flags $sources $add_flags"
  		}
  		default {
  		    error "Invalid value for board_info linker_opts_order"
@@ -489,7 +494,7 @@  proc gdb_default_target_compile {source destfile type  
options} {
  	    }
  	}
  	default {
-	    set opts "$sources $add_flags"
+	    set opts "$early_flags $sources $add_flags"
  	}
      }

diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 0805de9..ffc63a5 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -3026,6 +3026,13 @@  proc gdb_compile {source dest type options} {
  		      || [istarget *-*-cygwin*]) } {
  		    lappend new_options "additional_flags=-Wl,--enable-auto-import"
  		}
+		if { [test_compiler_info "gcc-*"] || [test_compiler_info "clang-*"] } {
+		    # Undo debian's change in the default.
+		    # Put it at the front to not override any user-provided
+		    # value, and to make sure it appears in front of all the
+		    # shlibs!
+		    lappend new_options "early_flags=-Wl,--no-as-needed"
+		}
              }
  	} elseif { $opt == "shlib_load" } {
  	    set shlib_load 1