On 10/10/2014 11:30 AM, Jakub Jelinek wrote:
On Fri, Oct 10, 2014 at 11:13:11AM +0400, Maxim Ostapenko wrote:
Adding Jakub.
-Maxim
On 10/09/2014 04:34 PM, Maxim Ostapenko wrote:
Hi,
After enabling ASan, TSan and UBSan testsuites for installed toolchain,
many tests started to fail. This is caused by wrong logic in {asan, ubsan,
tsan}_finish
functions. Here, restore_ld_library_path is called, that is wrong, because
it drops some env variables ( GCC_EXEC_PREFIX, LD_LIBRARY_PATH, etc) to
state that was before gcc-dg.exp initialized testing environment, so
installed GCC will be confused to find some needed stuff later.
Removing restore_ld_library_path from {asan, ubsan, tsan}_finish seems to
fix the issue.
Tested on x86_64-pc-linux-gnu, ok to commit?
-Maxim
gcc/testsuite/ChangeLog:
2014-10-09 Max Ostapenko <m.ostape...@partner.samsung.com>
* lib/asan-dg.exp (asan_finish): Remove
restore_ld_library_path_env_vars.
* lib/tsan-dg.exp (tsan_finish): Likewise.
* lib/ubsan-dg.exp (ubsan_finish): Likewise.
That looks wrong to me, we don't want to keep the libsanitizer paths in
LD_LIBRARY_PATH* after we leave asan.exp etc.
So, perhaps instead save ld_library_path into some global variable
(like {a,t,ub}san_saved_ld_library_path) during {a,t,ub}san_link_flags
before appending there anything, and replace
restore_ld_library_path_env_vars
with
set ld_library_path ${a,t,ub}san_saved_ld_library_path
set_ld_library_path_env_vars
?
Jakub
This works indeed. However, calling set_ld_library_path_env_vars in
{asan, tsan, ubsan}_finish will lead to updating LD_LIBRARY_PATH_{32,
64}, LD_RUN_PATH etc. with "$ld_library_path:$orig_ld_{library_path_32,
library_path_64, run, etc}". Is this fine?
-Maxim
gcc/testsuite/ChangeLog:
2014-10-10 Max Ostapenko <m.ostape...@partner.samsung.com>
* lib/asan-dg.exp (asan_link_flags): Save ld_library_path.
* lib/tsan-dg.exp (tsan_link_flags): Likewise.
* lib/ubsan-dg.exp (ubsan_link_flags): Likewise.
* lib/asan-dg.exp (asan_finish): Remove restore_ld_library_path_env_vars.
Restore ld_library_path with saved value. Restore LD_LIBRARY_PATH
related env variables by calling set_ld_library_path_env_vars.
* lib/tsan-dg.exp (tsan_finish): Likewise.
* lib/ubsan-dg.exp (ubsan_finish): Likewise.
diff --git a/gcc/testsuite/lib/asan-dg.exp b/gcc/testsuite/lib/asan-dg.exp
index 9769138..4e8b4d6 100644
--- a/gcc/testsuite/lib/asan-dg.exp
+++ b/gcc/testsuite/lib/asan-dg.exp
@@ -47,11 +47,13 @@ proc asan_link_flags { paths } {
global srcdir
global ld_library_path
global shlib_ext
+ global asan_saved_library_path
set gccpath ${paths}
set flags ""
set shlib_ext [get_shlib_extension]
+ set asan_saved_library_path $ld_library_path
if { $gccpath != "" } {
if { [file exists "${gccpath}/libsanitizer/asan/.libs/libasan.a"]
@@ -122,6 +124,8 @@ proc asan_finish { args } {
global TEST_ALWAYS_FLAGS
global asan_saved_TEST_ALWAYS_FLAGS
global asan_saved_ALWAYS_CXXFLAGS
+ global asan_saved_library_path
+ global ld_library_path
if [info exists asan_saved_ALWAYS_CXXFLAGS ] {
set ALWAYS_CXXFLAGS $asan_saved_ALWAYS_CXXFLAGS
@@ -132,7 +136,8 @@ proc asan_finish { args } {
unset TEST_ALWAYS_FLAGS
}
}
- restore_ld_library_path_env_vars
+ set ld_library_path $asan_saved_library_path
+ set_ld_library_path_env_vars
}
# Symbolize lines like
diff --git a/gcc/testsuite/lib/tsan-dg.exp b/gcc/testsuite/lib/tsan-dg.exp
index 54ec404..77c85ff 100644
--- a/gcc/testsuite/lib/tsan-dg.exp
+++ b/gcc/testsuite/lib/tsan-dg.exp
@@ -32,11 +32,13 @@ proc tsan_link_flags { paths } {
global srcdir
global ld_library_path
global shlib_ext
+ global tsan_saved_library_path
set gccpath ${paths}
set flags ""
set shlib_ext [get_shlib_extension]
+ set tsan_saved_library_path $ld_library_path
if { $gccpath != "" } {
if { [file exists "${gccpath}/libsanitizer/tsan/.libs/libtsan.a"]
@@ -127,6 +129,8 @@ proc tsan_finish { args } {
global tsan_saved_ALWAYS_CXXFLAGS
global dg-do-what-default
global tsan_saved_dg-do-what-default
+ global tsan_saved_library_path
+ global ld_library_path
if [info exists tsan_saved_ALWAYS_CXXFLAGS ] {
set ALWAYS_CXXFLAGS $tsan_saved_ALWAYS_CXXFLAGS
@@ -143,5 +147,6 @@ proc tsan_finish { args } {
} else {
unset dg-do-what-default
}
- restore_ld_library_path_env_vars
+ set ld_library_path $tsan_saved_library_path
+ set_ld_library_path_env_vars
}
diff --git a/gcc/testsuite/lib/ubsan-dg.exp b/gcc/testsuite/lib/ubsan-dg.exp
index 5a7a653..3bfdcc8 100644
--- a/gcc/testsuite/lib/ubsan-dg.exp
+++ b/gcc/testsuite/lib/ubsan-dg.exp
@@ -32,11 +32,13 @@ proc ubsan_link_flags { paths } {
global srcdir
global ld_library_path
global shlib_ext
+ global ubsan_saved_library_path
set gccpath ${paths}
set flags ""
set shlib_ext [get_shlib_extension]
+ set ubsan_saved_library_path $ld_library_path
if { $gccpath != "" } {
if { [file exists "${gccpath}/libsanitizer/ubsan/.libs/libubsan.a"]
@@ -104,6 +106,8 @@ proc ubsan_finish { args } {
global TEST_ALWAYS_FLAGS
global ubsan_saved_TEST_ALWAYS_FLAGS
global ubsan_saved_ALWAYS_CXXFLAGS
+ global ubsan_saved_library_path
+ global ld_library_path
if [info exists ubsan_saved_ALWAYS_CXXFLAGS ] {
set ALWAYS_CXXFLAGS $ubsan_saved_ALWAYS_CXXFLAGS
@@ -114,5 +118,6 @@ proc ubsan_finish { args } {
unset TEST_ALWAYS_FLAGS
}
}
- restore_ld_library_path_env_vars
+ set ld_library_path $ubsan_saved_library_path
+ set_ld_library_path_env_vars
}