mirror of
https://github.com/opnsense/src.git
synced 2026-02-28 20:30:57 -05:00
235 lines
6.7 KiB
C++
235 lines
6.7 KiB
C++
//===-- Log.h ---------------------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef liblldb_Log_h_
|
|
#define liblldb_Log_h_
|
|
|
|
// C Includes
|
|
#include <stdarg.h>
|
|
#include <stdint.h>
|
|
#include <signal.h>
|
|
#include <stdio.h>
|
|
|
|
// C++ Includes
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
#include "lldb/lldb-private.h"
|
|
#include "lldb/Core/ConstString.h"
|
|
#include "lldb/Core/Flags.h"
|
|
#include "lldb/Core/PluginInterface.h"
|
|
|
|
//----------------------------------------------------------------------
|
|
// Logging types
|
|
//----------------------------------------------------------------------
|
|
#define LLDB_LOG_FLAG_STDOUT (1u << 0)
|
|
#define LLDB_LOG_FLAG_STDERR (1u << 1)
|
|
#define LLDB_LOG_FLAG_FATAL (1u << 2)
|
|
#define LLDB_LOG_FLAG_ERROR (1u << 3)
|
|
#define LLDB_LOG_FLAG_WARNING (1u << 4)
|
|
#define LLDB_LOG_FLAG_DEBUG (1u << 5)
|
|
#define LLDB_LOG_FLAG_VERBOSE (1u << 6)
|
|
|
|
//----------------------------------------------------------------------
|
|
// Logging Options
|
|
//----------------------------------------------------------------------
|
|
#define LLDB_LOG_OPTION_THREADSAFE (1u << 0)
|
|
#define LLDB_LOG_OPTION_VERBOSE (1u << 1)
|
|
#define LLDB_LOG_OPTION_DEBUG (1u << 2)
|
|
#define LLDB_LOG_OPTION_PREPEND_SEQUENCE (1u << 3)
|
|
#define LLDB_LOG_OPTION_PREPEND_TIMESTAMP (1u << 4)
|
|
#define LLDB_LOG_OPTION_PREPEND_PROC_AND_THREAD (1u << 5)
|
|
#define LLDB_LOG_OPTION_PREPEND_THREAD_NAME (1U << 6)
|
|
#define LLDB_LOG_OPTION_BACKTRACE (1U << 7)
|
|
|
|
//----------------------------------------------------------------------
|
|
// Logging Functions
|
|
//----------------------------------------------------------------------
|
|
namespace lldb_private {
|
|
|
|
class Log
|
|
{
|
|
public:
|
|
|
|
//------------------------------------------------------------------
|
|
// Callback definitions for abstracted plug-in log access.
|
|
//------------------------------------------------------------------
|
|
typedef void (*DisableCallback) (const char **categories, Stream *feedback_strm);
|
|
typedef Log * (*EnableCallback) (lldb::StreamSP &log_stream_sp,
|
|
uint32_t log_options,
|
|
const char **categories,
|
|
Stream *feedback_strm);
|
|
typedef void (*ListCategoriesCallback) (Stream *strm);
|
|
|
|
struct Callbacks
|
|
{
|
|
DisableCallback disable;
|
|
EnableCallback enable;
|
|
ListCategoriesCallback list_categories;
|
|
};
|
|
|
|
//------------------------------------------------------------------
|
|
// Static accessors for logging channels
|
|
//------------------------------------------------------------------
|
|
static void
|
|
RegisterLogChannel (const ConstString &channel,
|
|
const Log::Callbacks &log_callbacks);
|
|
|
|
static bool
|
|
UnregisterLogChannel (const ConstString &channel);
|
|
|
|
static bool
|
|
GetLogChannelCallbacks (const ConstString &channel,
|
|
Log::Callbacks &log_callbacks);
|
|
|
|
|
|
static void
|
|
EnableAllLogChannels (lldb::StreamSP &log_stream_sp,
|
|
uint32_t log_options,
|
|
const char **categories,
|
|
Stream *feedback_strm);
|
|
|
|
static void
|
|
DisableAllLogChannels (Stream *feedback_strm);
|
|
|
|
static void
|
|
ListAllLogChannels (Stream *strm);
|
|
|
|
static void
|
|
Initialize ();
|
|
|
|
static void
|
|
Terminate ();
|
|
|
|
//------------------------------------------------------------------
|
|
// Auto completion
|
|
//------------------------------------------------------------------
|
|
static void
|
|
AutoCompleteChannelName (const char *channel_name,
|
|
StringList &matches);
|
|
|
|
//------------------------------------------------------------------
|
|
// Member functions
|
|
//------------------------------------------------------------------
|
|
Log ();
|
|
|
|
Log (const lldb::StreamSP &stream_sp);
|
|
|
|
~Log ();
|
|
|
|
void
|
|
PutCString (const char *cstr);
|
|
|
|
void
|
|
Printf (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
|
|
|
|
void
|
|
VAPrintf (const char *format, va_list args);
|
|
|
|
void
|
|
PrintfWithFlags( uint32_t flags, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
|
|
|
|
void
|
|
LogIf (uint32_t mask, const char *fmt, ...) __attribute__ ((format (printf, 3, 4)));
|
|
|
|
void
|
|
Debug (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
|
|
|
|
void
|
|
DebugVerbose (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
|
|
|
|
void
|
|
Error (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
|
|
|
|
void
|
|
FatalError (int err, const char *fmt, ...) __attribute__ ((format (printf, 3, 4)));
|
|
|
|
void
|
|
Verbose (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
|
|
|
|
void
|
|
Warning (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
|
|
|
|
void
|
|
WarningVerbose (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
|
|
|
|
Flags &
|
|
GetOptions();
|
|
|
|
const Flags &
|
|
GetOptions() const;
|
|
|
|
Flags &
|
|
GetMask();
|
|
|
|
const Flags &
|
|
GetMask() const;
|
|
|
|
bool
|
|
GetVerbose() const;
|
|
|
|
bool
|
|
GetDebug() const;
|
|
|
|
void
|
|
SetStream (const lldb::StreamSP &stream_sp)
|
|
{
|
|
m_stream_sp = stream_sp;
|
|
}
|
|
|
|
protected:
|
|
//------------------------------------------------------------------
|
|
// Member variables
|
|
//------------------------------------------------------------------
|
|
lldb::StreamSP m_stream_sp;
|
|
Flags m_options;
|
|
Flags m_mask_bits;
|
|
|
|
void
|
|
PrintfWithFlagsVarArg (uint32_t flags, const char *format, va_list args);
|
|
|
|
private:
|
|
DISALLOW_COPY_AND_ASSIGN (Log);
|
|
};
|
|
|
|
|
|
class LogChannel : public PluginInterface
|
|
{
|
|
public:
|
|
LogChannel ();
|
|
|
|
virtual
|
|
~LogChannel ();
|
|
|
|
static lldb::LogChannelSP
|
|
FindPlugin (const char *plugin_name);
|
|
|
|
// categories is a an array of chars that ends with a NULL element.
|
|
virtual void
|
|
Disable (const char **categories, Stream *feedback_strm) = 0;
|
|
|
|
virtual bool
|
|
Enable (lldb::StreamSP &log_stream_sp,
|
|
uint32_t log_options,
|
|
Stream *feedback_strm, // Feedback stream for argument errors etc
|
|
const char **categories) = 0;// The categories to enable within this logging stream, if empty, enable default set
|
|
|
|
virtual void
|
|
ListCategories (Stream *strm) = 0;
|
|
|
|
protected:
|
|
std::unique_ptr<Log> m_log_ap;
|
|
|
|
private:
|
|
DISALLOW_COPY_AND_ASSIGN (LogChannel);
|
|
};
|
|
|
|
|
|
} // namespace lldb_private
|
|
|
|
#endif // liblldb_Log_H_
|