[asan_build] Enable asaned glibc work. 01/152901/6
authorDenis Khalikov <d.khalikov@partner.samsung.com>
Tue, 26 Sep 2017 18:51:35 +0000 (21:51 +0300)
committerDenis Khalikov <d.khalikov@partner.samsung.com>
Thu, 9 Nov 2017 16:54:10 +0000 (19:54 +0300)
Modify GetPageSize () function to return
4096 for arm and arch64 architectures. We can
not call sysconf from libc befor libc is inited.

Mark libasan as initfirst, in this case "patched" rtld
will be able to initiazlie libasan before libc.so

Change-Id: I56a582fdeafcf55b9dbab8fcd1b39be850cccc04

libsanitizer/asan/Makefile.am
libsanitizer/asan/Makefile.in
libsanitizer/asan/asan_linux.cc
libsanitizer/sanitizer_common/sanitizer_linux.cc
packaging/gcc-aarch64.spec
packaging/gcc-armv7l.spec
packaging/linaro-gcc.spec

index bea23e5..e535f40 100644 (file)
@@ -54,7 +54,8 @@ libasan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
 endif
 libasan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
 
-libasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libasan)
+libasan_la_LDFLAGS = -Wl,-z,initfirst
+libasan_la_LDFLAGS += -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libasan)
 
 libasan_preinit.o: asan_preinit.o
        cp $< $@
index 2a183db..7adfa5b 100644 (file)
@@ -341,7 +341,8 @@ libasan_la_LIBADD =  \
        $(top_builddir)/sanitizer_common/libsanitizer_common.la \
        $(top_builddir)/lsan/libsanitizer_lsan.la $(am__append_2) \
        $(am__append_3) $(LIBSTDCXX_RAW_CXX_LDFLAGS)
-libasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libasan)
+libasan_la_LDFLAGS = -Wl,-z,initfirst -version-info `grep -v '^\#' \
+       $(srcdir)/libtool-version` $(link_libasan)
 
 # Work around what appears to be a GNU make bug handling MAKEFLAGS
 # values defined in terms of make variables, as is the case for CC and
index 9f058df..7533f45 100644 (file)
@@ -83,6 +83,8 @@ void AsanApplyToGlobals(globals_op_fptr op, const void *needle) {
 void AsanCheckDynamicRTPrereqs() {}
 void AsanCheckIncompatibleRT() {}
 #else
+
+#ifndef ASAN_INIT_FIRST
 static int FindFirstDSOCallback(struct dl_phdr_info *info, size_t size,
                                 void *data) {
   // Continue until the first dynamic library is found
@@ -96,6 +98,7 @@ static int FindFirstDSOCallback(struct dl_phdr_info *info, size_t size,
   *(const char **)data = info->dlpi_name;
   return 1;
 }
+#endif
 
 static bool IsDynamicRTName(const char *libname) {
   return internal_strstr(libname, "libclang_rt.asan") ||
@@ -111,6 +114,10 @@ void AsanCheckDynamicRTPrereqs() {
   if (!ASAN_DYNAMIC)
     return;
 
+// Can not use dl_iterate_phdr before libc is inited.
+// Anyway if we have patched rtld we will get libasan.so
+// inited early than other libraries.
+#ifndef ASAN_INIT_FIRST
   // Ensure that dynamic RT is the first DSO in the list
   const char *first_dso_name = nullptr;
   dl_iterate_phdr(FindFirstDSOCallback, &first_dso_name);
@@ -120,6 +127,7 @@ void AsanCheckDynamicRTPrereqs() {
            "manually preload it with LD_PRELOAD.\n");
     Die();
   }
+#endif
 }
 
 void AsanCheckIncompatibleRT() {
index 5d17bf7..769cba7 100644 (file)
@@ -799,7 +799,8 @@ bool ThreadLister::GetDirectoryEntries() {
 
 uptr GetPageSize() {
 // Android post-M sysconf(_SC_PAGESIZE) crashes if called from .preinit_array.
-#if SANITIZER_ANDROID
+#if SANITIZER_ANDROID ||                                                       \
+    (SANITIZER_LINUX && (defined(__arm__) || defined(__aarch64__)))
   return 4096;
 #elif SANITIZER_LINUX && (defined(__x86_64__) || defined(__i386__))
   return EXEC_PAGESIZE;
index 4cd7eee..ed47e43 100644 (file)
@@ -679,7 +679,7 @@ RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-m\(arch\|tune\|cpu\)=[^ ]*//g'`
 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-m\(sse\|fpmath\)[^ ]*//g'`
 }
 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/  */ /g'`
-
+%{?asan: RPM_OPT_FLAGS=$(echo $RPM_OPT_FLAGS -DASAN_INIT_FIRST) }
 
 
 CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \
index 81846a5..3562448 100644 (file)
@@ -679,7 +679,7 @@ RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-m\(arch\|tune\|cpu\)=[^ ]*//g'`
 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-m\(sse\|fpmath\)[^ ]*//g'`
 }
 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/  */ /g'`
-
+%{?asan: RPM_OPT_FLAGS=$(echo $RPM_OPT_FLAGS -DASAN_INIT_FIRST) }
 
 
 CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \
index 72c9b17..31ffa15 100644 (file)
@@ -676,7 +676,7 @@ RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-m\(arch\|tune\|cpu\)=[^ ]*//g'`
 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-m\(sse\|fpmath\)[^ ]*//g'`
 }
 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/  */ /g'`
-
+%{?asan: RPM_OPT_FLAGS=$(echo $RPM_OPT_FLAGS -DASAN_INIT_FIRST) }
 
 
 CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \