mirror of
https://github.com/matrix-construct/construct
synced 2024-12-25 23:14:13 +01:00
ircd: Move definitions for various valgrind suites to vg.cc for header isolation.
This commit is contained in:
parent
15e06e4d2e
commit
f88cc51e37
5 changed files with 142 additions and 125 deletions
|
@ -41,6 +41,7 @@ namespace ircd::allocator
|
|||
};
|
||||
|
||||
/// Valgrind memcheck hypercall suite
|
||||
/// note: definitions located in ircd/vg.cc
|
||||
namespace ircd::allocator::vg
|
||||
{
|
||||
bool defined(const const_buffer &);
|
||||
|
@ -50,6 +51,7 @@ namespace ircd::allocator::vg
|
|||
}
|
||||
|
||||
/// Valgrind hypercall suite
|
||||
/// note: definitions located in ircd/vg.cc
|
||||
namespace ircd::vg
|
||||
{
|
||||
size_t errors();
|
||||
|
|
|
@ -113,6 +113,7 @@ libircd_la_SOURCES =#
|
|||
libircd_la_SOURCES += assert.cc
|
||||
libircd_la_SOURCES += info.cc
|
||||
libircd_la_SOURCES += allocator.cc
|
||||
libircd_la_SOURCES += vg.cc
|
||||
libircd_la_SOURCES += exception.cc
|
||||
libircd_la_SOURCES += util.cc
|
||||
libircd_la_SOURCES += demangle.cc
|
||||
|
|
|
@ -9,8 +9,6 @@
|
|||
// full license for this software is available in the LICENSE file.
|
||||
|
||||
#include <RB_INC_MALLOC_H
|
||||
#include <RB_INC_VALGRIND_VALGRIND_H
|
||||
#include <RB_INC_VALGRIND_MEMCHECK_H
|
||||
|
||||
// Uncomment or -D this #define to enable our own crude but simple ability to
|
||||
// profile dynamic memory usage. Global `new` and `delete` will be captured
|
||||
|
@ -69,68 +67,6 @@ ircd::allocator::trim(const size_t &pad)
|
|||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
// valgrind
|
||||
//
|
||||
|
||||
bool
|
||||
ircd::vg::active()
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_VALGRIND_H
|
||||
return RUNNING_ON_VALGRIND;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::vg::errors()
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_VALGRIND_H
|
||||
return VALGRIND_COUNT_ERRORS;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
//
|
||||
// valgrind memcheck
|
||||
//
|
||||
|
||||
void
|
||||
ircd::allocator::vg::set_noaccess(const const_buffer &buf)
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_MEMCHECK_H
|
||||
VALGRIND_MAKE_MEM_NOACCESS(data(buf), size(buf));
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::allocator::vg::set_undefined(const const_buffer &buf)
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_MEMCHECK_H
|
||||
VALGRIND_MAKE_MEM_UNDEFINED(data(buf), size(buf));
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::allocator::vg::set_defined(const const_buffer &buf)
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_MEMCHECK_H
|
||||
VALGRIND_MAKE_MEM_DEFINED(data(buf), size(buf));
|
||||
#endif
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::allocator::vg::defined(const const_buffer &buf)
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_MEMCHECK_H
|
||||
return VALGRIND_CHECK_MEM_IS_DEFINED(data(buf), size(buf)) == 0;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
//
|
||||
// allocator::state
|
||||
//
|
||||
|
|
62
ircd/prof.cc
62
ircd/prof.cc
|
@ -205,11 +205,7 @@ catch(const std::exception &e)
|
|||
//
|
||||
// prof::vg
|
||||
//
|
||||
|
||||
namespace ircd::prof::vg
|
||||
{
|
||||
static bool _enabled;
|
||||
}
|
||||
// note: further definitions calling valgrind isolated to ircd/vg.cc
|
||||
|
||||
//
|
||||
// prof::vg::enable
|
||||
|
@ -243,62 +239,6 @@ noexcept
|
|||
start();
|
||||
}
|
||||
|
||||
//
|
||||
// prof::vg util
|
||||
//
|
||||
|
||||
void
|
||||
ircd::prof::vg::stop()
|
||||
noexcept
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_CALLGRIND_H
|
||||
CALLGRIND_STOP_INSTRUMENTATION;
|
||||
assert(_enabled);
|
||||
_enabled = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::prof::vg::start()
|
||||
noexcept
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_CALLGRIND_H
|
||||
assert(!_enabled);
|
||||
_enabled = true;
|
||||
CALLGRIND_START_INSTRUMENTATION;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::prof::vg::reset()
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_CALLGRIND_H
|
||||
CALLGRIND_ZERO_STATS;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::prof::vg::toggle()
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_CALLGRIND_H
|
||||
CALLGRIND_TOGGLE_COLLECT;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::prof::vg::dump(const char *const reason)
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_CALLGRIND_H
|
||||
CALLGRIND_DUMP_STATS_AT(reason);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::prof::vg::enabled()
|
||||
{
|
||||
return _enabled;
|
||||
}
|
||||
|
||||
//
|
||||
// instructions
|
||||
//
|
||||
|
|
138
ircd/vg.cc
Normal file
138
ircd/vg.cc
Normal file
|
@ -0,0 +1,138 @@
|
|||
// Matrix Construct
|
||||
//
|
||||
// Copyright (C) Matrix Construct Developers, Authors & Contributors
|
||||
// Copyright (C) 2016-2019 Jason Volk <jason@zemos.net>
|
||||
//
|
||||
// Permission to use, copy, modify, and/or distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
// copyright notice and this permission notice is present in all copies. The
|
||||
// full license for this software is available in the LICENSE file.
|
||||
|
||||
#include <RB_INC_VALGRIND_VALGRIND_H
|
||||
#include <RB_INC_VALGRIND_MEMCHECK_H
|
||||
#include <RB_INC_VALGRIND_CALLGRIND_H
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ircd/allocator.h
|
||||
//
|
||||
|
||||
bool
|
||||
ircd::vg::active()
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_VALGRIND_H
|
||||
return RUNNING_ON_VALGRIND;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::vg::errors()
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_VALGRIND_H
|
||||
return VALGRIND_COUNT_ERRORS;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
//
|
||||
// valgrind memcheck
|
||||
//
|
||||
|
||||
void
|
||||
ircd::allocator::vg::set_noaccess(const const_buffer &buf)
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_MEMCHECK_H
|
||||
VALGRIND_MAKE_MEM_NOACCESS(data(buf), size(buf));
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::allocator::vg::set_undefined(const const_buffer &buf)
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_MEMCHECK_H
|
||||
VALGRIND_MAKE_MEM_UNDEFINED(data(buf), size(buf));
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::allocator::vg::set_defined(const const_buffer &buf)
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_MEMCHECK_H
|
||||
VALGRIND_MAKE_MEM_DEFINED(data(buf), size(buf));
|
||||
#endif
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::allocator::vg::defined(const const_buffer &buf)
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_MEMCHECK_H
|
||||
return VALGRIND_CHECK_MEM_IS_DEFINED(data(buf), size(buf)) == 0;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ircd/prof.h
|
||||
//
|
||||
|
||||
namespace ircd::prof::vg
|
||||
{
|
||||
static bool _enabled;
|
||||
}
|
||||
|
||||
void
|
||||
ircd::prof::vg::stop()
|
||||
noexcept
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_CALLGRIND_H
|
||||
CALLGRIND_STOP_INSTRUMENTATION;
|
||||
assert(_enabled);
|
||||
_enabled = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::prof::vg::start()
|
||||
noexcept
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_CALLGRIND_H
|
||||
assert(!_enabled);
|
||||
_enabled = true;
|
||||
CALLGRIND_START_INSTRUMENTATION;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::prof::vg::reset()
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_CALLGRIND_H
|
||||
CALLGRIND_ZERO_STATS;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::prof::vg::toggle()
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_CALLGRIND_H
|
||||
CALLGRIND_TOGGLE_COLLECT;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ircd::prof::vg::dump(const char *const reason)
|
||||
{
|
||||
#ifdef HAVE_VALGRIND_CALLGRIND_H
|
||||
CALLGRIND_DUMP_STATS_AT(reason);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::prof::vg::enabled()
|
||||
{
|
||||
return _enabled;
|
||||
}
|
Loading…
Reference in a new issue