Workaround debian change to default value of --as-needed.
authorDoug Evans <dje@google.com>
Fri, 24 Jul 2015 22:24:37 +0000 (15:24 -0700)
committerDoug Evans <dje@google.com>
Fri, 24 Jul 2015 22:24:37 +0000 (15:24 -0700)
gdb/testsuite/ChangeLog:

* 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.

gdb/testsuite/ChangeLog
gdb/testsuite/lib/future.exp
gdb/testsuite/lib/gdb.exp

index d0665481d9a27a6d744ee6d71e7af2149a98ed4e..591ce4af6e2eb5d09faa48180b0833a526931a71 100644 (file)
@@ -1,3 +1,10 @@
+2015-07-24  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.
+
 2015-07-24  Doug Evans  <dje@google.com>
 
        * gdb.perf/lib/perftest/measure.py (MeasurementCpuTime::stop): Print
index a27e120dd53cf4d55bc741fc68b537f49f89137f..994843e2e91fb632a44a3446a8faf9a52735b567 100644 (file)
@@ -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"
        }
     }
 
index 0805de9c3e938dd12761a07caafc390994bb7232..ffc63a594422207721b75649d2dc069d6027a383 100644 (file)
@@ -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