| /* 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 __utility_h | |
| #define __utility_h | |
| #include <stddef.h> | |
| #include <stdbool.h> | |
| #include "symbol_table.h" | |
| #ifndef PT_ARM_EXIDX | |
| #define PT_ARM_EXIDX 0x70000001 /* .ARM.exidx segment */ | |
| #endif | |
| #define STACK_CONTENT_DEPTH 32 | |
| typedef struct mapinfo { | |
| struct mapinfo *next; | |
| unsigned start; | |
| unsigned end; | |
| unsigned exidx_start; | |
| unsigned exidx_end; | |
| struct symbol_table *symbols; | |
| bool isExecutable; | |
| char name[]; | |
| } mapinfo; | |
| /* Get a word from pid using ptrace. The result is the return value. */ | |
| extern int get_remote_word(int pid, void *src); | |
| /* Handy routine to read aggregated data from pid using ptrace. The read | |
| * values are written to the dest locations directly. | |
| */ | |
| extern void get_remote_struct(int pid, void *src, void *dst, size_t size); | |
| /* Find the containing map for the pc */ | |
| const mapinfo *pc_to_mapinfo (mapinfo *mi, unsigned pc, unsigned *rel_pc); | |
| /* Map a pc address to the name of the containing ELF file */ | |
| const char *map_to_name(mapinfo *mi, unsigned pc, const char* def); | |
| /* Log information onto the tombstone */ | |
| extern void _LOG(int tfd, bool in_tombstone_only, const char *fmt, ...); | |
| /* Determine whether si_addr is valid for this signal */ | |
| bool signal_has_address(int sig); | |
| #define LOG(fmt...) _LOG(-1, 0, fmt) | |
| /* Set to 1 for normal debug traces */ | |
| #if 0 | |
| #define XLOG(fmt...) _LOG(-1, 0, fmt) | |
| #else | |
| #define XLOG(fmt...) do {} while(0) | |
| #endif | |
| /* Set to 1 for chatty debug traces. Includes all resolved dynamic symbols */ | |
| #if 0 | |
| #define XLOG2(fmt...) _LOG(-1, 0, fmt) | |
| #else | |
| #define XLOG2(fmt...) do {} while(0) | |
| #endif | |
| #endif |