You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.3 KiB
88 lines
2.3 KiB
/* system/debuggerd/utility.h |
|
** |
|
** Copyright 2008, 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 _DEBUGGERD_UTILITY_H |
|
#define _DEBUGGERD_UTILITY_H |
|
|
|
#include <signal.h> |
|
#include <stdbool.h> |
|
#include <sys/types.h> |
|
|
|
#include <string> |
|
|
|
#include <backtrace/Backtrace.h> |
|
|
|
// Figure out the abi based on defined macros. |
|
#if defined(__arm__) |
|
#define ABI_STRING "arm" |
|
#elif defined(__aarch64__) |
|
#define ABI_STRING "arm64" |
|
#elif defined(__mips__) && !defined(__LP64__) |
|
#define ABI_STRING "mips" |
|
#elif defined(__mips__) && defined(__LP64__) |
|
#define ABI_STRING "mips64" |
|
#elif defined(__i386__) |
|
#define ABI_STRING "x86" |
|
#elif defined(__x86_64__) |
|
#define ABI_STRING "x86_64" |
|
#else |
|
#error "Unsupported ABI" |
|
#endif |
|
|
|
|
|
struct log_t{ |
|
// Tombstone file descriptor. |
|
int tfd; |
|
// Data to be sent to the Activity Manager. |
|
std::string* amfd_data; |
|
// The tid of the thread that crashed. |
|
pid_t crashed_tid; |
|
// The tid of the thread we are currently working with. |
|
pid_t current_tid; |
|
// logd daemon crash, can block asking for logcat data, allow suppression. |
|
bool should_retrieve_logcat; |
|
|
|
log_t() |
|
: tfd(-1), amfd_data(nullptr), crashed_tid(-1), current_tid(-1), |
|
should_retrieve_logcat(true) {} |
|
}; |
|
|
|
// List of types of logs to simplify the logging decision in _LOG |
|
enum logtype { |
|
HEADER, |
|
THREAD, |
|
REGISTERS, |
|
FP_REGISTERS, |
|
BACKTRACE, |
|
MAPS, |
|
MEMORY, |
|
STACK, |
|
LOGS, |
|
OPEN_FILES |
|
}; |
|
|
|
// Log information onto the tombstone. |
|
void _LOG(log_t* log, logtype ltype, const char *fmt, ...) |
|
__attribute__ ((format(printf, 3, 4))); |
|
|
|
bool wait_for_signal(pid_t tid, siginfo_t* siginfo); |
|
|
|
void dump_memory(log_t* log, Backtrace* backtrace, uintptr_t addr, const char* fmt, ...); |
|
|
|
void read_with_default(const char* path, char* buf, size_t len, const char* default_value); |
|
|
|
#endif // _DEBUGGERD_UTILITY_H
|
|
|