From f02593b0e61f8108449770094caa7bb39a646ec1 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Mon, 4 Aug 2014 17:08:46 -0700 Subject: [PATCH] Allow getting an uncached process map. Change-Id: I58d7e90a7b5c4476a4b9f51640c54d13748ac220 --- include/backtrace/BacktraceMap.h | 5 ++++- libbacktrace/UnwindMap.cpp | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/include/backtrace/BacktraceMap.h b/include/backtrace/BacktraceMap.h index c717f098c..4ed23a887 100644 --- a/include/backtrace/BacktraceMap.h +++ b/include/backtrace/BacktraceMap.h @@ -41,7 +41,10 @@ struct backtrace_map_t { class BacktraceMap { public: - static BacktraceMap* Create(pid_t pid); + // If uncached is true, then parse the current process map as of the call. + // Passing a map created with uncached set to true to Backtrace::Create() + // is unsupported. + static BacktraceMap* Create(pid_t pid, bool uncached = false); virtual ~BacktraceMap(); diff --git a/libbacktrace/UnwindMap.cpp b/libbacktrace/UnwindMap.cpp index 4f9831bb1..387d768aa 100644 --- a/libbacktrace/UnwindMap.cpp +++ b/libbacktrace/UnwindMap.cpp @@ -130,9 +130,13 @@ const backtrace_map_t* UnwindMapLocal::Find(uintptr_t addr) { //------------------------------------------------------------------------- // BacktraceMap create function. //------------------------------------------------------------------------- -BacktraceMap* BacktraceMap::Create(pid_t pid) { +BacktraceMap* BacktraceMap::Create(pid_t pid, bool uncached) { BacktraceMap* map; - if (pid == getpid()) { + + if (uncached) { + // Force use of the base class to parse the maps when this call is made. + map = new BacktraceMap(pid); + } else if (pid == getpid()) { map = new UnwindMapLocal(); } else { map = new UnwindMap(pid);