18f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes/*
28f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * Copyright (C) 2010 The Android Open Source Project
38f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * All rights reserved.
48f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes *
58f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * Redistribution and use in source and binary forms, with or without
68f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * modification, are permitted provided that the following conditions
78f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * are met:
88f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes *  * Redistributions of source code must retain the above copyright
98f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes *    notice, this list of conditions and the following disclaimer.
108f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes *  * Redistributions in binary form must reproduce the above copyright
118f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes *    notice, this list of conditions and the following disclaimer in
128f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes *    the documentation and/or other materials provided with the
138f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes *    distribution.
148f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes *
158f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
168f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
178f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
188f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
198f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
208f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
218f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
228f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
238f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
248f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
258f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
268f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes * SUCH DAMAGE.
278f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes */
288f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
298f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes#ifndef _LIBC_LOGGING_H
308f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes#define _LIBC_LOGGING_H
318f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
328f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes#include <sys/cdefs.h>
338f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes#include <stdarg.h>
348f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes#include <stddef.h>
358f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes#include <stdint.h>
368f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
378f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes__BEGIN_DECLS
388f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
3959a13c122ebc4191583b67c846a95d690dcda5cfChristopher Ferris#include "libc_events.h"
408f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
418f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughesenum {
428f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes  ANDROID_LOG_UNKNOWN = 0,
438f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes  ANDROID_LOG_DEFAULT,    /* only for SetMinPriority() */
448f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
458f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes  ANDROID_LOG_VERBOSE,
468f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes  ANDROID_LOG_DEBUG,
478f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes  ANDROID_LOG_INFO,
488f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes  ANDROID_LOG_WARN,
498f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes  ANDROID_LOG_ERROR,
508f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes  ANDROID_LOG_FATAL,
518f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
528f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes  ANDROID_LOG_SILENT,     /* only for SetMinPriority(); must be last */
538f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes};
548f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
550336e35368aa161f1fed04ccde39553db4740b97Mark Salyzynenum {
56ae0a62b014ece4bb9a0f8872738f58e7aec8378dElliott Hughes  LOG_ID_MIN = 0,
570336e35368aa161f1fed04ccde39553db4740b97Mark Salyzyn
58ae0a62b014ece4bb9a0f8872738f58e7aec8378dElliott Hughes  LOG_ID_MAIN = 0,
59ae0a62b014ece4bb9a0f8872738f58e7aec8378dElliott Hughes  LOG_ID_RADIO = 1,
60ae0a62b014ece4bb9a0f8872738f58e7aec8378dElliott Hughes  LOG_ID_EVENTS = 2,
61ae0a62b014ece4bb9a0f8872738f58e7aec8378dElliott Hughes  LOG_ID_SYSTEM = 3,
62ae0a62b014ece4bb9a0f8872738f58e7aec8378dElliott Hughes  LOG_ID_CRASH = 4,
630336e35368aa161f1fed04ccde39553db4740b97Mark Salyzyn
64ae0a62b014ece4bb9a0f8872738f58e7aec8378dElliott Hughes  LOG_ID_MAX
650336e35368aa161f1fed04ccde39553db4740b97Mark Salyzyn};
660336e35368aa161f1fed04ccde39553db4740b97Mark Salyzyn
670d787c1fa18c6a1f29ef9840e28a68cf077be1deElliott Hughesstruct abort_msg_t {
680d787c1fa18c6a1f29ef9840e28a68cf077be1deElliott Hughes  size_t size;
690d787c1fa18c6a1f29ef9840e28a68cf077be1deElliott Hughes  char msg[0];
700d787c1fa18c6a1f29ef9840e28a68cf077be1deElliott Hughes};
710d787c1fa18c6a1f29ef9840e28a68cf077be1deElliott Hughes
720d787c1fa18c6a1f29ef9840e28a68cf077be1deElliott Hughes//
730d787c1fa18c6a1f29ef9840e28a68cf077be1deElliott Hughes// Formats a message to the log (priority 'fatal'), then aborts.
740d787c1fa18c6a1f29ef9840e28a68cf077be1deElliott Hughes//
750d787c1fa18c6a1f29ef9840e28a68cf077be1deElliott Hughes
762e3b7108b5b3d3f3a4a0fb369016e854bcf92212Elliott Hughes__LIBC_HIDDEN__ __noreturn void __libc_fatal(const char* format, ...) __printflike(1, 2);
770d787c1fa18c6a1f29ef9840e28a68cf077be1deElliott Hughes
788f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes//
7961e699a133a4807fe878a6cb0d7190d7c96e21f8Elliott Hughes// Formats a message to the log (priority 'fatal'), but doesn't abort.
8061e699a133a4807fe878a6cb0d7190d7c96e21f8Elliott Hughes// Used by the malloc implementation to ensure that debuggerd dumps memory
8161e699a133a4807fe878a6cb0d7190d7c96e21f8Elliott Hughes// around the bad address.
8261e699a133a4807fe878a6cb0d7190d7c96e21f8Elliott Hughes//
8361e699a133a4807fe878a6cb0d7190d7c96e21f8Elliott Hughes
8461e699a133a4807fe878a6cb0d7190d7c96e21f8Elliott Hughes__LIBC_HIDDEN__ void __libc_fatal_no_abort(const char* format, ...)
8561e699a133a4807fe878a6cb0d7190d7c96e21f8Elliott Hughes    __printflike(1, 2);
8661e699a133a4807fe878a6cb0d7190d7c96e21f8Elliott Hughes
8761e699a133a4807fe878a6cb0d7190d7c96e21f8Elliott Hughes//
888f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes// Formatting routines for the C library's internal debugging.
8991570ce987ef93f9ba2fa663a5fee1bd2525a2baElliott Hughes// Unlike the usual alternatives, these don't allocate, and they don't drag in all of stdio.
908f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes//
918f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
928f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes__LIBC_HIDDEN__ int __libc_format_buffer(char* buffer, size_t buffer_size, const char* format, ...)
93d04c18397946f87ac4495351537c31a3d67257daElliott Hughes    __printflike(3, 4);
948f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
958f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes__LIBC_HIDDEN__ int __libc_format_fd(int fd, const char* format, ...)
96d04c18397946f87ac4495351537c31a3d67257daElliott Hughes    __printflike(2, 3);
978f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
988f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes__LIBC_HIDDEN__ int __libc_format_log(int priority, const char* tag, const char* format, ...)
99d04c18397946f87ac4495351537c31a3d67257daElliott Hughes    __printflike(3, 4);
1008f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
1018f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes__LIBC_HIDDEN__ int __libc_format_log_va_list(int priority, const char* tag, const char* format,
1028f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes                                              va_list ap);
1038f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
1048f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes//
1058f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes// Event logging.
1068f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes//
1078f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
1088f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes__LIBC_HIDDEN__ void __libc_android_log_event_int(int32_t tag, int value);
1098f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes__LIBC_HIDDEN__ void __libc_android_log_event_uid(int32_t tag);
1108f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
1118f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes__LIBC_HIDDEN__ __noreturn void __fortify_chk_fail(const char* msg, uint32_t event_tag);
1128f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
1138f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes__END_DECLS
1148f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes
1158f2a5a0b40fc82126c691d5c30131d908772aab7Elliott Hughes#endif
116