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> 23053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown 24053b865412d1982ad1dc0e840898d82527deeb99Jeff Browntypedef struct { 25053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown /* tombstone file descriptor */ 26053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown int tfd; 27053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown /* if true, does not log anything to the Android logcat */ 28053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown bool quiet; 29053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown} log_t; 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 3113e715b491e876865e752a3a69dd6f347049a488Jeff Brown/* Log information onto the tombstone. */ 32053b865412d1982ad1dc0e840898d82527deeb99Jeff Brownvoid _LOG(log_t* log, bool in_tombstone_only, const char *fmt, ...) 3313e715b491e876865e752a3a69dd6f347049a488Jeff Brown __attribute__ ((format(printf, 3, 4))); 34136dcc5ce628a1ba600a6818e5cb24d5f15eb016Andy McFadden 35053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#define LOG(fmt...) _LOG(NULL, 0, fmt) 362c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner 372c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner/* Set to 1 for normal debug traces */ 38849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#if 0 39053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#define XLOG(fmt...) _LOG(NULL, 0, fmt) 40849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#else 41849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#define XLOG(fmt...) do {} while(0) 42849249064cae9c1bb23b0204b5d35b832567801eBruce Beare#endif 43849249064cae9c1bb23b0204b5d35b832567801eBruce Beare 442c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner/* Set to 1 for chatty debug traces. Includes all resolved dynamic symbols */ 452c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#if 0 46053b865412d1982ad1dc0e840898d82527deeb99Jeff Brown#define XLOG2(fmt...) _LOG(NULL, 0, fmt) 472c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#else 482c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#define XLOG2(fmt...) do {} while(0) 492c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner#endif 502c259914a0c5d49a3fcb525a75f4817a3a99a6c8David 'Digit' Turner 51053b865412d1982ad1dc0e840898d82527deeb99Jeff Brownint wait_for_signal(pid_t tid, int* total_sleep_time_usec); 52053b865412d1982ad1dc0e840898d82527deeb99Jeff Brownvoid wait_for_stop(pid_t tid, int* total_sleep_time_usec); 5313e715b491e876865e752a3a69dd6f347049a488Jeff Brown 5413e715b491e876865e752a3a69dd6f347049a488Jeff Brown#endif // _DEBUGGERD_UTILITY_H 55