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);