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