PR ld/12761

* elflink.c (elf_link_add_object_symbols): Process .gnu.warning
	sections when building shared libraries.

	* lib/ld-lib.exp (run_cc_link_tests): Add an optional 8th
	parameter - an expected warning message from the linker.
	* ld-elf/shared.exp (build_tests): Expect a warning message when
	building the libbarw.so library.

	* ld-elf/shared.exp: Run library building tests even when not
	building a native toolchain.
This commit is contained in:
Nick Clifton 2011-05-18 14:04:32 +00:00
parent d0da06e2df
commit dd98f8d276
5 changed files with 45 additions and 12 deletions

View file

@ -1,3 +1,9 @@
2011-05-18 Nick Clifton <nickc@redhat.com>
PR ld/12761
* elflink.c (elf_link_add_object_symbols): Process .gnu.warning
sections when building shared libraries.
2011-05-18 Rafał Krypa <r.krypa@samsung.com> 2011-05-18 Rafał Krypa <r.krypa@samsung.com>
PR ld/12778 PR ld/12778

View file

@ -3423,7 +3423,8 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
.gnu.warning.SYMBOL are treated as warning symbols for the given .gnu.warning.SYMBOL are treated as warning symbols for the given
symbol. This differs from .gnu.warning sections, which generate symbol. This differs from .gnu.warning sections, which generate
warnings when they are included in an output file. */ warnings when they are included in an output file. */
if (info->executable) /* PR 12761: Also generate this warning when building shared libraries. */
if (info->executable || info->shared)
{ {
asection *s; asection *s;

View file

@ -1,3 +1,14 @@
2011-05-18 Nick Clifton <nickc@redhat.com>
PR ld/12761
* lib/ld-lib.exp (run_cc_link_tests): Add an optional 8th
parameter - an expected warning message from the linker.
* ld-elf/shared.exp (build_tests): Expect a warning message when
building the libbarw.so library.
* ld-elf/shared.exp: Run library building tests even when not
building a native toolchain.
2011-05-16 H.J. Lu <hongjiu.lu@intel.com> 2011-05-16 H.J. Lu <hongjiu.lu@intel.com>
* ld-scripts/phdrs.exp: Replace --private with * ld-scripts/phdrs.exp: Replace --private with

View file

@ -25,12 +25,7 @@ if ![is_elf_format] {
return return
} }
# The following tests require running the executable generated by ld. # Check to see if the C compiler works
if ![isnative] {
return
}
# Check if compiler works
if { [which $CC] == 0 } { if { [which $CC] == 0 } {
return return
} }
@ -47,7 +42,8 @@ set build_tests {
{begin.c end.c} {} "libbar.so"} {begin.c end.c} {} "libbar.so"}
{"Build warn libbar.so" {"Build warn libbar.so"
"-shared" "-fPIC" "-shared" "-fPIC"
{beginwarn.c end.c} {} "libbarw.so"} {beginwarn.c end.c} {} "libbarw.so"
"C" "^.*\\\): warning: function foo is deprecated$"}
{"Build hidden libbar.so" {"Build hidden libbar.so"
"-shared" "-fPIC" "-shared" "-fPIC"
{begin.c endhidden.c} {} "libbarh.so"} {begin.c endhidden.c} {} "libbarh.so"}
@ -156,6 +152,13 @@ set build_tests {
{pr11138-2.c} {} "libpr11138-2.o"} {pr11138-2.c} {} "libpr11138-2.o"}
} }
run_cc_link_tests $build_tests
# The following tests require running the executable generated by ld.
if ![isnative] {
return
}
set run_tests { set run_tests {
{"Run normal with libfoo.so" {"Run normal with libfoo.so"
"tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" "" "tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" ""
@ -280,11 +283,10 @@ set run_tests {
{dummy.c} "pr11138b" "pr11138.out"} {dummy.c} "pr11138b" "pr11138.out"}
} }
run_cc_link_tests $build_tests
# NetBSD ELF systems do not currently support the .*_array sections. # NetBSD ELF systems do not currently support the .*_array sections.
run_ld_link_exec_tests [list "*-*-netbsdelf*"] $run_tests run_ld_link_exec_tests [list "*-*-netbsdelf*"] $run_tests
# Check if compiler works # Check to see if the C++ compiler works
if { [which $CXX] == 0 } { if { [which $CXX] == 0 } {
return return
} }

View file

@ -1243,6 +1243,7 @@ proc run_ld_link_exec_tests { targets_to_xfail ldtests } {
# 4:action and options. # 4:action and options.
# 5:name of output file # 5:name of output file
# 6:language (optional) # 6:language (optional)
# 7:linker warnings (optional)
# #
# Actions: # Actions:
# objdump: Apply objdump options on result. Compare with regex (last arg). # objdump: Apply objdump options on result. Compare with regex (last arg).
@ -1261,6 +1262,7 @@ proc run_cc_link_tests { ldtests } {
global CFLAGS global CFLAGS
global CXXFLAGS global CXXFLAGS
global ar global ar
global exec_output
foreach testitem $ldtests { foreach testitem $ldtests {
set testname [lindex $testitem 0] set testname [lindex $testitem 0]
@ -1270,6 +1272,7 @@ proc run_cc_link_tests { ldtests } {
set actions [lindex $testitem 4] set actions [lindex $testitem 4]
set binfile tmpdir/[lindex $testitem 5] set binfile tmpdir/[lindex $testitem 5]
set lang [lindex $testitem 6] set lang [lindex $testitem 6]
set warnings [lindex $testitem 7]
set objfiles {} set objfiles {}
set is_unresolved 0 set is_unresolved 0
set failed 0 set failed 0
@ -1306,8 +1309,18 @@ proc run_cc_link_tests { ldtests } {
set failed 0 set failed 0
} }
} elseif { ![ld_simple_link $cc_cmd $binfile "-L$srcdir/$subdir $ldflags $objfiles"] } { } elseif { ![ld_simple_link $cc_cmd $binfile "-L$srcdir/$subdir $ldflags $objfiles"] } {
fail $testname # Check if exec_output is expected.
set failed 1 if { $warnings != "" } then {
verbose -log "returned with: <$exec_output>, expected: <$warnings>"
if { [regexp $warnings $exec_output] } then {
set failed 0
} else {
set failed 1
}
} else {
fail $testname
set failed 1
}
} else { } else {
set failed 0 set failed 0
} }