[PATCH] gdb_compile_shlib: Only consider shlib= options when building executables

Simon Marchi simon.marchi@polymtl.ca
Fri Jan 12 02:55:00 GMT 2018


On 2017-10-27 19:58, Simon Marchi wrote:
> 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
> (which includes 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/lib/gdb.exp | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
> index 548cb06..19a286b 100644
> --- a/gdb/testsuite/lib/gdb.exp
> +++ b/gdb/testsuite/lib/gdb.exp
> @@ -3506,7 +3506,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
> @@ -3532,7 +3533,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

I pushed this patch.

Simon



More information about the Gdb-patches mailing list