diff options
author | Christopher Ferris <cferris@google.com> | 2013-10-21 13:30:52 -0700 |
---|---|---|
committer | Christopher Ferris <cferris@google.com> | 2013-10-28 17:55:25 -0700 |
commit | 17e91d44edf5e6476a477a200bcd89d4327358a3 (patch) | |
tree | 947783229077133a7f467402607a72fe2047a7a7 /libbacktrace/UnwindCurrent.h | |
parent | f1296b9e92cb04f9bba8c622560d37dfc53c7aa4 (diff) | |
download | system_core-17e91d44edf5e6476a477a200bcd89d4327358a3.zip system_core-17e91d44edf5e6476a477a200bcd89d4327358a3.tar.gz system_core-17e91d44edf5e6476a477a200bcd89d4327358a3.tar.bz2 |
Rewrite libbacktrace using C++.
The old code was essentially trying to be C++ in C and was awkward. This
change makes it all objects with a thin layer that C code can use.
There is a C++ backtrace object that is not very useful, this code will
replace it.
This change also includes moving the backtrace test to a gtest, and adding
coverage of all major functionality.
Bug: 8410085
Change-Id: Iae0f1b09b3dd60395f71ed66010c1ea5cdd37841
Diffstat (limited to 'libbacktrace/UnwindCurrent.h')
-rw-r--r-- | libbacktrace/UnwindCurrent.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/libbacktrace/UnwindCurrent.h b/libbacktrace/UnwindCurrent.h new file mode 100644 index 0000000..7dc977d --- /dev/null +++ b/libbacktrace/UnwindCurrent.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _LIBBACKTRACE_UNWIND_CURRENT_H +#define _LIBBACKTRACE_UNWIND_CURRENT_H + +#include <string> + +#include "Backtrace.h" +#include "BacktraceThread.h" + +#define UNW_LOCAL_ONLY +#include <libunwind.h> + +class UnwindCurrent : public BacktraceImpl { +public: + UnwindCurrent(); + virtual ~UnwindCurrent(); + + virtual bool Unwind(size_t num_ignore_frames); + + virtual std::string GetFunctionNameRaw(uintptr_t pc, uintptr_t* offset); + + bool UnwindFromContext(size_t num_ignore_frames, bool resolve); + + void ExtractContext(void* sigcontext); + +protected: + unw_context_t context_; +}; + +class UnwindThread : public UnwindCurrent, public BacktraceThreadInterface { +public: + UnwindThread(); + virtual ~UnwindThread(); + + virtual bool Init(); + + virtual void ThreadUnwind( + siginfo_t* siginfo, void* sigcontext, size_t num_ignore_frames); +}; + +#endif // _LIBBACKTRACE_UNWIND_CURRENT_H |