123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- // errors.h -- handle errors for gold -*- C++ -*-
- // Copyright (C) 2006-2015 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 a fallback error. After printing the error, this must exit
- // with a special status code indicating that fallback to
- // --incremental-full is required.
- void
- fallback(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)
|