aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-02-22 17:07:36 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2013-02-22 17:07:36 +0100
commit7d61373544eb18698bd9015f73940048aeb4324e (patch)
tree31175eb919612b28fc525b5c5a2dea02e08371c3 /gcc
parentac8d93a742c5252bce9d6f867dccb950fda6df26 (diff)
downloadgcc-7d61373544eb18698bd9015f73940048aeb4324e.zip
gcc-7d61373544eb18698bd9015f73940048aeb4324e.tar.gz
gcc-7d61373544eb18698bd9015f73940048aeb4324e.tar.bz2
re PR sanitizer/56393 (SIGSEGV when -fsanitize=address and dynamic lib with global objects)
PR sanitizer/56393 * config/gnu-user.h (LIBASAN_EARLY_SPEC): Link in libasan_preinit.o if not linking a shared library. * lib/asan-dg.exp (asan_link_flags): Add -B${gccpath}/libsanitizer/asan/ to flags. * asan/Makefile.am (nodist_toolexeclib_HEADERS): Set to libasan_preinit.o. (libasan_preinit.o): Depend on asan_preinit.o. * asan/Makefile.in: Regenerated. * asan/asan_preinit.cc: New file, synced from upstream. * asan/asan_rtl.cc: Remove preinit stuff, synced from upstream. From-SVN: r196222
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/gnu-user.h6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/lib/asan-dg.exp1
4 files changed, 17 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e39c57f..e7cd749 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/56393
+ * config/gnu-user.h (LIBASAN_EARLY_SPEC): Link in libasan_preinit.o
+ if not linking a shared library.
+
2013-02-22 Seth LaForge <sethml@google.com>
* config.gcc (arm*-*-eabi*): Treat arm*eb as big-endian.
diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h
index ba627e0..6c26163 100644
--- a/gcc/config/gnu-user.h
+++ b/gcc/config/gnu-user.h
@@ -104,11 +104,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
it to force everything into the executable. And similarly for -ltsan. */
#if defined(HAVE_LD_STATIC_DYNAMIC)
#undef LIBASAN_EARLY_SPEC
-#define LIBASAN_EARLY_SPEC "%{static-libasan:%{!shared:" \
+#define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \
+ "%{static-libasan:%{!shared:" \
LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \
LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}"
#undef LIBTSAN_EARLY_SPEC
-#define LIBTSAN_EARLY_SPEC "%{static-libtsan:%{!shared:" \
+#define LIBTSAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \
+ "%{static-libtsan:%{!shared:" \
LD_STATIC_OPTION " --whole-archive -ltsan --no-whole-archive " \
LD_DYNAMIC_OPTION "}}%{!static-libtsan:-ltsan}"
#endif
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7df8623..351cb17 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/56393
+ * lib/asan-dg.exp (asan_link_flags): Add
+ -B${gccpath}/libsanitizer/asan/ to flags.
+
2013-02-21 Jakub Jelinek <jakub@redhat.com>
PR middle-end/56420
diff --git a/gcc/testsuite/lib/asan-dg.exp b/gcc/testsuite/lib/asan-dg.exp
index 0bc9b24..e0bf2da 100644
--- a/gcc/testsuite/lib/asan-dg.exp
+++ b/gcc/testsuite/lib/asan-dg.exp
@@ -41,6 +41,7 @@ proc asan_link_flags { paths } {
if { $gccpath != "" } {
if { [file exists "${gccpath}/libsanitizer/asan/.libs/libasan.a"]
|| [file exists "${gccpath}/libsanitizer/asan/.libs/libasan.${shlib_ext}"] } {
+ append flags " -B${gccpath}/libsanitizer/asan/ "
append flags " -L${gccpath}/libsanitizer/asan/.libs "
append ld_library_path ":${gccpath}/libsanitizer/asan/.libs"
}