Remove redundant calls of MaybeMountProcFS and refactor it.
authorMaxim Ostapenko <m.ostapenko@samsung.com>
Wed, 6 Jul 2016 10:04:28 +0000 (13:04 +0300)
committerIvan Baravy <i.baravy@samsung.com>
Mon, 27 Feb 2017 07:54:48 +0000 (10:54 +0300)
It seems that we have lots of redundant MaybeMountProcFS, in particular
each mapped sanitized shared library calls it from AsanInitializer constructor.
Remove redudant MaybeMountProcFS calls from AsanInitializer and __asan_init.

Also, it seems that under qemu-aarch64 opening /proc/self/maps for reading
might be very expensive, so replace OpenFile("/proc/self/maps", RdOnly) with
FileExists("/proc/self/maps") in MaybeMountProcFS to avoid expensive calls.

Change-Id: I8ba28dbbc102be519fa2b284520509f601ec5cf7
Signed-off-by: Maxim Ostapenko <m.ostapenko@samsung.com>
libsanitizer/asan/asan_rtl.cc

index 2b6287c..7f51016 100644 (file)
@@ -410,11 +410,8 @@ static void MaybeDisableUlimit() {
 }
 
 bool MaybeMountProcFS() {
-  uptr tmp = OpenFile("/proc/self/maps", RdOnly);
-  if(!internal_iserror(tmp)) {
-    internal_close(tmp);
-    return true;
-  }
+  if (FileExists("/proc/self/maps")) return true;
+
   if(0 != mount("proc", "/proc", "proc", 0, 0)) {
     Report("Failed to mount /proc, Asan is likely to fail\n");
     return false;
@@ -591,7 +588,6 @@ void AsanInitFromRtl() {
 class AsanInitializer {
 public:  // NOLINT
   AsanInitializer() {
-    MaybeMountProcFS();
     AsanInitFromRtl();
   }
 };
@@ -645,7 +641,6 @@ void NOINLINE __asan_set_death_callback(void (*callback)(void)) {
 // Initialize as requested from instrumented application code.
 // We use this call as a trigger to wake up ASan from deactivated state.
 void __asan_init() {
-  MaybeMountProcFS();
   AsanActivate();
   AsanInitInternal();
 }