aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Edelsohn <dje.gcc@gmail.com>2021-04-23 17:45:10 -0400
committerDavid Edelsohn <dje.gcc@gmail.com>2021-04-24 11:57:05 -0400
commitfb6b24c66ea5a2ccbf6fb9f299c20a69f962ac9b (patch)
treef1d92572fa31b5606ab780084946202a44d41e57
parentb6600392bf71c4a9785f8f49948b611425896830 (diff)
downloadgcc-fb6b24c66ea5a2ccbf6fb9f299c20a69f962ac9b.zip
gcc-fb6b24c66ea5a2ccbf6fb9f299c20a69f962ac9b.tar.gz
gcc-fb6b24c66ea5a2ccbf6fb9f299c20a69f962ac9b.tar.bz2
testuite: fix libtdc++ libatomic flags
Some ports require libatomic for atomic operations, at least for some data types and widths. The libstdc++ testsuite previously was updated to link against libatomic, but the search path was hard-coded to something that is not always correct, and the shared library search path was not set. The search path was hard-coded to the expected location of the libatomic build directory relative to the libstdc++ testsuite directory, but if one uses parallelism when invoking the libstdc++ testsuite, the tests are run in the "normalXX" sub-directories, for which the hard-coded search path is incorrect. The path also is incorrect for alternative multilib and tool options. This patch adopts the logic from gcc/testsuite/lib/atomic-dg.exp to search for the library and adds the logic to the libstdc++ testsuite libatomic seatch path code. Previously the libstdc++ testsuite atomic tests failed depending on the build configuration and if a build of libatomic was installed in the default search path. Bootstrapped on powerpc-ibm-aix7.2.3.0. libstdc++-v3/ChangeLog: * testsuite/lib/dg-options.exp (atomic_link_flags): New. (add_options_for_libatomic): Use atomic_link_flags.
-rw-r--r--libstdc++-v3/testsuite/lib/dg-options.exp47
1 files changed, 46 insertions, 1 deletions
diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp
index 7894973..872768f 100644
--- a/libstdc++-v3/testsuite/lib/dg-options.exp
+++ b/libstdc++-v3/testsuite/lib/dg-options.exp
@@ -260,13 +260,58 @@ proc add_options_for_net_ts { flags } {
# Add to FLAGS all the target-specific flags to link to libatomic,
# if required for atomics on pointers and 64-bit types.
+proc atomic_link_flags { paths } {
+ global srcdir
+ global ld_library_path
+ global shlib_ext
+
+ set gccpath ${paths}
+ set flags ""
+
+ set shlib_ext [get_shlib_extension]
+
+ if { $gccpath != "" } {
+ if { [file exists "${gccpath}/libatomic/.libs/libatomic.a"]
+ || [file exists "${gccpath}/libatomic/.libs/libatomic.${shlib_ext}"] } {
+ append flags " -B${gccpath}/libatomic/ "
+ append flags " -L${gccpath}/libatomic/.libs"
+ append ld_library_path ":${gccpath}/libatomic/.libs"
+ }
+ } else {
+ global tool_root_dir
+
+ set libatomic [lookfor_file ${tool_root_dir} libatomic]
+ if { $libatomic != "" } {
+ append flags "-L${libatomic} "
+ append ld_library_path ":${libatomic}"
+ }
+ }
+
+ set_ld_library_path_env_vars
+
+ return "$flags"
+}
+
proc add_options_for_libatomic { flags } {
if { [istarget hppa*-*-hpux*]
|| ([istarget powerpc*-*-*] && [check_effective_target_ilp32])
|| [istarget riscv*-*-*]
|| ([istarget sparc*-*-linux-gnu] && [check_effective_target_ilp32])
} {
- return "$flags -L../../libatomic/.libs -latomic"
+ global TOOL_OPTIONS
+
+ set link_flags ""
+ if ![is_remote host] {
+ if [info exists TOOL_OPTIONS] {
+ set link_flags "[atomic_link_flags [get_multilibs ${TOOL_OPTIONS}]]"
+ } else {
+ set link_flags "[atomic_link_flags [get_multilibs]]"
+ }
+ }
+
+ append link_flags " -latomic "
+
+ return "$flags $link_flags"
}
return $flags
}