utility.h revision 2c259914a0c5d49a3fcb525a75f4817a3a99a6c8
1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* system/debuggerd/utility.h 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** Copyright 2008, The Android Open Source Project 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** you may not use this file except in compliance with the License. 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** You may obtain a copy of the License at 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** See the License for the specific language governing permissions and 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** limitations under the License. 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/ 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifndef __utility_h 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define __utility_h 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stddef.h> 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdbool.h> 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 24ae7b91b68008ab09635a97a18e7d07a35e8404aaMeng Hu#include "symbol_table.h" 25ae7b91b68008ab09635a97a18e7d07a35e8404aaMeng Hu 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifndef PT_ARM_EXIDX 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define PT_ARM_EXIDX 0x70000001 /* .ARM.exidx segment */ 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define STACK_CONTENT_DEPTH 32 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct mapinfo { 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct mapinfo *next; 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned start; 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned end; 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned exidx_start; 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned exidx_end; 38ae7b91b68008ab09635a97a18e7d07a35e8404aaMeng Hu struct symbol_table *symbols; 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char name[]; 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} mapinfo; 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Get a word from pid using ptrace. The result is the return value. */ 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int get_remote_word(int pid, void *src); 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Handy routine to read aggregated data from pid using ptrace. The read 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * values are written to the dest locations directly. 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern void get_remote_struct(int pid, void *src, void *dst, size_t size); 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Find the containing map for the pc */ 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst mapinfo *pc_to_mapinfo (mapinfo *mi, unsigned pc, unsigned *rel_pc); 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Map a pc address to the name of the containing ELF file */ 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst char *map_to_name(mapinfo *mi, unsigned pc, const char* def); 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Log information onto the tombstone */ 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern void _LOG(int tfd, bool in_tombstone_only, const char *fmt, ...); 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 59849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#define LOG(fmt...) _LOG(-1, 0, fmt) 602c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner 612c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner/* Set to 1 for normal debug traces */ 62849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#if 0 63849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#define XLOG(fmt...) _LOG(-1, 0, fmt) 64849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#else 65849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#define XLOG(fmt...) do {} while(0) 66849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#endif 67849249064cae9c1bb23b0204b5d35b832567801eBruce Beare 682c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner/* Set to 1 for chatty debug traces. Includes all resolved dynamic symbols */ 692c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#if 0 702c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#define XLOG2(fmt...) _LOG(-1, 0, fmt) 712c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#else 722c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#define XLOG2(fmt...) do {} while(0) 732c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#endif 742c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 76