X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gold%2Fdebug.h;h=db18f9102110aa3c950d0448e20b20b5985f4131;hb=01e175fe1b21950982642713513e442fc09614e6;hp=e37e2f157a34a6461af732f0d2a93e409fc6ba83;hpb=494e05f4405228561f0af4d424136128ff8830d2;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/debug.h b/gold/debug.h index e37e2f157a..db18f91021 100644 --- a/gold/debug.h +++ b/gold/debug.h @@ -1,6 +1,6 @@ // debug.h -- gold internal debugging support -*- C++ -*- -// Copyright 2007 Free Software Foundation, Inc. +// Copyright (C) 2007-2019 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -23,6 +23,8 @@ #ifndef GOLD_DEBUG_H #define GOLD_DEBUG_H +#include + #include "parameters.h" #include "errors.h" @@ -31,19 +33,52 @@ namespace gold // The different types of debugging we support. These are bitflags. -const int DEBUG_TASK = 1; -const int DEBUG_SCRIPT = 2; +const int DEBUG_TASK = 0x1; +const int DEBUG_SCRIPT = 0x2; +const int DEBUG_FILES = 0x4; +const int DEBUG_RELAXATION = 0x8; +const int DEBUG_INCREMENTAL = 0x10; +const int DEBUG_LOCATION = 0x20; +const int DEBUG_TARGET = 0x40; +const int DEBUG_PLUGIN = 0x80; + +const int DEBUG_ALL = (DEBUG_TASK | DEBUG_SCRIPT | DEBUG_FILES + | DEBUG_RELAXATION | DEBUG_INCREMENTAL + | DEBUG_LOCATION | DEBUG_TARGET | DEBUG_PLUGIN); + +// Convert a debug string to the appropriate enum. +inline int +debug_string_to_enum(const char* arg) +{ + static const struct { const char* name; int value; } + debug_options[] = + { + { "task", DEBUG_TASK }, + { "script", DEBUG_SCRIPT }, + { "files", DEBUG_FILES }, + { "relaxation", DEBUG_RELAXATION }, + { "incremental", DEBUG_INCREMENTAL }, + { "location", DEBUG_LOCATION }, + { "target", DEBUG_TARGET }, + { "plugin", DEBUG_PLUGIN }, + { "all", DEBUG_ALL } + }; -const int DEBUG_ALL = DEBUG_TASK | DEBUG_SCRIPT; + int retval = 0; + for (size_t i = 0; i < sizeof(debug_options) / sizeof(*debug_options); ++i) + if (strstr(arg, debug_options[i].name)) + retval |= debug_options[i].value; + return retval; +} // Print a debug message if TYPE is enabled. This is a macro so that // we only evaluate the arguments if necessary. -#define gold_debug(TYPE, FORMAT, ...) \ +#define gold_debug(TYPE, ...) \ do \ { \ if (is_debugging_enabled(TYPE)) \ - parameters->errors()->debug(FORMAT, __VA_ARGS__); \ + parameters->errors()->debug(__VA_ARGS__); \ } \ while (0)