binutils-gdb/gdb/testsuite/gdb.base/dso2dso.exp
Tom de Vries 2f4132646d [gdb/testsuite] Don't pass -fPIC to gdb_compile_shlib
When running test-case gdb.base/info-shared.exp, I see in gdb.log:
...
Executing on host: \
  gcc ... -fPIC -fpic -c -o info-shared-solib1.c.o info-shared-solib1.c
...

The -fPIC comes from the test-case:
...
if { [gdb_compile_shlib $srcfile_lib1 $binfile_lib1 \
         [list additional_flags=-fPIC]] != "" } {
...
but the -fpic, which overrides the -fPIC comes from gdb_compile_shlib.

The proc gdb_compile_shlib adds the -fpic or similar dependent on platform
and compiler.  However, in some cases it doesn't add anything, which is
probably why all those test-case pass -fPIC.

Fix this by removing -fPIC from all the calls to gdb_compile_shlib, and
ensuring that gdb_compile_shlib takes care of adding it, if required.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-12-14  Tom de Vries  <tdevries@suse.de>

	* lib/gdb.exp (gdb_compile_shlib): Make sure it's not necessary to
	pass -fPIC.
	* gdb.ada/catch_ex_std.exp: Don't pass -fPIC to gdb_compile_shlib.
	* gdb.base/break-probes.exp: Same.
	* gdb.base/ctxobj.exp: Same.
	* gdb.base/dso2dso.exp: Same.
	* gdb.base/global-var-nested-by-dso.exp: Same.
	* gdb.base/info-shared.exp: Same.
	* gdb.base/jit-reader-simple.exp: Same.
	* gdb.base/print-file-var.exp: Same.
	* gdb.base/skip-solib.exp: Same.
	* gdb.btrace/dlopen.exp: Same.
2020-12-14 18:16:40 +01:00

76 lines
2.4 KiB
Plaintext

# Copyright 2015-2020 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# The purpose of this testcase is to verify that we can "next" over
# a call to a function provided by one shared library made from another
# shared library, and that GDB stops at the expected location. In this
# case, the call is made from sub1 (provided by libdso1) and we are
# calling sub2 (provided by libdso2).
#
# Note that, while this is not the main purpose of this testcase, it
# also happens to exercise an issue with displaced stepping on amd64
# when libdso1 is mapped at an address greater than 0xffffffff.
if { [skip_shlib_tests] } {
return 0
}
standard_testfile
set output_dir [standard_output_file {}]
set libdso2 $testfile-dso2
set srcfile_libdso2 $srcdir/$subdir/$libdso2.c
set binfile_libdso2 [standard_output_file $libdso2.so]
set libdso1 $testfile-dso1
set srcfile_libdso1 $srcdir/$subdir/$libdso1.c
set binfile_libdso1 [standard_output_file $libdso1.so]
if { [gdb_compile_shlib $srcfile_libdso2 $binfile_libdso2 \
[list debug]] != "" } {
untested "failed to compile shared library 2"
return -1
}
if { [gdb_compile_shlib $srcfile_libdso1 $binfile_libdso1 \
[list debug]] != "" } {
untested "failed to compile shared library 1"
return -1
}
if { [gdb_compile $srcdir/$subdir/$srcfile $binfile executable \
[list debug shlib=$binfile_libdso2 shlib=$binfile_libdso1]] != "" } {
return -1
}
clean_restart $binfile
gdb_load_shlib $binfile_libdso2
gdb_load_shlib $binfile_libdso1
if { ![runto_main] } {
return -1
}
set bp_location [gdb_get_line_number "STOP HERE" [file tail $srcfile_libdso1]]
gdb_breakpoint ${libdso1}.c:${bp_location}
gdb_continue_to_breakpoint "at call to sub2" \
".*sub2 ().*"
gdb_test "next" \
".*return 5;.*" \
"next over call to sub2"