gdb_compile_shlib: Only consider shlib= options when building executables
authorSimon Marchi <simon.marchi@ericsson.com>
Fri, 12 Jan 2018 02:08:23 +0000 (21:08 -0500)
committerSimon Marchi <simon.marchi@ericsson.com>
Fri, 12 Jan 2018 02:08:23 +0000 (21:08 -0500)
Trying to use gdb_compile_shlib with the shlib= option to build a shared
library that depends on another shared library does not work as of
today.  See:

  https://sourceware.org/ml/gdb-patches/2017-10/msg00733.html

The problem is that building the lib is done in two steps, compilation
(.c -> .o) and linking (.o -> .so) and the shlib= options are passed to
both steps.  When compiling the object file (.o), it results in gcc
complaining:

  gcc: warning: .../solib-vanish-lib2.so: linker input file unused because linking not done

The first solution I came up with was to filter the options inside
gdb_compile_shlib to remove the shlib= options from the options we pass
when compiling the .o file.

I then thought it would be simpler to ignore the shlib= options in
gdb_compile when not building an executable (the executable category
includes the shared libraries).  For other compilation types (object
file, preprocess and generate assembly), it doesn't make sense to add
shared libraries to the source file list.

Regtested on the buildbot.

gdb/testsuite/ChangeLog:

* lib/gdb.exp (gdb_compile): Ignore shlib= and shlib_load
options when not creating an executable.

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

index d95b144a7cb72a60c0d99725da7366dec2dd0107..55b4a31af145d8360619ed744176feb96a4fd15c 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-11  Simon Marchi  <simon.marchi@ericsson.com>
+
+       * lib/gdb.exp (gdb_compile): Ignore shlib= and shlib_load
+       options when not creating an executable.
+
 2018-01-11  Pedro Alves  <palves@redhat.com>
 
        PR remote/22597
index 7702d9c238379be568b026e8a5b90767cc4660cd..a4bde724bec0c519d56b5d9931f145a0fc1e9807 100644 (file)
@@ -3513,7 +3513,8 @@ proc gdb_compile {source dest type options} {
     set shlib_found 0
     set shlib_load 0
     foreach opt $options {
-        if [regexp {^shlib=(.*)} $opt dummy_var shlib_name] {
+        if {[regexp {^shlib=(.*)} $opt dummy_var shlib_name]
+           && $type == "executable"} {
             if [test_compiler_info "xlc-*"] {
                # IBM xlc compiler doesn't accept shared library named other
                # than .so: use "-Wl," to bypass this
@@ -3539,7 +3540,7 @@ proc gdb_compile {source dest type options} {
                    lappend new_options "early_flags=-Wl,--no-as-needed"
                }
             }
-       } elseif { $opt == "shlib_load" } {
+       } elseif { $opt == "shlib_load" && $type == "executable" } {
            set shlib_load 1
         } else {
             lappend new_options $opt