old-cross-binutils/gold/debug.h
Ian Lance Taylor 04bf70729d PR gold/5986
Fix problems building gold with gcc 4.3.0.
	* gold.h (TEMPLATE_ATTRIBUTE_PRINTF_4): Define.
	(gold_error_at_location, gold_warning_at_location): Use it.
	* configure.ac: Check whether we can compile and use a template
	function with a printf attribute.
	* x86_64.cc (Target_x86_64::do_code_fill): Swap out a 32-bit value
	when jumping over bytes.
	* object.cc: Instantiate Object::read_section_data.
	* debug.h: Include <cstring>
	* dwarf_reader.cc: Include <algorithm>
	* main.cc: Include <cstring>.
	* options.cc: Include <cstring>.
	* output.cc: Include <cstring>.
	* script.cc: Include <cstring>.
	* script.h: Include <string>.
	* symtab.cc: Include <cstring> and <algorithm>.
	* target-select.cc: Include <cstring>.
	* version.cc: Include <string>.
	* testsuite/testmain.cc: Include <cstdlib>.
	* configure, config.in: Rebuild.
2008-03-26 23:36:46 +00:00

75 lines
2.1 KiB
C++

// debug.h -- gold internal debugging support -*- C++ -*-
// Copyright 2007, 2008 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
// 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
#ifndef GOLD_DEBUG_H
#define GOLD_DEBUG_H
#include <cstring>
#include "parameters.h"
#include "errors.h"
namespace gold
{
// The different types of debugging we support. These are bitflags.
const int DEBUG_TASK = 0x1;
const int DEBUG_SCRIPT = 0x2;
const int DEBUG_FILES = 0x4;
const int DEBUG_ALL = DEBUG_TASK | DEBUG_SCRIPT | DEBUG_FILES;
// 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 },
{ "all", DEBUG_ALL }
};
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, ...) \
do \
{ \
if (is_debugging_enabled(TYPE)) \
parameters->errors()->debug(FORMAT, __VA_ARGS__); \
} \
while (0)
} // End namespace gold.
#endif // !defined(GOLD_DEBUG_H)