utility.h revision 13e715b491e876865e752a3a69dd6f347049a488
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 1813e715b491e876865e752a3a69dd6f347049a488Jeff Brown#ifndef _DEBUGGERD_UTILITY_H 1913e715b491e876865e752a3a69dd6f347049a488Jeff Brown#define _DEBUGGERD_UTILITY_H 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stddef.h> 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdbool.h> 2313e715b491e876865e752a3a69dd6f347049a488Jeff Brown#include <sys/types.h> 2413e715b491e876865e752a3a69dd6f347049a488Jeff Brown#include <corkscrew/backtrace.h> 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 2613e715b491e876865e752a3a69dd6f347049a488Jeff Brown/* Log information onto the tombstone. */ 2713e715b491e876865e752a3a69dd6f347049a488Jeff Brownvoid _LOG(int tfd, bool in_tombstone_only, const char *fmt, ...) 2813e715b491e876865e752a3a69dd6f347049a488Jeff Brown __attribute__ ((format(printf, 3, 4))); 29136dcc5ce628a1ba600a6818e5cb24d5f15eb016Andy McFadden 30849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#define LOG(fmt...) _LOG(-1, 0, fmt) 312c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner 322c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner/* Set to 1 for normal debug traces */ 33849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#if 0 34849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#define XLOG(fmt...) _LOG(-1, 0, fmt) 35849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#else 36849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#define XLOG(fmt...) do {} while(0) 37849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#endif 38849249064cae9c1bb23b0204b5d35b832567801eBruce Beare 392c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner/* Set to 1 for chatty debug traces. Includes all resolved dynamic symbols */ 402c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#if 0 412c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#define XLOG2(fmt...) _LOG(-1, 0, fmt) 422c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#else 432c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#define XLOG2(fmt...) do {} while(0) 442c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#endif 452c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner 4613e715b491e876865e752a3a69dd6f347049a488Jeff Brown/* 4713e715b491e876865e752a3a69dd6f347049a488Jeff Brown * Returns true if the specified signal has an associated address. 4813e715b491e876865e752a3a69dd6f347049a488Jeff Brown * (i.e. it sets siginfo_t.si_addr). 4913e715b491e876865e752a3a69dd6f347049a488Jeff Brown */ 5013e715b491e876865e752a3a69dd6f347049a488Jeff Brownbool signal_has_address(int sig); 5113e715b491e876865e752a3a69dd6f347049a488Jeff Brown 5213e715b491e876865e752a3a69dd6f347049a488Jeff Brown/* 5313e715b491e876865e752a3a69dd6f347049a488Jeff Brown * Dumps the backtrace and contents of the stack. 5413e715b491e876865e752a3a69dd6f347049a488Jeff Brown */ 5513e715b491e876865e752a3a69dd6f347049a488Jeff Brownvoid dump_backtrace_and_stack(ptrace_context_t* context, int tfd, pid_t pid, bool at_fault); 5613e715b491e876865e752a3a69dd6f347049a488Jeff Brown 5713e715b491e876865e752a3a69dd6f347049a488Jeff Brown/* 5813e715b491e876865e752a3a69dd6f347049a488Jeff Brown * Dumps a few bytes of memory, starting a bit before and ending a bit 5913e715b491e876865e752a3a69dd6f347049a488Jeff Brown * after the specified address. 6013e715b491e876865e752a3a69dd6f347049a488Jeff Brown */ 6113e715b491e876865e752a3a69dd6f347049a488Jeff Brownvoid dump_memory(int tfd, pid_t tid, uintptr_t addr, bool at_fault); 6213e715b491e876865e752a3a69dd6f347049a488Jeff Brown 6313e715b491e876865e752a3a69dd6f347049a488Jeff Brown/* 6413e715b491e876865e752a3a69dd6f347049a488Jeff Brown * If this isn't clearly a null pointer dereference, dump the 6513e715b491e876865e752a3a69dd6f347049a488Jeff Brown * /proc/maps entries near the fault address. 6613e715b491e876865e752a3a69dd6f347049a488Jeff Brown * 6713e715b491e876865e752a3a69dd6f347049a488Jeff Brown * This only makes sense to do on the thread that crashed. 6813e715b491e876865e752a3a69dd6f347049a488Jeff Brown */ 6913e715b491e876865e752a3a69dd6f347049a488Jeff Brownvoid dump_nearby_maps(ptrace_context_t* context, int tfd, pid_t tid); 7013e715b491e876865e752a3a69dd6f347049a488Jeff Brown 7113e715b491e876865e752a3a69dd6f347049a488Jeff Brown 7213e715b491e876865e752a3a69dd6f347049a488Jeff Brown#endif // _DEBUGGERD_UTILITY_H 73