blob: 1ea51929aa0e08c8ecd6dcfeebd20f32216f6583 [file] [log] [blame]
njn132bfcc2005-06-04 19:16:06 +00001
2/*--------------------------------------------------------------------*/
3/*--- Assertions, etc. pub_core_libcassert.h ---*/
4/*--------------------------------------------------------------------*/
5
6/*
7 This file is part of Valgrind, a dynamic binary instrumentation
8 framework.
9
Elliott Hughesed398002017-06-21 14:41:24 -070010 Copyright (C) 2000-2017 Julian Seward
njn132bfcc2005-06-04 19:16:06 +000011 jseward@acm.org
12
13 This program is free software; you can redistribute it and/or
14 modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation; either version 2 of the
16 License, or (at your option) any later version.
17
18 This program is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26 02111-1307, USA.
27
28 The GNU General Public License is contained in the file COPYING.
29*/
30
31#ifndef __PUB_CORE_LIBCASSERT_H
32#define __PUB_CORE_LIBCASSERT_H
33
34//--------------------------------------------------------------------
35// PURPOSE: This module contains all the libc code related to assertions,
36// panics and aborting.
37//--------------------------------------------------------------------
38
39#include "pub_tool_libcassert.h"
florian535fb1b2013-09-15 13:54:34 +000040#include "pub_core_basics.h" // UnwindStartRegs
njn132bfcc2005-06-04 19:16:06 +000041
42// Useful for making failing stubs, when certain things haven't yet been
43// implemented.
44#define I_die_here \
45 VG_(assert_fail) (/*isCore*//*BOGUS*/True, \
46 "Unimplemented functionality", \
47 __FILE__, __LINE__, __PRETTY_FUNCTION__, \
48 "valgrind", VG_BUGS_TO, "")
49
50#define vg_assert(expr) \
sewardj4ee9c562011-05-09 21:54:44 +000051 ((void) (LIKELY(expr) ? 0 : \
njn132bfcc2005-06-04 19:16:06 +000052 (VG_(assert_fail) (/*isCore*/True, #expr, \
53 __FILE__, __LINE__, __PRETTY_FUNCTION__, \
54 ""), \
55 0)))
56
57#define vg_assert2(expr, format, args...) \
sewardj4ee9c562011-05-09 21:54:44 +000058 ((void) (LIKELY(expr) ? 0 : \
njn132bfcc2005-06-04 19:16:06 +000059 (VG_(assert_fail) (/*isCore*/True, #expr, \
60 __FILE__, __LINE__, __PRETTY_FUNCTION__, \
61 format, ##args), \
62 0)))
63
64__attribute__ ((__noreturn__))
florianbbd9a212012-10-14 00:16:28 +000065extern void VG_(core_panic) ( const HChar* str );
njn132bfcc2005-06-04 19:16:06 +000066__attribute__ ((__noreturn__))
florian518850b2014-10-22 22:25:30 +000067extern void VG_(core_panic_at) ( const HChar* str, const UnwindStartRegs* );
njn132bfcc2005-06-04 19:16:06 +000068
philippe180a7502014-04-20 13:41:10 +000069/* Exits with status as client exit code. */
70extern void VG_(client_exit)( Int status );
71
florian421c26e2014-07-24 12:46:28 +000072/* Lightweight exit without any dependencies. */
73__attribute__ ((__noreturn__))
74extern void VG_(exit_now)( Int status );
75
njn132bfcc2005-06-04 19:16:06 +000076/* Called when some unhandleable client behaviour is detected.
77 Prints a msg and aborts. */
sewardj8eb8bab2015-07-21 14:44:28 +000078extern void VG_(unimplemented) ( const HChar* format, ... )
79 __attribute__((__noreturn__))
80 PRINTF_CHECK(1, 2);
njn132bfcc2005-06-04 19:16:06 +000081
philippe4f6f3362014-04-19 00:25:54 +000082/* Show the state of various threads related information, such
83 as the guest stacktrace for each thread.
84 Mostly for debugging V.
85 The following activates optional output:
86 host_stacktrace : shows the host stacktrace.
philippe38a74d22014-08-29 22:53:19 +000087 stack_usage True means:
88 shows how much of the valgrind stack was used.
89 shows the client stack range
philippe4f6f3362014-04-19 00:25:54 +000090 exited_thread_slots : show information for thread slots that were used
91 but the thread has now exited. */
92extern void VG_(show_sched_status) ( Bool host_stacktrace,
philippe38a74d22014-08-29 22:53:19 +000093 Bool stack_usage,
philippe4f6f3362014-04-19 00:25:54 +000094 Bool exited_threads);
sewardj745fc452006-10-17 02:03:11 +000095
njn132bfcc2005-06-04 19:16:06 +000096#endif // __PUB_CORE_LIBCASSERT_H
97
98/*--------------------------------------------------------------------*/
99/*--- end ---*/
100/*--------------------------------------------------------------------*/