// debug.h -- gold internal debugging support -*- C++ -*-
-// Copyright 2007 Free Software Foundation, Inc.
+// Copyright 2007, 2008 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
#ifndef GOLD_DEBUG_H
#define GOLD_DEBUG_H
+#include <cstring>
+
#include "parameters.h"
#include "errors.h"
// 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_ALL = (DEBUG_TASK | DEBUG_SCRIPT | DEBUG_FILES
+ | DEBUG_RELAXATION);
+
+// 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 },
+ { "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.