summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorVijay Venkatraman <vijaykv@google.com>2017-04-11 11:22:43 -0700
committerVijay Venkatraman <vijaykv@google.com>2017-04-11 11:22:43 -0700
commit8f2c28d572e08cb456da05d692e41f978c3776b1 (patch)
treef24d6e2e935760dd877452ad81f8f4c0fc2a97d3 /include
parenta4b40020ef5ae339e19b832f441c26b598f6c4aa (diff)
downloadcore-8f2c28d572e08cb456da05d692e41f978c3776b1.tar.gz
core-8f2c28d572e08cb456da05d692e41f978c3776b1.tar.bz2
core-8f2c28d572e08cb456da05d692e41f978c3776b1.zip
Moved include/backtrace to libbacktrace/include
Export libbacktrace_headers Bug: 33241851 Test: Build sailfish Change-Id: Iba310ffc21d17ba542bed954a960ab305037061c
Diffstat (limited to 'include')
l---------include/backtrace1
-rw-r--r--include/backtrace/Backtrace.h176
-rw-r--r--include/backtrace/BacktraceMap.h129
-rw-r--r--include/backtrace/backtrace_constants.h30
4 files changed, 1 insertions, 335 deletions
diff --git a/include/backtrace b/include/backtrace
new file mode 120000
index 000000000..93ce2b1e9
--- /dev/null
+++ b/include/backtrace
@@ -0,0 +1 @@
+../libbacktrace/include/backtrace \ No newline at end of file
diff --git a/include/backtrace/Backtrace.h b/include/backtrace/Backtrace.h
deleted file mode 100644
index 4f73a658c..000000000
--- a/include/backtrace/Backtrace.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * 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 _BACKTRACE_BACKTRACE_H
-#define _BACKTRACE_BACKTRACE_H
-
-#include <inttypes.h>
-#include <stdint.h>
-
-#include <string>
-#include <vector>
-
-#include <backtrace/backtrace_constants.h>
-#include <backtrace/BacktraceMap.h>
-
-#if __LP64__
-#define PRIPTR "016" PRIxPTR
-typedef uint64_t word_t;
-#else
-#define PRIPTR "08" PRIxPTR
-typedef uint32_t word_t;
-#endif
-
-enum BacktraceUnwindError : uint32_t {
- BACKTRACE_UNWIND_NO_ERROR,
- // Something failed while trying to perform the setup to begin the unwind.
- BACKTRACE_UNWIND_ERROR_SETUP_FAILED,
- // There is no map information to use with the unwind.
- BACKTRACE_UNWIND_ERROR_MAP_MISSING,
- // An error occurred that indicates a programming error.
- BACKTRACE_UNWIND_ERROR_INTERNAL,
- // The thread to unwind has disappeared before the unwind can begin.
- BACKTRACE_UNWIND_ERROR_THREAD_DOESNT_EXIST,
- // The thread to unwind has not responded to a signal in a timely manner.
- BACKTRACE_UNWIND_ERROR_THREAD_TIMEOUT,
- // Attempt to do an unsupported operation.
- BACKTRACE_UNWIND_ERROR_UNSUPPORTED_OPERATION,
- // Attempt to do an offline unwind without a context.
- BACKTRACE_UNWIND_ERROR_NO_CONTEXT,
-};
-
-struct backtrace_frame_data_t {
- size_t num; // The current fame number.
- uintptr_t pc; // The absolute pc.
- uintptr_t sp; // The top of the stack.
- size_t stack_size; // The size of the stack, zero indicate an unknown stack size.
- backtrace_map_t map; // The map associated with the given pc.
- std::string func_name; // The function name associated with this pc, NULL if not found.
- uintptr_t func_offset; // pc relative to the start of the function, only valid if func_name is not NULL.
-};
-
-#if defined(__APPLE__)
-struct __darwin_ucontext;
-typedef __darwin_ucontext ucontext_t;
-#else
-struct ucontext;
-typedef ucontext ucontext_t;
-#endif
-
-struct backtrace_stackinfo_t {
- uint64_t start;
- uint64_t end;
- const uint8_t* data;
-};
-
-class Backtrace {
-public:
- // Create the correct Backtrace object based on what is to be unwound.
- // If pid < 0 or equals the current pid, then the Backtrace object
- // corresponds to the current process.
- // If pid < 0 or equals the current pid and tid >= 0, then the Backtrace
- // object corresponds to a thread in the current process.
- // If pid >= 0 and tid < 0, then the Backtrace object corresponds to a
- // different process.
- // Tracing a thread in a different process is not supported.
- // If map is NULL, then create the map and manage it internally.
- // If map is not NULL, the map is still owned by the caller.
- static Backtrace* Create(pid_t pid, pid_t tid, BacktraceMap* map = NULL);
-
- // Create an offline Backtrace object that can be used to do an unwind without a process
- // that is still running. If cache_file is set to true, then elf information will be cached
- // for this call. The cached information survives until the calling process ends. This means
- // that subsequent calls to create offline Backtrace objects will continue to use the same
- // cache. It also assumes that the elf files used for each offline unwind are the same.
- static Backtrace* CreateOffline(pid_t pid, pid_t tid, BacktraceMap* map,
- const backtrace_stackinfo_t& stack, bool cache_file = false);
-
- virtual ~Backtrace();
-
- // Get the current stack trace and store in the backtrace_ structure.
- virtual bool Unwind(size_t num_ignore_frames, ucontext_t* context = NULL) = 0;
-
- // Get the function name and offset into the function given the pc.
- // If the string is empty, then no valid function name was found,
- // or the pc is not in any valid map.
- virtual std::string GetFunctionName(uintptr_t pc, uintptr_t* offset,
- const backtrace_map_t* map = NULL);
-
- // Fill in the map data associated with the given pc.
- virtual void FillInMap(uintptr_t pc, backtrace_map_t* map);
-
- // Read the data at a specific address.
- virtual bool ReadWord(uintptr_t ptr, word_t* out_value) = 0;
-
- // Read arbitrary data from a specific address. If a read request would
- // span from one map to another, this call only reads up until the end
- // of the current map.
- // Returns the total number of bytes actually read.
- virtual size_t Read(uintptr_t addr, uint8_t* buffer, size_t bytes) = 0;
-
- // Create a string representing the formatted line of backtrace information
- // for a single frame.
- virtual std::string FormatFrameData(size_t frame_num);
- virtual std::string FormatFrameData(const backtrace_frame_data_t* frame);
-
- pid_t Pid() const { return pid_; }
- pid_t Tid() const { return tid_; }
- size_t NumFrames() const { return frames_.size(); }
-
- const backtrace_frame_data_t* GetFrame(size_t frame_num) {
- if (frame_num >= frames_.size()) {
- return NULL;
- }
- return &frames_[frame_num];
- }
-
- typedef std::vector<backtrace_frame_data_t>::iterator iterator;
- iterator begin() { return frames_.begin(); }
- iterator end() { return frames_.end(); }
-
- typedef std::vector<backtrace_frame_data_t>::const_iterator const_iterator;
- const_iterator begin() const { return frames_.begin(); }
- const_iterator end() const { return frames_.end(); }
-
- BacktraceMap* GetMap() { return map_; }
-
- BacktraceUnwindError GetError() { return error_; }
-
- std::string GetErrorString(BacktraceUnwindError error);
-
-protected:
- Backtrace(pid_t pid, pid_t tid, BacktraceMap* map);
-
- // The name returned is not demangled, GetFunctionName() takes care of
- // demangling the name.
- virtual std::string GetFunctionNameRaw(uintptr_t pc, uintptr_t* offset) = 0;
-
- virtual bool VerifyReadWordArgs(uintptr_t ptr, word_t* out_value);
-
- bool BuildMap();
-
- pid_t pid_;
- pid_t tid_;
-
- BacktraceMap* map_;
- bool map_shared_;
-
- std::vector<backtrace_frame_data_t> frames_;
-
- BacktraceUnwindError error_;
-};
-
-#endif // _BACKTRACE_BACKTRACE_H
diff --git a/include/backtrace/BacktraceMap.h b/include/backtrace/BacktraceMap.h
deleted file mode 100644
index 8ab0dfabb..000000000
--- a/include/backtrace/BacktraceMap.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2014 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 _BACKTRACE_BACKTRACE_MAP_H
-#define _BACKTRACE_BACKTRACE_MAP_H
-
-#include <stdint.h>
-#include <sys/types.h>
-#ifdef _WIN32
-// MINGW does not define these constants.
-#define PROT_NONE 0
-#define PROT_READ 0x1
-#define PROT_WRITE 0x2
-#define PROT_EXEC 0x4
-#else
-#include <sys/mman.h>
-#endif
-
-#include <deque>
-#include <string>
-#include <vector>
-
-// Special flag to indicate a map is in /dev/. However, a map in
-// /dev/ashmem/... does not set this flag.
-static constexpr int PROT_DEVICE_MAP = 0x8000;
-
-struct backtrace_map_t {
- uintptr_t start = 0;
- uintptr_t end = 0;
- uintptr_t offset = 0;
- uintptr_t load_base = 0;
- int flags = 0;
- std::string name;
-};
-
-class BacktraceMap {
-public:
- // 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);
-
- static BacktraceMap* Create(pid_t pid, const std::vector<backtrace_map_t>& maps);
-
- virtual ~BacktraceMap();
-
- // Fill in the map data structure for the given address.
- virtual void FillIn(uintptr_t addr, backtrace_map_t* map);
-
- // The flags returned are the same flags as used by the mmap call.
- // The values are PROT_*.
- int GetFlags(uintptr_t pc) {
- backtrace_map_t map;
- FillIn(pc, &map);
- if (IsValid(map)) {
- return map.flags;
- }
- return PROT_NONE;
- }
-
- bool IsReadable(uintptr_t pc) { return GetFlags(pc) & PROT_READ; }
- bool IsWritable(uintptr_t pc) { return GetFlags(pc) & PROT_WRITE; }
- bool IsExecutable(uintptr_t pc) { return GetFlags(pc) & PROT_EXEC; }
-
- // In order to use the iterators on this object, a caller must
- // call the LockIterator and UnlockIterator function to guarantee
- // that the data does not change while it's being used.
- virtual void LockIterator() {}
- virtual void UnlockIterator() {}
-
- typedef std::deque<backtrace_map_t>::iterator iterator;
- iterator begin() { return maps_.begin(); }
- iterator end() { return maps_.end(); }
-
- typedef std::deque<backtrace_map_t>::const_iterator const_iterator;
- const_iterator begin() const { return maps_.begin(); }
- const_iterator end() const { return maps_.end(); }
-
- virtual bool Build();
-
- static inline bool IsValid(const backtrace_map_t& map) {
- return map.end > 0;
- }
-
- static uintptr_t GetRelativePc(const backtrace_map_t& map, uintptr_t pc) {
- if (IsValid(map)) {
- return pc - map.start + map.load_base;
- } else {
- return pc;
- }
- }
-
-protected:
- BacktraceMap(pid_t pid);
-
- virtual bool ParseLine(const char* line, backtrace_map_t* map);
-
- std::deque<backtrace_map_t> maps_;
- pid_t pid_;
-};
-
-class ScopedBacktraceMapIteratorLock {
-public:
- explicit ScopedBacktraceMapIteratorLock(BacktraceMap* map) : map_(map) {
- map->LockIterator();
- }
-
- ~ScopedBacktraceMapIteratorLock() {
- map_->UnlockIterator();
- }
-
-private:
- BacktraceMap* map_;
-};
-
-#endif // _BACKTRACE_BACKTRACE_MAP_H
diff --git a/include/backtrace/backtrace_constants.h b/include/backtrace/backtrace_constants.h
deleted file mode 100644
index f8c15755f..000000000
--- a/include/backtrace/backtrace_constants.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2014 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 _BACKTRACE_BACKTRACE_CONSTANTS_H
-#define _BACKTRACE_BACKTRACE_CONSTANTS_H
-
-// When the pid to be traced is set to this value, then trace the current
-// process. If the tid value is not BACKTRACE_NO_TID, then the specified
-// thread from the current process will be traced.
-#define BACKTRACE_CURRENT_PROCESS -1
-// When the tid to be traced is set to this value, then trace the specified
-// current thread of the specified pid.
-#define BACKTRACE_CURRENT_THREAD -1
-
-#define MAX_BACKTRACE_FRAMES 64
-
-#endif // _BACKTRACE_BACKTRACE_CONSTANTS_H