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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [binutils-2.20.1/] [gold/] [errors.h] - Blame information for rev 853

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

Line No. Rev Author Line
1 205 julius
// errors.h -- handle errors for gold  -*- C++ -*-
2
 
3
// Copyright 2006, 2007, 2008 Free Software Foundation, Inc.
4
// Written by Ian Lance Taylor <iant@google.com>.
5
 
6
// This file is part of gold.
7
 
8
// This program is free software; you can redistribute it and/or modify
9
// it under the terms of the GNU General Public License as published by
10
// the Free Software Foundation; either version 3 of the License, or
11
// (at your option) any later version.
12
 
13
// This program is distributed in the hope that it will be useful,
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
// GNU General Public License for more details.
17
 
18
// You should have received a copy of the GNU General Public License
19
// along with this program; if not, write to the Free Software
20
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21
// MA 02110-1301, USA.
22
 
23
#ifndef GOLD_ERRORS_H
24
#define GOLD_ERRORS_H
25
 
26
#include <cstdarg>
27
 
28
#include "gold-threads.h"
29
 
30
namespace gold
31
{
32
 
33
class Symbol;
34
template<int size, bool big_endian>
35
struct Relocate_info;
36
 
37
// This class handles errors for gold.  There is a single instance
38
// which is used by all threads.  If and when we make the gold code
39
// more amenable to being used in a library, we will make this an
40
// abstract interface class, and expect the caller to provide their
41
// own instantiation.
42
 
43
class Errors
44
{
45
 public:
46
  Errors(const char* program_name);
47
 
48
  // Report a fatal error.  After printing the error, this must exit.
49
  void
50
  fatal(const char* format, va_list) ATTRIBUTE_NORETURN;
51
 
52
  // Report an error and continue.
53
  void
54
  error(const char* format, va_list);
55
 
56
  // Report a warning and continue.
57
  void
58
  warning(const char* format, va_list);
59
 
60
  // Print an informational message and continue.
61
  void
62
  info(const char* format, va_list);
63
 
64
  // Report an error at a reloc location.
65
  template<int size, bool big_endian>
66
  void
67
  error_at_location(const Relocate_info<size, big_endian>* relinfo,
68
                    size_t relnum, off_t reloffset,
69
                    const char* format, va_list);
70
 
71
  // Report a warning at a reloc location.
72
  template<int size, bool big_endian>
73
  void
74
  warning_at_location(const Relocate_info<size, big_endian>* relinfo,
75
                      size_t relnum, off_t reloffset,
76
                      const char* format, va_list);
77
 
78
  // Issue an undefined symbol error.  LOCATION is the location of
79
  // the error (typically an object file name or relocation info).
80
  void
81
  undefined_symbol(const Symbol* sym, const std::string& location);
82
 
83
  // Report a debugging message.
84
  void
85
  debug(const char* format, ...) ATTRIBUTE_PRINTF_2;
86
 
87
  // Return the number of errors.
88
  int
89
  error_count() const
90
  { return this->error_count_; }
91
 
92
  // Return the number of warnings.
93
  int
94
  warning_count() const
95
  { return this->warning_count_; }
96
 
97
 private:
98
  Errors(const Errors&);
99
  Errors& operator=(const Errors&);
100
 
101
  // Initialize the lock.  We don't do this in the constructor because
102
  // lock initialization wants to know whether we are using threads or
103
  // not.  This returns true if the lock is now initialized.
104
  bool
105
  initialize_lock();
106
 
107
  // Increment a counter, holding the lock.
108
  void
109
  increment_counter(int*);
110
 
111
  // The number of times we report an undefined symbol.
112
  static const int max_undefined_error_report = 5;
113
 
114
  // The name of the program.
115
  const char* program_name_;
116
  // This class can be accessed from multiple threads.  This lock is
117
  // used to control access to the data structures.
118
  Lock* lock_;
119
  // Used to initialize the lock_ field exactly once.
120
  Initialize_lock initialize_lock_;
121
  // Numbers of errors reported.
122
  int error_count_;
123
  // Number of warnings reported.
124
  int warning_count_;
125
  // A map counting the numbers of times we have seen an undefined
126
  // symbol.
127
  Unordered_map<const Symbol*, int> undefined_symbols_;
128
};
129
 
130
} // End namespace gold.
131
 
132
#endif // !defined(GOLD_ERRORS_H)

powered by: WebSVN 2.1.0

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