1053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown/* 2053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * Copyright (C) 2012 The Android Open Source Project 3053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * 4053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * you may not use this file except in compliance with the License. 6053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * You may obtain a copy of the License at 7053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * 8053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * 10053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * Unless required by applicable law or agreed to in writing, software 11053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * See the License for the specific language governing permissions and 14053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * limitations under the License. 15053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown */ 16053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 17053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#ifndef __CUTILS_DEBUGGER_H 18053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#define __CUTILS_DEBUGGER_H 19053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 20053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#include <sys/types.h> 21053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 22053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#ifdef __cplusplus 23053b865412d1982ad1dc0e840898d82527deeb99Jeff Brownextern "C" { 24053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#endif 25053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 26a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris#define DEBUGGER32_SOCKET_NAME "android:debuggerd" 27a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris#define DEBUGGER64_SOCKET_NAME "android:debuggerd64" 28a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris 29a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris#if defined(__LP64__) 30a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris#define DEBUGGER_SOCKET_NAME DEBUGGER64_SOCKET_NAME 31e9edf7a0efd8c62dacab7bf765c8037d8a94c3bbElliott Hughes#else 32a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris#define DEBUGGER_SOCKET_NAME DEBUGGER32_SOCKET_NAME 33e9edf7a0efd8c62dacab7bf765c8037d8a94c3bbElliott Hughes#endif 34053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 35053b865412d1982ad1dc0e840898d82527deeb99Jeff Browntypedef enum { 36053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown // dump a crash 37053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown DEBUGGER_ACTION_CRASH, 38053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown // dump a tombstone file 39053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown DEBUGGER_ACTION_DUMP_TOMBSTONE, 40053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown // dump a backtrace only back to the socket 41053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown DEBUGGER_ACTION_DUMP_BACKTRACE, 42053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown} debugger_action_t; 43053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 44053b865412d1982ad1dc0e840898d82527deeb99Jeff Browntypedef struct { 45053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown debugger_action_t action; 46053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown pid_t tid; 47707b8bbe1800dbebd932f54e86347563ee86c36eElliott Hughes uintptr_t abort_msg_address; 48855fcc3114c20ff9fd286fe1723d1413fec9685aElliott Hughes int32_t original_si_code; 49053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown} debugger_msg_t; 50053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 51a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris#if defined(__LP64__) 52a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris// For a 64 bit process to contact the 32 bit debuggerd. 53a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferristypedef struct { 54a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris debugger_action_t action; 55a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris pid_t tid; 56a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris uint32_t abort_msg_address; 57a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris int32_t original_si_code; 58a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris} debugger32_msg_t; 59a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris#endif 60a9fa7b87f1aefd7b96f749a545d3385ad384c12bChristopher Ferris 61053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown/* Dumps a process backtrace, registers, and stack to a tombstone file (requires root). 62053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * Stores the tombstone path in the provided buffer. 63053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * Returns 0 on success, -1 on error. 64053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown */ 65053b865412d1982ad1dc0e840898d82527deeb99Jeff Brownint dump_tombstone(pid_t tid, char* pathbuf, size_t pathlen); 66053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 675f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris/* Dumps a process backtrace, registers, and stack to a tombstone file (requires root). 685f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris * Stores the tombstone path in the provided buffer. 695f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris * If reading debugger data from debuggerd ever takes longer than timeout_secs 705f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris * seconds, then stop and return an error. 715f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris * Returns 0 on success, -1 on error. 725f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris */ 735f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferrisint dump_tombstone_timeout(pid_t tid, char* pathbuf, size_t pathlen, int timeout_secs); 745f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris 75053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown/* Dumps a process backtrace only to the specified file (requires root). 76053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown * Returns 0 on success, -1 on error. 77053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown */ 78053b865412d1982ad1dc0e840898d82527deeb99Jeff Brownint dump_backtrace_to_file(pid_t tid, int fd); 79053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 805f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris/* Dumps a process backtrace only to the specified file (requires root). 815f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris * If reading debugger data from debuggerd ever takes longer than timeout_secs 825f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris * seconds, then stop and return an error. 835f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris * Returns 0 on success, -1 on error. 845f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris */ 855f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferrisint dump_backtrace_to_file_timeout(pid_t tid, int fd, int timeout_secs); 865f2ff6a9106083e2a79b8600a0bf6a5341c6ca38Christopher Ferris 87053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#ifdef __cplusplus 88053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown} 89053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#endif 90053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 91053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#endif /* __CUTILS_DEBUGGER_H */ 92