#include "pub_tool_debuginfo.h"
#include "pub_tool_hashtable.h"
#include "pub_tool_libcbase.h"
+#include "pub_tool_libcassert.h"
#include "pub_tool_libcprint.h"
#include "pub_tool_mallocfree.h"
#include "pub_tool_options.h"
pub_core_execontext.h \
pub_core_hashtable.h \
pub_core_libcbase.h \
+ pub_core_libcassert.h \
pub_core_libcprint.h \
pub_core_main.h \
pub_core_mallocfree.h \
m_execontext.c \
m_hashtable.c \
m_libcbase.c \
+ m_libcassert.c \
m_libcprint.c \
m_main.c \
m_mallocfree.c \
#include "core.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_tooliface.h"
#include <sys/ptrace.h>
Exports of vg_mylibc.c
------------------------------------------------------------------ */
-// Useful for making failing stubs, when certain things haven't yet been
-// implemented.
-#define I_die_here \
- VG_(assert_fail) (/*isCore*//*BOGUS*/True, \
- "Unimplemented functionality", \
- __FILE__, __LINE__, __PRETTY_FUNCTION__, \
- "valgrind", VG_BUGS_TO, "")
-
-#define vg_assert(expr) \
- ((void) ((expr) ? 0 : \
- (VG_(assert_fail) (/*isCore*/True, VG_STRINGIFY(expr), \
- __FILE__, __LINE__, __PRETTY_FUNCTION__, \
- ""), \
- 0)))
-
-#define vg_assert2(expr, format, args...) \
- ((void) ((expr) ? 0 : \
- (VG_(assert_fail) (/*isCore*/True, VG_STRINGIFY(expr), \
- __FILE__, __LINE__, __PRETTY_FUNCTION__, \
- format, ##args), \
- 0)))
-
-__attribute__ ((__noreturn__))
-extern void VG_(core_panic) ( Char* str );
-__attribute__ ((__noreturn__))
-extern void VG_(core_panic_at) ( Char* str, Addr ip, Addr sp, Addr fp );
-
-/* Called when some unhandleable client behaviour is detected.
- Prints a msg and aborts. */
-extern void VG_(unimplemented) ( Char* msg )
- __attribute__((__noreturn__));
-
/* Tools use VG_(strdup)() which doesn't expose ArenaId */
extern Char* VG_(arena_strdup) ( ArenaId aid, const Char* s);
#include "core.h"
#include "pub_core_debuglog.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "pub_core_signals.h"
#include "core.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "pub_core_syscalls.h"
#include "core.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
/* Size of a smallish table used to read /proc/self/map entries. */
#include "core.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "priv_symtab.h"
#include "core.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "priv_symtab.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_demangle.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "pub_core_profile.h"
#include "pub_core_debuginfo.h"
#include "pub_core_debuglog.h" /* VG_(debugLog_vprintf) */
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_tooliface.h"
#include "priv_symtypes.h"
#include "core.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "ansidecl.h"
#include "dyn-string.h"
#include "demangle.h"
#include "safe-ctype.h"
#include "core.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_tool_libcprint.h"
/*#include <sys/types.h>
#include "core.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "ansidecl.h"
#include "dyn-string.h"
#include "pub_core_errormgr.h"
#include "pub_core_execontext.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_main.h" // for VG_(start_debugger)()
#include "pub_core_options.h"
#include "core.h"
#include "pub_core_execontext.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "pub_core_profile.h"
#include "core.h"
#include "pub_core_hashtable.h"
+#include "pub_core_libcassert.h"
/*--------------------------------------------------------------------*/
/*--- Declarations ---*/
--- /dev/null
+
+/*--------------------------------------------------------------------*/
+/*--- Assertions and panics. m_libcassert.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 Julian Seward
+ jseward@acm.org
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#include "core.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_libcprint.h"
+#include "pub_core_main.h"
+#include "pub_core_stacktrace.h"
+#include "pub_core_tooliface.h"
+
+/* ---------------------------------------------------------------------
+ Assertery.
+ ------------------------------------------------------------------ */
+
+#if defined(VGP_x86_linux)
+# define GET_REAL_SP_AND_FP(sp, fp) \
+ asm("movl %%esp, %0;" \
+ "movl %%ebp, %1;" \
+ : "=r" (sp),\
+ "=r" (fp));
+#elif defined(VGP_amd64_linux)
+# define GET_REAL_SP_AND_FP(sp, fp) \
+ asm("movq %%rsp, %0;" \
+ "movq %%rbp, %1;" \
+ : "=r" (sp),\
+ "=r" (fp));
+#else
+# error Unknown platform
+#endif
+
+__attribute__ ((noreturn))
+static void report_and_quit ( const Char* report, Addr ip, Addr sp, Addr fp )
+{
+ #define BACKTRACE_DEPTH 100 // nice and deep!
+ Addr stacktop, ips[BACKTRACE_DEPTH];
+ ThreadState *tst;
+
+ tst = VG_(get_ThreadState)( VG_(get_lwp_tid)(VG_(gettid)()) );
+
+ // If necessary, fake up an ExeContext which is of our actual real CPU
+ // state. Could cause problems if we got the panic/exception within the
+ // execontext/stack dump/symtab code. But it's better than nothing.
+ if (0 == ip && 0 == sp && 0 == fp) {
+ ip = (Addr)__builtin_return_address(0);
+ GET_REAL_SP_AND_FP(sp, fp);
+ }
+
+ stacktop = tst->os_state.valgrind_stack_base +
+ tst->os_state.valgrind_stack_szB;
+
+ VG_(get_StackTrace2)(ips, BACKTRACE_DEPTH, ip, sp, fp, sp, stacktop);
+ VG_(pp_StackTrace) (ips, BACKTRACE_DEPTH);
+
+ VG_(printf)("\nBasic block ctr is approximately %llu\n", VG_(bbs_done) );
+
+ VG_(pp_sched_status)();
+ VG_(printf)("\n");
+ VG_(printf)("Note: see also the FAQ.txt in the source distribution.\n");
+ VG_(printf)("It contains workarounds to several common problems.\n");
+ VG_(printf)("\n");
+ VG_(printf)("If that doesn't help, please report this bug to: %s\n\n",
+ report);
+ VG_(printf)("In the bug report, send all the above text, the valgrind\n");
+ VG_(printf)("version, and what Linux distro you are using. Thanks.\n\n");
+ VG_(exit)(1);
+
+ #undef BACKTRACE_DEPTH
+}
+
+void VG_(assert_fail) ( Bool isCore, const Char* expr, const Char* file,
+ Int line, const Char* fn, const HChar* format, ... )
+{
+ va_list vargs;
+ Char buf[256];
+ Char* bufptr = buf;
+ Char* component;
+ Char* bugs_to;
+
+ static Bool entered = False;
+ if (entered)
+ VG_(exit)(2);
+ entered = True;
+
+ va_start(vargs, format);
+ VG_(vsprintf) ( bufptr, format, vargs );
+ va_end(vargs);
+
+ if (isCore) {
+ component = "valgrind";
+ bugs_to = VG_BUGS_TO;
+ } else {
+ component = VG_(details).name;
+ bugs_to = VG_(details).bug_reports_to;
+ }
+
+ // Treat vg_assert2(0, "foo") specially, as a panicky abort
+ if (VG_STREQ(expr, "0")) {
+ VG_(printf)("\n%s: %s:%d (%s): the 'impossible' happened.\n",
+ component, file, line, fn, expr );
+ } else {
+ VG_(printf)("\n%s: %s:%d (%s): Assertion '%s' failed.\n",
+ component, file, line, fn, expr );
+ }
+ if (!VG_STREQ(buf, ""))
+ VG_(printf)("%s: %s\n", component, buf );
+
+ report_and_quit(bugs_to, 0,0,0);
+}
+
+__attribute__ ((noreturn))
+static void panic ( Char* name, Char* report, Char* str,
+ Addr ip, Addr sp, Addr fp )
+{
+ VG_(printf)("\n%s: the 'impossible' happened:\n %s\n", name, str);
+ report_and_quit(report, ip, sp, fp);
+}
+
+void VG_(core_panic_at) ( Char* str, Addr ip, Addr sp, Addr fp )
+{
+ panic("valgrind", VG_BUGS_TO, str, ip, sp, fp);
+}
+
+void VG_(core_panic) ( Char* str )
+{
+ VG_(core_panic_at)(str, 0,0,0);
+}
+
+void VG_(tool_panic) ( Char* str )
+{
+ panic(VG_(details).name, VG_(details).bug_reports_to, str, 0,0,0);
+}
+
+/* Print some helpful-ish text about unimplemented things, and give
+ up. */
+void VG_(unimplemented) ( Char* msg )
+{
+ VG_(message)(Vg_UserMsg, "");
+ VG_(message)(Vg_UserMsg,
+ "Valgrind detected that your program requires");
+ VG_(message)(Vg_UserMsg,
+ "the following unimplemented functionality:");
+ VG_(message)(Vg_UserMsg, " %s", msg);
+ VG_(message)(Vg_UserMsg,
+ "This may be because the functionality is hard to implement,");
+ VG_(message)(Vg_UserMsg,
+ "or because no reasonable program would behave this way,");
+ VG_(message)(Vg_UserMsg,
+ "or because nobody has yet needed it. In any case, let us know at");
+ VG_(message)(Vg_UserMsg,
+ "%s and/or try to work around the problem, if you can.", VG_BUGS_TO);
+ VG_(message)(Vg_UserMsg,
+ "");
+ VG_(message)(Vg_UserMsg,
+ "Valgrind has to exit now. Sorry. Bye!");
+ VG_(message)(Vg_UserMsg,
+ "");
+ VG_(pp_sched_status)();
+ VG_(exit)(1);
+}
+
+
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
+
#include "core.h"
#include "pub_core_debuglog.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "valgrind.h" // for RUNNING_ON_VALGRIND
#include "pub_core_errormgr.h"
#include "pub_core_execontext.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_main.h"
#include "pub_core_options.h"
#include "core.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "pub_core_profile.h"
*/
#include "core.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_profile.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_skiplist.h"
#include "pub_core_options.h"
#include "pub_core_dispatch.h"
#include "pub_core_errormgr.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_main.h"
#include "pub_core_options.h"
*/
#include "core.h"
+#include "pub_core_libcassert.h"
#include "priv_sema.h"
/*
#include "core.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "pub_core_sigframe.h"
#include "core.h"
#include "pub_core_aspacemgr.h" /* find_segment */
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "pub_core_sigframe.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_errormgr.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_main.h"
#include "pub_core_options.h"
#include "core.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_skiplist.h"
#include "core.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "pub_core_profile.h"
#include "ume.h" /* for jmp_with_stack */
#include "pub_core_debuglog.h"
#include "pub_core_aspacemgr.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_sigframe.h"
#include "pub_core_syscalls.h"
#include "core.h"
#include "pub_core_aspacemgr.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_tooliface.h"
#include "priv_syscalls.h"
#include "ume.h" /* for jmp_with_stack */
#include "pub_core_debuglog.h"
#include "pub_core_aspacemgr.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_sigframe.h"
#include "pub_core_syscalls.h"
#include "pub_core_debuglog.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_main.h"
#include "pub_core_profile.h"
#include "core.h"
#include "pub_core_tooliface.h"
+#include "pub_core_libcbase.h"
#include "pub_core_libcprint.h"
// The core/tool dictionary of functions (initially zeroed, as we want it)
/* static */
void VG_(sanity_check_needs) ( void)
{
-#define CHECK_NOT(var, value) \
- if ((var)==(value)) { \
- VG_(printf)("\nTool error: '%s' not initialised\n", \
- VG_STRINGIFY(var)); \
- VG_(tool_panic)("Uninitialised details field\n"); \
+#define CHECK_NOT(var, value) \
+ if ((var)==(value)) { \
+ VG_(printf)("\nTool error: '%s' not initialised\n", #var);\
+ VG_(tool_panic)("Uninitialised details field\n"); \
}
/* Ones that must be set */
#include "core.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_main.h" // for VG_(bbs_done)
#include "pub_core_options.h"
#include "core.h"
#include "pub_core_debuginfo.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_options.h"
#include "pub_core_tooliface.h"
--- /dev/null
+
+/*--------------------------------------------------------------------*/
+/*--- Assertions, etc. pub_core_libcassert.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 Julian Seward
+ jseward@acm.org
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PUB_CORE_LIBCASSERT_H
+#define __PUB_CORE_LIBCASSERT_H
+
+//--------------------------------------------------------------------
+// PURPOSE: This module contains all the libc code related to assertions,
+// panics and aborting.
+//--------------------------------------------------------------------
+
+#include "pub_tool_libcassert.h"
+
+// Useful for making failing stubs, when certain things haven't yet been
+// implemented.
+#define I_die_here \
+ VG_(assert_fail) (/*isCore*//*BOGUS*/True, \
+ "Unimplemented functionality", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, \
+ "valgrind", VG_BUGS_TO, "")
+
+#define vg_assert(expr) \
+ ((void) ((expr) ? 0 : \
+ (VG_(assert_fail) (/*isCore*/True, #expr, \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, \
+ ""), \
+ 0)))
+
+#define vg_assert2(expr, format, args...) \
+ ((void) ((expr) ? 0 : \
+ (VG_(assert_fail) (/*isCore*/True, #expr, \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, \
+ format, ##args), \
+ 0)))
+
+__attribute__ ((__noreturn__))
+extern void VG_(core_panic) ( Char* str );
+__attribute__ ((__noreturn__))
+extern void VG_(core_panic_at) ( Char* str, Addr ip, Addr sp, Addr fp );
+
+/* Called when some unhandleable client behaviour is detected.
+ Prints a msg and aborts. */
+extern void VG_(unimplemented) ( Char* msg )
+ __attribute__((__noreturn__));
+
+#endif // __PUB_CORE_LIBCASSERT_H
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
#include "pub_core_aspacemgr.h"
#include "pub_core_debuglog.h" /* VG_(debugLog_vprintf) */
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_main.h"
#include "pub_core_options.h"
return VG_(arena_strdup) ( VG_AR_TOOL, s );
}
-/* ---------------------------------------------------------------------
- Assertery.
- ------------------------------------------------------------------ */
-
-#if defined(VGP_x86_linux)
-# define GET_REAL_SP_AND_FP(sp, fp) \
- asm("movl %%esp, %0;" \
- "movl %%ebp, %1;" \
- : "=r" (sp),\
- "=r" (fp));
-#elif defined(VGP_amd64_linux)
-# define GET_REAL_SP_AND_FP(sp, fp) \
- asm("movq %%rsp, %0;" \
- "movq %%rbp, %1;" \
- : "=r" (sp),\
- "=r" (fp));
-#else
-# error Unknown platform
-#endif
-
-__attribute__ ((noreturn))
-static void report_and_quit ( const Char* report, Addr ip, Addr sp, Addr fp )
-{
- #define BACKTRACE_DEPTH 100 // nice and deep!
- Addr stacktop, ips[BACKTRACE_DEPTH];
- ThreadState *tst;
-
- tst = VG_(get_ThreadState)( VG_(get_lwp_tid)(VG_(gettid)()) );
-
- // If necessary, fake up an ExeContext which is of our actual real CPU
- // state. Could cause problems if we got the panic/exception within the
- // execontext/stack dump/symtab code. But it's better than nothing.
- if (0 == ip && 0 == sp && 0 == fp) {
- ip = (Addr)__builtin_return_address(0);
- GET_REAL_SP_AND_FP(sp, fp);
- }
-
- stacktop = tst->os_state.valgrind_stack_base +
- tst->os_state.valgrind_stack_szB;
-
- VG_(get_StackTrace2)(ips, BACKTRACE_DEPTH, ip, sp, fp, sp, stacktop);
- VG_(pp_StackTrace) (ips, BACKTRACE_DEPTH);
-
- VG_(printf)("\nBasic block ctr is approximately %llu\n", VG_(bbs_done) );
-
- VG_(pp_sched_status)();
- VG_(printf)("\n");
- VG_(printf)("Note: see also the FAQ.txt in the source distribution.\n");
- VG_(printf)("It contains workarounds to several common problems.\n");
- VG_(printf)("\n");
- VG_(printf)("If that doesn't help, please report this bug to: %s\n\n",
- report);
- VG_(printf)("In the bug report, send all the above text, the valgrind\n");
- VG_(printf)("version, and what Linux distro you are using. Thanks.\n\n");
- VG_(exit)(1);
-
- #undef BACKTRACE_DEPTH
-}
-
-void VG_(assert_fail) ( Bool isCore, const Char* expr, const Char* file,
- Int line, const Char* fn, const HChar* format, ... )
-{
- va_list vargs;
- Char buf[256];
- Char* bufptr = buf;
- Char* component;
- Char* bugs_to;
-
- static Bool entered = False;
- if (entered)
- VG_(exit)(2);
- entered = True;
-
- va_start(vargs, format);
- VG_(vsprintf) ( bufptr, format, vargs );
- va_end(vargs);
-
- if (isCore) {
- component = "valgrind";
- bugs_to = VG_BUGS_TO;
- } else {
- component = VG_(details).name;
- bugs_to = VG_(details).bug_reports_to;
- }
-
- // Treat vg_assert2(0, "foo") specially, as a panicky abort
- if (VG_STREQ(expr, "0")) {
- VG_(printf)("\n%s: %s:%d (%s): the 'impossible' happened.\n",
- component, file, line, fn, expr );
- } else {
- VG_(printf)("\n%s: %s:%d (%s): Assertion '%s' failed.\n",
- component, file, line, fn, expr );
- }
- if (!VG_STREQ(buf, ""))
- VG_(printf)("%s: %s\n", component, buf );
-
- report_and_quit(bugs_to, 0,0,0);
-}
-
-__attribute__ ((noreturn))
-static void panic ( Char* name, Char* report, Char* str,
- Addr ip, Addr sp, Addr fp )
-{
- VG_(printf)("\n%s: the 'impossible' happened:\n %s\n", name, str);
- report_and_quit(report, ip, sp, fp);
-}
-
-void VG_(core_panic_at) ( Char* str, Addr ip, Addr sp, Addr fp )
-{
- panic("valgrind", VG_BUGS_TO, str, ip, sp, fp);
-}
-
-void VG_(core_panic) ( Char* str )
-{
- VG_(core_panic_at)(str, 0,0,0);
-}
-
-void VG_(tool_panic) ( Char* str )
-{
- panic(VG_(details).name, VG_(details).bug_reports_to, str, 0,0,0);
-}
-
-/* Print some helpful-ish text about unimplemented things, and give
- up. */
-void VG_(unimplemented) ( Char* msg )
-{
- VG_(message)(Vg_UserMsg, "");
- VG_(message)(Vg_UserMsg,
- "Valgrind detected that your program requires");
- VG_(message)(Vg_UserMsg,
- "the following unimplemented functionality:");
- VG_(message)(Vg_UserMsg, " %s", msg);
- VG_(message)(Vg_UserMsg,
- "This may be because the functionality is hard to implement,");
- VG_(message)(Vg_UserMsg,
- "or because no reasonable program would behave this way,");
- VG_(message)(Vg_UserMsg,
- "or because nobody has yet needed it. In any case, let us know at");
- VG_(message)(Vg_UserMsg,
- "%s and/or try to work around the problem, if you can.", VG_BUGS_TO);
- VG_(message)(Vg_UserMsg,
- "");
- VG_(message)(Vg_UserMsg,
- "Valgrind has to exit now. Sorry. Bye!");
- VG_(message)(Vg_UserMsg,
- "");
- VG_(pp_sched_status)();
- VG_(exit)(1);
-}
-
-
/* ---------------------------------------------------------------------
Primitive support for reading files.
------------------------------------------------------------------ */
#include "core.h"
#include "pub_core_libcbase.h"
+#include "pub_core_libcassert.h"
#include "pub_core_tooliface.h"
#include "vki_unistd.h"
#include <sys/ptrace.h>
#include "pub_tool_debuginfo.h"
#include "pub_tool_hashtable.h"
#include "pub_tool_libcbase.h"
+#include "pub_tool_libcassert.h"
#include "pub_tool_libcprint.h"
#include "pub_tool_mallocfree.h"
#include "pub_tool_options.h"
pub_tool_execontext.h \
pub_tool_hashtable.h \
pub_tool_libcbase.h \
+ pub_tool_libcassert.h \
pub_tool_libcprint.h \
pub_tool_mallocfree.h \
pub_tool_options.h \
--- /dev/null
+
+/*--------------------------------------------------------------------*/
+/*--- Assertions, etc. pub_tool_libcassert.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 Julian Seward
+ jseward@acm.org
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PUB_TOOL_LIBCBASSERT_H
+#define __PUB_TOOL_LIBCBASSERT_H
+
+#define tl_assert(expr) \
+ ((void) ((expr) ? 0 : \
+ (VG_(assert_fail) (/*isCore?*/False, #expr, \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, \
+ ""), \
+ 0)))
+
+#define tl_assert2(expr, format, args...) \
+ ((void) ((expr) ? 0 : \
+ (VG_(assert_fail) (/*isCore?*/False, #expr, \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, \
+ format, ##args), \
+ 0)))
+
+__attribute__ ((__noreturn__))
+extern void VG_(assert_fail) ( Bool isCore, const Char* expr, const Char* file,
+ Int line, const Char* fn,
+ const HChar* format, ... );
+
+#endif // __PUB_TOOL_LIBCBASSERT_H
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
Returns False if it fails. Will fail if the pathname is > 65535 bytes. */
extern Bool VG_(getcwd_alloc) ( Char** cwd );
-/* ------------------------------------------------------------------ */
-/* assert.h */
-/* Asserts permanently enabled -- no turning off with NDEBUG. Hurrah! */
-
-/* This odd definition lets us stringify VG_(x) function names to
- "vgPlain_x". We need to do two macroexpansions to get the VG_ macro
- expanded before stringifying. */
-#define VG_STRINGIFY_WRK(x) #x
-#define VG_STRINGIFY(x) VG_STRINGIFY_WRK(x)
-
-#define tl_assert(expr) \
- ((void) ((expr) ? 0 : \
- (VG_(assert_fail) (/*isCore?*/False, VG_STRINGIFY(expr), \
- __FILE__, __LINE__, __PRETTY_FUNCTION__, \
- ""), \
- 0)))
-
-#define tl_assert2(expr, format, args...) \
- ((void) ((expr) ? 0 : \
- (VG_(assert_fail) (/*isCore?*/False, VG_STRINGIFY(expr), \
- __FILE__, __LINE__, __PRETTY_FUNCTION__, \
- format, ##args), \
- 0)))
-
-__attribute__ ((__noreturn__))
-extern void VG_(assert_fail) ( Bool isCore, const Char* expr, const Char* file,
- Int line, const Char* fn,
- const HChar* format, ... );
-
/* ------------------------------------------------------------------ */
/* Get memory by anonymous mmap. */
extern void* VG_(get_memory_from_mmap) ( SizeT nBytes, Char* who );
#include "pub_tool_debuginfo.h"
#include "pub_tool_hashtable.h"
#include "pub_tool_libcbase.h"
+#include "pub_tool_libcassert.h"
#include "pub_tool_libcprint.h"
#include "pub_tool_mallocfree.h"
#include "pub_tool_options.h"
#include <setjmp.h>
#include "mac_shared.h"
#include "pub_tool_libcbase.h"
+#include "pub_tool_libcassert.h"
#include "pub_tool_libcprint.h"
/* Define to debug the memory-leak-detector. */
#include "mac_shared.h"
#include "pub_tool_libcbase.h"
+#include "pub_tool_libcassert.h"
#include "pub_tool_libcprint.h"
/*------------------------------------------------------------*/
*/
#include "mac_shared.h"
+#include "pub_tool_libcassert.h"
#include "pub_tool_libcbase.h"
#include "pub_tool_libcprint.h"
#include "memcheck.h" /* for VG_USERREQ__* */
#include "mc_include.h"
#include "memcheck.h" /* for client requests */
#include "pub_tool_libcbase.h"
+#include "pub_tool_libcassert.h"
#include "pub_tool_libcprint.h"
*/
#include "mc_include.h"
+#include "pub_tool_libcassert.h"
#include "pub_tool_libcprint.h"