This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 3/8] gen-perf-test: debian --as-needed
- From: Doug Evans <dje at google dot com>
- To: gdb-patches at sourceware dot org
- Date: Tue, 21 Jul 2015 04:11:59 +0000
- Subject: [PATCH 3/8] gen-perf-test: debian --as-needed
- Authentication-results: sourceware.org; auth=none
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.
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