diff options
author | David Srbecky <dsrbecky@google.com> | 2018-02-23 18:06:13 +0000 |
---|---|---|
committer | David Srbecky <dsrbecky@google.com> | 2019-03-29 14:01:32 +0000 |
commit | 85b5fecec920208ec43b42488f08d4c2e5aaeda2 (patch) | |
tree | f247629aaf617cc5fc287cf3eb2e6f076f6a635d /libbacktrace | |
parent | e346d03c2bf198ab25e926bc2c26dd9db53b87ba (diff) | |
download | system_core-85b5fecec920208ec43b42488f08d4c2e5aaeda2.tar.gz system_core-85b5fecec920208ec43b42488f08d4c2e5aaeda2.tar.bz2 system_core-85b5fecec920208ec43b42488f08d4c2e5aaeda2.zip |
Check for data races when reading JIT/DEX entries.
Update the entries only when the list is modified by the runtime.
Check that the list wasn't concurrently modified when being read.
Bug: 124287208
Test: libunwindstack_test
Test: art/test.py -b --host -r -t 137-cfi
Change-Id: I87ba70322053a01b3d5be1fdf6310e1dc21bb084
Diffstat (limited to 'libbacktrace')
-rw-r--r-- | libbacktrace/UnwindStack.cpp | 11 | ||||
-rw-r--r-- | libbacktrace/UnwindStackMap.cpp | 7 | ||||
-rw-r--r-- | libbacktrace/UnwindStackMap.h | 14 |
3 files changed, 0 insertions, 32 deletions
diff --git a/libbacktrace/UnwindStack.cpp b/libbacktrace/UnwindStack.cpp index f5f9b2ada..ff19833a4 100644 --- a/libbacktrace/UnwindStack.cpp +++ b/libbacktrace/UnwindStack.cpp @@ -32,9 +32,6 @@ #include <unwindstack/Regs.h> #include <unwindstack/RegsGetLocal.h> -#if !defined(NO_LIBDEXFILE_SUPPORT) -#include <unwindstack/DexFiles.h> -#endif #include <unwindstack/Unwinder.h> #include "BacktraceLog.h" @@ -50,14 +47,6 @@ bool Backtrace::Unwind(unwindstack::Regs* regs, BacktraceMap* back_map, regs, stack_map->process_memory()); unwinder.SetResolveNames(stack_map->ResolveNames()); stack_map->SetArch(regs->Arch()); - if (stack_map->GetJitDebug() != nullptr) { - unwinder.SetJitDebug(stack_map->GetJitDebug(), regs->Arch()); - } -#if !defined(NO_LIBDEXFILE_SUPPORT) - if (stack_map->GetDexFiles() != nullptr) { - unwinder.SetDexFiles(stack_map->GetDexFiles(), regs->Arch()); - } -#endif unwinder.Unwind(skip_names, &stack_map->GetSuffixesToIgnore()); if (error != nullptr) { switch (unwinder.LastErrorCode()) { diff --git a/libbacktrace/UnwindStackMap.cpp b/libbacktrace/UnwindStackMap.cpp index 4518891c3..726fdfa04 100644 --- a/libbacktrace/UnwindStackMap.cpp +++ b/libbacktrace/UnwindStackMap.cpp @@ -43,13 +43,6 @@ bool UnwindStackMap::Build() { // Create the process memory object. process_memory_ = unwindstack::Memory::CreateProcessMemory(pid_); - // Create a JitDebug object for getting jit unwind information. - std::vector<std::string> search_libs_{"libart.so", "libartd.so"}; - jit_debug_.reset(new unwindstack::JitDebug(process_memory_, search_libs_)); -#if !defined(NO_LIBDEXFILE_SUPPORT) - dex_files_.reset(new unwindstack::DexFiles(process_memory_, search_libs_)); -#endif - if (!stack_maps_->Parse()) { return false; } diff --git a/libbacktrace/UnwindStackMap.h b/libbacktrace/UnwindStackMap.h index e19b60565..9bb970915 100644 --- a/libbacktrace/UnwindStackMap.h +++ b/libbacktrace/UnwindStackMap.h @@ -27,9 +27,6 @@ #include <backtrace/Backtrace.h> #include <backtrace/BacktraceMap.h> -#if !defined(NO_LIBDEXFILE_SUPPORT) -#include <unwindstack/DexFiles.h> -#endif #include <unwindstack/Elf.h> #include <unwindstack/JitDebug.h> #include <unwindstack/Maps.h> @@ -53,12 +50,6 @@ class UnwindStackMap : public BacktraceMap { const std::shared_ptr<unwindstack::Memory>& process_memory() { return process_memory_; } - unwindstack::JitDebug* GetJitDebug() { return jit_debug_.get(); } - -#if !defined(NO_LIBDEXFILE_SUPPORT) - unwindstack::DexFiles* GetDexFiles() { return dex_files_.get(); } -#endif - void SetArch(unwindstack::ArchEnum arch) { arch_ = arch; } protected: @@ -66,11 +57,6 @@ class UnwindStackMap : public BacktraceMap { std::unique_ptr<unwindstack::Maps> stack_maps_; std::shared_ptr<unwindstack::Memory> process_memory_; - std::unique_ptr<unwindstack::JitDebug> jit_debug_; -#if !defined(NO_LIBDEXFILE_SUPPORT) - std::unique_ptr<unwindstack::DexFiles> dex_files_; -#endif - unwindstack::ArchEnum arch_ = unwindstack::ARCH_UNKNOWN; }; |