mmap_cache was enabled indirectly via unwind feature.  Now mmap_cache
can be used other part of strace. So the way to enable mmap_cache
directly is needed.

* mmap_cache (mmap_cache_enable, mmap_cache_is_enabled): New functions.
(use_mmap_cache): New file local variable.

* syscall.c (syscall_exiting_decode): Use mmap_cache_is_enabled.

* unwind.c (unwind_init): Call mmap_cache_enable.

Signed-off-by: Masatake YAMATO <yam...@redhat.com>
---
 defs.h       |  2 ++
 mmap_cache.c | 11 +++++++++++
 syscall.c    |  4 +---
 unwind.c     |  1 +
 4 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/defs.h b/defs.h
index 093acc3f..6c5f293d 100644
--- a/defs.h
+++ b/defs.h
@@ -738,6 +738,8 @@ enum mmap_cache_rebuild_result {
        MMAP_CACHE_REBUILD_RENEWED,
 };
 
+extern void mmap_cache_enable(void);
+extern bool mmap_cache_is_enabled(void);
 extern void mmap_cache_invalidate(struct tcb *tcp);
 extern void mmap_cache_delete(struct tcb *tcp, const char *caller);
 extern enum mmap_cache_rebuild_result mmap_cache_rebuild_if_invalid(struct tcb 
*tcp, const char *caller);
diff --git a/mmap_cache.c b/mmap_cache.c
index a121b852..336bbdcd 100644
--- a/mmap_cache.c
+++ b/mmap_cache.c
@@ -39,6 +39,17 @@
 #endif
 
 static unsigned int mmap_cache_generation;
+static bool use_mmap_cache;
+
+extern void mmap_cache_enable(void)
+{
+       use_mmap_cache = true;
+}
+
+extern bool mmap_cache_is_enabled(void)
+{
+       return use_mmap_cache;
+}
 
 /*
  * caching of /proc/ID/maps for each process to speed up stack tracing
diff --git a/syscall.c b/syscall.c
index 4d11e7ed..431d799e 100644
--- a/syscall.c
+++ b/syscall.c
@@ -731,12 +731,10 @@ syscall_exiting_decode(struct tcb *tcp, struct timeval 
*ptv)
        if ((Tflag || cflag) && !(filtered(tcp) || hide_log(tcp)))
                gettimeofday(ptv, NULL);
 
-#ifdef USE_LIBUNWIND
-       if (stack_trace_enabled) {
+       if (mmap_cache_is_enabled()) {
                if (tcp->s_ent->sys_flags & STACKTRACE_INVALIDATE_CACHE)
                        mmap_cache_invalidate(tcp);
        }
-#endif
 
        if (filtered(tcp) || hide_log(tcp))
                return 0;
diff --git a/unwind.c b/unwind.c
index 9e9d43a1..84676257 100644
--- a/unwind.c
+++ b/unwind.c
@@ -70,6 +70,7 @@ unwind_init(void)
        if (!libunwind_as)
                error_msg_and_die("failed to create address space for stack 
tracing");
        unw_set_caching_policy(libunwind_as, UNW_CACHE_GLOBAL);
+       mmap_cache_enable();
 }
 
 void
-- 
2.14.3


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to