14c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner/* Copyright (C) 2008 The Android Open Source Project 24c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner** 34c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner** This software is licensed under the terms of the GNU General Public 44c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner** License version 2, as published by the Free Software Foundation, and 54c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner** may be copied, distributed, and modified under those terms. 64c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner** 74c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner** This program is distributed in the hope that it will be useful, 84c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner** but WITHOUT ANY WARRANTY; without even the implied warranty of 94c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 104c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner** GNU General Public License for more details. 114c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner*/ 124c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner#ifndef ANDROID_UTILS_PANIC_H 134c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner#define ANDROID_UTILS_PANIC_H 144c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner 154c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner#include <stdarg.h> 164c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner 17af81d7432594d8459c4fb9f76c5e8a981f69a94cDavid 'Digit' Turner#include "android/utils/compiler.h" 18af81d7432594d8459c4fb9f76c5e8a981f69a94cDavid 'Digit' Turner 19af81d7432594d8459c4fb9f76c5e8a981f69a94cDavid 'Digit' TurnerANDROID_BEGIN_HEADER 20af81d7432594d8459c4fb9f76c5e8a981f69a94cDavid 'Digit' Turner 214c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner/* Print formatted panic message and halts the process */ 224c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turnervoid __attribute__((noreturn)) android_panic ( const char* fmt, ... ); 234c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner 244c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner/* Variant of android_vpanic which take va_list formating arguments */ 254c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turnervoid __attribute__((noreturn)) android_vpanic( const char* fmt, va_list args ); 264c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner 274c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner/* Convenience macro */ 284c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner#define APANIC(...) android_panic(__VA_ARGS__) 294c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner 304c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turnertypedef void (*APanicHandlerFunc)(const char*, va_list) __attribute__((noreturn)); 314c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner 324c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner/* Register a new panic handler. This should only be used for unit-testing */ 334c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turnervoid android_panic_registerHandler( APanicHandlerFunc handler ); 34af81d7432594d8459c4fb9f76c5e8a981f69a94cDavid 'Digit' Turner 35af81d7432594d8459c4fb9f76c5e8a981f69a94cDavid 'Digit' TurnerANDROID_END_HEADER 364c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner 374c0f745dc80d392fddea23eb8d4d7d86425ce0c6David 'Digit' Turner#endif /* ANDROID_UTILS_PANIC_H */ 38