OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [binutils-2.20.1/] [gold/] [errors.h] - Rev 862

Go to most recent revision | Compare with Previous | Blame | View Log

// errors.h -- handle errors for gold  -*- C++ -*-
 
// Copyright 2006, 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_ERRORS_H
#define GOLD_ERRORS_H
 
#include <cstdarg>
 
#include "gold-threads.h"
 
namespace gold
{
 
class Symbol;
template<int size, bool big_endian>
struct Relocate_info;
 
// This class handles errors for gold.  There is a single instance
// which is used by all threads.  If and when we make the gold code
// more amenable to being used in a library, we will make this an
// abstract interface class, and expect the caller to provide their
// own instantiation.
 
class Errors
{
 public:
  Errors(const char* program_name);
 
  // Report a fatal error.  After printing the error, this must exit.
  void
  fatal(const char* format, va_list) ATTRIBUTE_NORETURN;
 
  // Report an error and continue.
  void
  error(const char* format, va_list);
 
  // Report a warning and continue.
  void
  warning(const char* format, va_list);
 
  // Print an informational message and continue.
  void
  info(const char* format, va_list);
 
  // Report an error at a reloc location.
  template<int size, bool big_endian>
  void
  error_at_location(const Relocate_info<size, big_endian>* relinfo,
		    size_t relnum, off_t reloffset,
		    const char* format, va_list);
 
  // Report a warning at a reloc location.
  template<int size, bool big_endian>
  void
  warning_at_location(const Relocate_info<size, big_endian>* relinfo,
		      size_t relnum, off_t reloffset,
		      const char* format, va_list);
 
  // Issue an undefined symbol error.  LOCATION is the location of
  // the error (typically an object file name or relocation info).
  void
  undefined_symbol(const Symbol* sym, const std::string& location);
 
  // Report a debugging message.
  void
  debug(const char* format, ...) ATTRIBUTE_PRINTF_2;
 
  // Return the number of errors.
  int
  error_count() const
  { return this->error_count_; }
 
  // Return the number of warnings.
  int
  warning_count() const
  { return this->warning_count_; }
 
 private:
  Errors(const Errors&);
  Errors& operator=(const Errors&);
 
  // Initialize the lock.  We don't do this in the constructor because
  // lock initialization wants to know whether we are using threads or
  // not.  This returns true if the lock is now initialized.
  bool
  initialize_lock();
 
  // Increment a counter, holding the lock.
  void
  increment_counter(int*);
 
  // The number of times we report an undefined symbol.
  static const int max_undefined_error_report = 5;
 
  // The name of the program.
  const char* program_name_;
  // This class can be accessed from multiple threads.  This lock is
  // used to control access to the data structures.
  Lock* lock_;
  // Used to initialize the lock_ field exactly once.
  Initialize_lock initialize_lock_;
  // Numbers of errors reported.
  int error_count_;
  // Number of warnings reported.
  int warning_count_;
  // A map counting the numbers of times we have seen an undefined
  // symbol.
  Unordered_map<const Symbol*, int> undefined_symbols_;
};
 
} // End namespace gold.
 
#endif // !defined(GOLD_ERRORS_H)
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.