Add plugin functionality for link-time optimization (LTO).
[external/binutils.git] / gold / resolve.cc
1 // resolve.cc -- symbol resolution for gold
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 #include "gold.h"
24
25 #include "elfcpp.h"
26 #include "target.h"
27 #include "object.h"
28 #include "symtab.h"
29 #include "plugin.h"
30
31 namespace gold
32 {
33
34 // Symbol methods used in this file.
35
36 // This symbol is being overridden by another symbol whose version is
37 // VERSION.  Update the VERSION_ field accordingly.
38
39 inline void
40 Symbol::override_version(const char* version)
41 {
42   if (version == NULL)
43     {
44       // This is the case where this symbol is NAME/VERSION, and the
45       // version was not marked as hidden.  That makes it the default
46       // version, so we create NAME/NULL.  Later we see another symbol
47       // NAME/NULL, and that symbol is overriding this one.  In this
48       // case, since NAME/VERSION is the default, we make NAME/NULL
49       // override NAME/VERSION as well.  They are already the same
50       // Symbol structure.  Setting the VERSION_ field to NULL ensures
51       // that it will be output with the correct, empty, version.
52       this->version_ = version;
53     }
54   else
55     {
56       // This is the case where this symbol is NAME/VERSION_ONE, and
57       // now we see NAME/VERSION_TWO, and NAME/VERSION_TWO is
58       // overriding NAME.  If VERSION_ONE and VERSION_TWO are
59       // different, then this can only happen when VERSION_ONE is NULL
60       // and VERSION_TWO is not hidden.
61       gold_assert(this->version_ == version || this->version_ == NULL);
62       this->version_ = version;
63     }
64 }
65
66 // Override the fields in Symbol.
67
68 template<int size, bool big_endian>
69 void
70 Symbol::override_base(const elfcpp::Sym<size, big_endian>& sym,
71                       unsigned int st_shndx, bool is_ordinary,
72                       Object* object, const char* version)
73 {
74   gold_assert(this->source_ == FROM_OBJECT);
75   this->u_.from_object.object = object;
76   this->override_version(version);
77   this->u_.from_object.shndx = st_shndx;
78   this->is_ordinary_shndx_ = is_ordinary;
79   this->type_ = sym.get_st_type();
80   this->binding_ = sym.get_st_bind();
81   this->visibility_ = sym.get_st_visibility();
82   this->nonvis_ = sym.get_st_nonvis();
83   if (object->is_dynamic())
84     this->in_dyn_ = true;
85   else
86     this->in_reg_ = true;
87 }
88
89 // Override the fields in Sized_symbol.
90
91 template<int size>
92 template<bool big_endian>
93 void
94 Sized_symbol<size>::override(const elfcpp::Sym<size, big_endian>& sym,
95                              unsigned st_shndx, bool is_ordinary,
96                              Object* object, const char* version)
97 {
98   this->override_base(sym, st_shndx, is_ordinary, object, version);
99   this->value_ = sym.get_st_value();
100   this->symsize_ = sym.get_st_size();
101 }
102
103 // Override TOSYM with symbol FROMSYM, defined in OBJECT, with version
104 // VERSION.  This handles all aliases of TOSYM.
105
106 template<int size, bool big_endian>
107 void
108 Symbol_table::override(Sized_symbol<size>* tosym,
109                        const elfcpp::Sym<size, big_endian>& fromsym,
110                        unsigned int st_shndx, bool is_ordinary,
111                        Object* object, const char* version)
112 {
113   tosym->override(fromsym, st_shndx, is_ordinary, object, version);
114   if (tosym->has_alias())
115     {
116       Symbol* sym = this->weak_aliases_[tosym];
117       gold_assert(sym != NULL);
118       Sized_symbol<size>* ssym = this->get_sized_symbol<size>(sym);
119       do
120         {
121           ssym->override(fromsym, st_shndx, is_ordinary, object, version);
122           sym = this->weak_aliases_[ssym];
123           gold_assert(sym != NULL);
124           ssym = this->get_sized_symbol<size>(sym);
125         }
126       while (ssym != tosym);
127     }
128 }
129
130 // The resolve functions build a little code for each symbol.
131 // Bit 0: 0 for global, 1 for weak.
132 // Bit 1: 0 for regular object, 1 for shared object
133 // Bits 2-3: 0 for normal, 1 for undefined, 2 for common
134 // This gives us values from 0 to 11.
135
136 static const int global_or_weak_shift = 0;
137 static const unsigned int global_flag = 0 << global_or_weak_shift;
138 static const unsigned int weak_flag = 1 << global_or_weak_shift;
139
140 static const int regular_or_dynamic_shift = 1;
141 static const unsigned int regular_flag = 0 << regular_or_dynamic_shift;
142 static const unsigned int dynamic_flag = 1 << regular_or_dynamic_shift;
143
144 static const int def_undef_or_common_shift = 2;
145 static const unsigned int def_flag = 0 << def_undef_or_common_shift;
146 static const unsigned int undef_flag = 1 << def_undef_or_common_shift;
147 static const unsigned int common_flag = 2 << def_undef_or_common_shift;
148
149 // This convenience function combines all the flags based on facts
150 // about the symbol.
151
152 static unsigned int
153 symbol_to_bits(elfcpp::STB binding, bool is_dynamic,
154                unsigned int shndx, bool is_ordinary, elfcpp::STT type)
155 {
156   unsigned int bits;
157
158   switch (binding)
159     {
160     case elfcpp::STB_GLOBAL:
161       bits = global_flag;
162       break;
163
164     case elfcpp::STB_WEAK:
165       bits = weak_flag;
166       break;
167
168     case elfcpp::STB_LOCAL:
169       // We should only see externally visible symbols in the symbol
170       // table.
171       gold_error(_("invalid STB_LOCAL symbol in external symbols"));
172       bits = global_flag;
173
174     default:
175       // Any target which wants to handle STB_LOOS, etc., needs to
176       // define a resolve method.
177       gold_error(_("unsupported symbol binding"));
178       bits = global_flag;
179     }
180
181   if (is_dynamic)
182     bits |= dynamic_flag;
183   else
184     bits |= regular_flag;
185
186   switch (shndx)
187     {
188     case elfcpp::SHN_UNDEF:
189       bits |= undef_flag;
190       break;
191
192     case elfcpp::SHN_COMMON:
193       if (!is_ordinary)
194         bits |= common_flag;
195       break;
196
197     default:
198       if (type == elfcpp::STT_COMMON)
199         bits |= common_flag;
200       else
201         bits |= def_flag;
202       break;
203     }
204
205   return bits;
206 }
207
208 // Resolve a symbol.  This is called the second and subsequent times
209 // we see a symbol.  TO is the pre-existing symbol.  ST_SHNDX is the
210 // section index for SYM, possibly adjusted for many sections.
211 // IS_ORDINARY is whether ST_SHNDX is a normal section index rather
212 // than a special code.  ORIG_ST_SHNDX is the original section index,
213 // before any munging because of discarded sections, except that all
214 // non-ordinary section indexes are mapped to SHN_UNDEF.  VERSION is
215 // the version of SYM.
216
217 template<int size, bool big_endian>
218 void
219 Symbol_table::resolve(Sized_symbol<size>* to,
220                       const elfcpp::Sym<size, big_endian>& sym,
221                       unsigned int st_shndx, bool is_ordinary,
222                       unsigned int orig_st_shndx,
223                       Object* object, const char* version)
224 {
225   if (object->target()->has_resolve())
226     {
227       Sized_target<size, big_endian>* sized_target;
228       sized_target = object->sized_target<size, big_endian>();
229       sized_target->resolve(to, sym, object, version);
230       return;
231     }
232
233   if (!object->is_dynamic())
234     {
235       // Record that we've seen this symbol in a regular object.
236       to->set_in_reg();
237     }
238   else
239     {
240       // Record that we've seen this symbol in a dynamic object.
241       to->set_in_dyn();
242     }
243
244   // Record if we've seen this symbol in a real ELF object (i.e., the
245   // symbol is referenced from outside the world known to the plugin).
246   if (object->pluginobj() == NULL)
247     to->set_in_real_elf();
248
249   // If we're processing replacement files, allow new symbols to override
250   // the placeholders from the plugin objects.
251   if (to->source() == Symbol::FROM_OBJECT)
252     {
253       Pluginobj* obj = to->object()->pluginobj();
254       if (obj != NULL
255           && parameters->options().plugins()->in_replacement_phase())
256         {
257           this->override(to, sym, st_shndx, is_ordinary, object, version);
258           return;
259         }
260     }
261
262   unsigned int frombits = symbol_to_bits(sym.get_st_bind(),
263                                          object->is_dynamic(),
264                                          st_shndx, is_ordinary,
265                                          sym.get_st_type());
266
267   bool adjust_common_sizes;
268   if (Symbol_table::should_override(to, frombits, object,
269                                     &adjust_common_sizes))
270     {
271       typename Sized_symbol<size>::Size_type tosize = to->symsize();
272
273       this->override(to, sym, st_shndx, is_ordinary, object, version);
274
275       if (adjust_common_sizes && tosize > to->symsize())
276         to->set_symsize(tosize);
277     }
278   else
279     {
280       if (adjust_common_sizes && sym.get_st_size() > to->symsize())
281         to->set_symsize(sym.get_st_size());
282     }
283
284   // A new weak undefined reference, merging with an old weak
285   // reference, could be a One Definition Rule (ODR) violation --
286   // especially if the types or sizes of the references differ.  We'll
287   // store such pairs and look them up later to make sure they
288   // actually refer to the same lines of code.  (Note: not all ODR
289   // violations can be found this way, and not everything this finds
290   // is an ODR violation.  But it's helpful to warn about.)
291   bool to_is_ordinary;
292   if (parameters->options().detect_odr_violations()
293       && sym.get_st_bind() == elfcpp::STB_WEAK
294       && to->binding() == elfcpp::STB_WEAK
295       && orig_st_shndx != elfcpp::SHN_UNDEF
296       && to->shndx(&to_is_ordinary) != elfcpp::SHN_UNDEF
297       && to_is_ordinary
298       && sym.get_st_size() != 0    // Ignore weird 0-sized symbols.
299       && to->symsize() != 0
300       && (sym.get_st_type() != to->type()
301           || sym.get_st_size() != to->symsize())
302       // C does not have a concept of ODR, so we only need to do this
303       // on C++ symbols.  These have (mangled) names starting with _Z.
304       && to->name()[0] == '_' && to->name()[1] == 'Z')
305     {
306       Symbol_location fromloc
307           = { object, orig_st_shndx, sym.get_st_value() };
308       Symbol_location toloc = { to->object(), to->shndx(&to_is_ordinary),
309                                 to->value() };
310       this->candidate_odr_violations_[to->name()].insert(fromloc);
311       this->candidate_odr_violations_[to->name()].insert(toloc);
312     }
313 }
314
315 // Handle the core of symbol resolution.  This is called with the
316 // existing symbol, TO, and a bitflag describing the new symbol.  This
317 // returns true if we should override the existing symbol with the new
318 // one, and returns false otherwise.  It sets *ADJUST_COMMON_SIZES to
319 // true if we should set the symbol size to the maximum of the TO and
320 // FROM sizes.  It handles error conditions.
321
322 bool
323 Symbol_table::should_override(const Symbol* to, unsigned int frombits,
324                               Object* object, bool* adjust_common_sizes)
325 {
326   *adjust_common_sizes = false;
327
328   unsigned int tobits;
329   if (to->source() == Symbol::IS_UNDEFINED)
330     tobits = symbol_to_bits(to->binding(), false, elfcpp::SHN_UNDEF, true,
331                             to->type());
332   else if (to->source() != Symbol::FROM_OBJECT)
333     tobits = symbol_to_bits(to->binding(), false, elfcpp::SHN_ABS, false,
334                             to->type());
335   else
336     {
337       bool is_ordinary;
338       unsigned int shndx = to->shndx(&is_ordinary);
339       tobits = symbol_to_bits(to->binding(),
340                               to->object()->is_dynamic(),
341                               shndx,
342                               is_ordinary,
343                               to->type());
344     }
345
346   // FIXME: Warn if either but not both of TO and SYM are STT_TLS.
347
348   // We use a giant switch table for symbol resolution.  This code is
349   // unwieldy, but: 1) it is efficient; 2) we definitely handle all
350   // cases; 3) it is easy to change the handling of a particular case.
351   // The alternative would be a series of conditionals, but it is easy
352   // to get the ordering wrong.  This could also be done as a table,
353   // but that is no easier to understand than this large switch
354   // statement.
355
356   // These are the values generated by the bit codes.
357   enum
358   {
359     DEF =              global_flag | regular_flag | def_flag,
360     WEAK_DEF =         weak_flag   | regular_flag | def_flag,
361     DYN_DEF =          global_flag | dynamic_flag | def_flag,
362     DYN_WEAK_DEF =     weak_flag   | dynamic_flag | def_flag,
363     UNDEF =            global_flag | regular_flag | undef_flag,
364     WEAK_UNDEF =       weak_flag   | regular_flag | undef_flag,
365     DYN_UNDEF =        global_flag | dynamic_flag | undef_flag,
366     DYN_WEAK_UNDEF =   weak_flag   | dynamic_flag | undef_flag,
367     COMMON =           global_flag | regular_flag | common_flag,
368     WEAK_COMMON =      weak_flag   | regular_flag | common_flag,
369     DYN_COMMON =       global_flag | dynamic_flag | common_flag,
370     DYN_WEAK_COMMON =  weak_flag   | dynamic_flag | common_flag
371   };
372
373   switch (tobits * 16 + frombits)
374     {
375     case DEF * 16 + DEF:
376       // Two definitions of the same symbol.
377
378       // If either symbol is defined by an object included using
379       // --just-symbols, then don't warn.  This is for compatibility
380       // with the GNU linker.  FIXME: This is a hack.
381       if ((to->source() == Symbol::FROM_OBJECT && to->object()->just_symbols())
382           || object->just_symbols())
383         return false;
384
385       // FIXME: Do a better job of reporting locations.
386       gold_error(_("%s: multiple definition of %s"),
387                  object != NULL ? object->name().c_str() : _("command line"),
388                  to->demangled_name().c_str());
389       gold_error(_("%s: previous definition here"),
390                  (to->source() == Symbol::FROM_OBJECT
391                   ? to->object()->name().c_str()
392                   : _("command line")));
393       return false;
394
395     case WEAK_DEF * 16 + DEF:
396       // We've seen a weak definition, and now we see a strong
397       // definition.  In the original SVR4 linker, this was treated as
398       // a multiple definition error.  In the Solaris linker and the
399       // GNU linker, a weak definition followed by a regular
400       // definition causes the weak definition to be overridden.  We
401       // are currently compatible with the GNU linker.  In the future
402       // we should add a target specific option to change this.
403       // FIXME.
404       return true;
405
406     case DYN_DEF * 16 + DEF:
407     case DYN_WEAK_DEF * 16 + DEF:
408       // We've seen a definition in a dynamic object, and now we see a
409       // definition in a regular object.  The definition in the
410       // regular object overrides the definition in the dynamic
411       // object.
412       return true;
413
414     case UNDEF * 16 + DEF:
415     case WEAK_UNDEF * 16 + DEF:
416     case DYN_UNDEF * 16 + DEF:
417     case DYN_WEAK_UNDEF * 16 + DEF:
418       // We've seen an undefined reference, and now we see a
419       // definition.  We use the definition.
420       return true;
421
422     case COMMON * 16 + DEF:
423     case WEAK_COMMON * 16 + DEF:
424     case DYN_COMMON * 16 + DEF:
425     case DYN_WEAK_COMMON * 16 + DEF:
426       // We've seen a common symbol and now we see a definition.  The
427       // definition overrides.  FIXME: We should optionally issue, version a
428       // warning.
429       return true;
430
431     case DEF * 16 + WEAK_DEF:
432     case WEAK_DEF * 16 + WEAK_DEF:
433       // We've seen a definition and now we see a weak definition.  We
434       // ignore the new weak definition.
435       return false;
436
437     case DYN_DEF * 16 + WEAK_DEF:
438     case DYN_WEAK_DEF * 16 + WEAK_DEF:
439       // We've seen a dynamic definition and now we see a regular weak
440       // definition.  The regular weak definition overrides.
441       return true;
442
443     case UNDEF * 16 + WEAK_DEF:
444     case WEAK_UNDEF * 16 + WEAK_DEF:
445     case DYN_UNDEF * 16 + WEAK_DEF:
446     case DYN_WEAK_UNDEF * 16 + WEAK_DEF:
447       // A weak definition of a currently undefined symbol.
448       return true;
449
450     case COMMON * 16 + WEAK_DEF:
451     case WEAK_COMMON * 16 + WEAK_DEF:
452       // A weak definition does not override a common definition.
453       return false;
454
455     case DYN_COMMON * 16 + WEAK_DEF:
456     case DYN_WEAK_COMMON * 16 + WEAK_DEF:
457       // A weak definition does override a definition in a dynamic
458       // object.  FIXME: We should optionally issue a warning.
459       return true;
460
461     case DEF * 16 + DYN_DEF:
462     case WEAK_DEF * 16 + DYN_DEF:
463     case DYN_DEF * 16 + DYN_DEF:
464     case DYN_WEAK_DEF * 16 + DYN_DEF:
465       // Ignore a dynamic definition if we already have a definition.
466       return false;
467
468     case UNDEF * 16 + DYN_DEF:
469     case WEAK_UNDEF * 16 + DYN_DEF:
470     case DYN_UNDEF * 16 + DYN_DEF:
471     case DYN_WEAK_UNDEF * 16 + DYN_DEF:
472       // Use a dynamic definition if we have a reference.
473       return true;
474
475     case COMMON * 16 + DYN_DEF:
476     case WEAK_COMMON * 16 + DYN_DEF:
477     case DYN_COMMON * 16 + DYN_DEF:
478     case DYN_WEAK_COMMON * 16 + DYN_DEF:
479       // Ignore a dynamic definition if we already have a common
480       // definition.
481       return false;
482
483     case DEF * 16 + DYN_WEAK_DEF:
484     case WEAK_DEF * 16 + DYN_WEAK_DEF:
485     case DYN_DEF * 16 + DYN_WEAK_DEF:
486     case DYN_WEAK_DEF * 16 + DYN_WEAK_DEF:
487       // Ignore a weak dynamic definition if we already have a
488       // definition.
489       return false;
490
491     case UNDEF * 16 + DYN_WEAK_DEF:
492     case WEAK_UNDEF * 16 + DYN_WEAK_DEF:
493     case DYN_UNDEF * 16 + DYN_WEAK_DEF:
494     case DYN_WEAK_UNDEF * 16 + DYN_WEAK_DEF:
495       // Use a weak dynamic definition if we have a reference.
496       return true;
497
498     case COMMON * 16 + DYN_WEAK_DEF:
499     case WEAK_COMMON * 16 + DYN_WEAK_DEF:
500     case DYN_COMMON * 16 + DYN_WEAK_DEF:
501     case DYN_WEAK_COMMON * 16 + DYN_WEAK_DEF:
502       // Ignore a weak dynamic definition if we already have a common
503       // definition.
504       return false;
505
506     case DEF * 16 + UNDEF:
507     case WEAK_DEF * 16 + UNDEF:
508     case DYN_DEF * 16 + UNDEF:
509     case DYN_WEAK_DEF * 16 + UNDEF:
510     case UNDEF * 16 + UNDEF:
511       // A new undefined reference tells us nothing.
512       return false;
513
514     case WEAK_UNDEF * 16 + UNDEF:
515     case DYN_UNDEF * 16 + UNDEF:
516     case DYN_WEAK_UNDEF * 16 + UNDEF:
517       // A strong undef overrides a dynamic or weak undef.
518       return true;
519
520     case COMMON * 16 + UNDEF:
521     case WEAK_COMMON * 16 + UNDEF:
522     case DYN_COMMON * 16 + UNDEF:
523     case DYN_WEAK_COMMON * 16 + UNDEF:
524       // A new undefined reference tells us nothing.
525       return false;
526
527     case DEF * 16 + WEAK_UNDEF:
528     case WEAK_DEF * 16 + WEAK_UNDEF:
529     case DYN_DEF * 16 + WEAK_UNDEF:
530     case DYN_WEAK_DEF * 16 + WEAK_UNDEF:
531     case UNDEF * 16 + WEAK_UNDEF:
532     case WEAK_UNDEF * 16 + WEAK_UNDEF:
533     case DYN_UNDEF * 16 + WEAK_UNDEF:
534     case DYN_WEAK_UNDEF * 16 + WEAK_UNDEF:
535     case COMMON * 16 + WEAK_UNDEF:
536     case WEAK_COMMON * 16 + WEAK_UNDEF:
537     case DYN_COMMON * 16 + WEAK_UNDEF:
538     case DYN_WEAK_COMMON * 16 + WEAK_UNDEF:
539       // A new weak undefined reference tells us nothing.
540       return false;
541
542     case DEF * 16 + DYN_UNDEF:
543     case WEAK_DEF * 16 + DYN_UNDEF:
544     case DYN_DEF * 16 + DYN_UNDEF:
545     case DYN_WEAK_DEF * 16 + DYN_UNDEF:
546     case UNDEF * 16 + DYN_UNDEF:
547     case WEAK_UNDEF * 16 + DYN_UNDEF:
548     case DYN_UNDEF * 16 + DYN_UNDEF:
549     case DYN_WEAK_UNDEF * 16 + DYN_UNDEF:
550     case COMMON * 16 + DYN_UNDEF:
551     case WEAK_COMMON * 16 + DYN_UNDEF:
552     case DYN_COMMON * 16 + DYN_UNDEF:
553     case DYN_WEAK_COMMON * 16 + DYN_UNDEF:
554       // A new dynamic undefined reference tells us nothing.
555       return false;
556
557     case DEF * 16 + DYN_WEAK_UNDEF:
558     case WEAK_DEF * 16 + DYN_WEAK_UNDEF:
559     case DYN_DEF * 16 + DYN_WEAK_UNDEF:
560     case DYN_WEAK_DEF * 16 + DYN_WEAK_UNDEF:
561     case UNDEF * 16 + DYN_WEAK_UNDEF:
562     case WEAK_UNDEF * 16 + DYN_WEAK_UNDEF:
563     case DYN_UNDEF * 16 + DYN_WEAK_UNDEF:
564     case DYN_WEAK_UNDEF * 16 + DYN_WEAK_UNDEF:
565     case COMMON * 16 + DYN_WEAK_UNDEF:
566     case WEAK_COMMON * 16 + DYN_WEAK_UNDEF:
567     case DYN_COMMON * 16 + DYN_WEAK_UNDEF:
568     case DYN_WEAK_COMMON * 16 + DYN_WEAK_UNDEF:
569       // A new weak dynamic undefined reference tells us nothing.
570       return false;
571
572     case DEF * 16 + COMMON:
573       // A common symbol does not override a definition.
574       return false;
575
576     case WEAK_DEF * 16 + COMMON:
577     case DYN_DEF * 16 + COMMON:
578     case DYN_WEAK_DEF * 16 + COMMON:
579       // A common symbol does override a weak definition or a dynamic
580       // definition.
581       return true;
582
583     case UNDEF * 16 + COMMON:
584     case WEAK_UNDEF * 16 + COMMON:
585     case DYN_UNDEF * 16 + COMMON:
586     case DYN_WEAK_UNDEF * 16 + COMMON:
587       // A common symbol is a definition for a reference.
588       return true;
589
590     case COMMON * 16 + COMMON:
591       // Set the size to the maximum.
592       *adjust_common_sizes = true;
593       return false;
594
595     case WEAK_COMMON * 16 + COMMON:
596       // I'm not sure just what a weak common symbol means, but
597       // presumably it can be overridden by a regular common symbol.
598       return true;
599
600     case DYN_COMMON * 16 + COMMON:
601     case DYN_WEAK_COMMON * 16 + COMMON:
602       // Use the real common symbol, but adjust the size if necessary.
603       *adjust_common_sizes = true;
604       return true;
605
606     case DEF * 16 + WEAK_COMMON:
607     case WEAK_DEF * 16 + WEAK_COMMON:
608     case DYN_DEF * 16 + WEAK_COMMON:
609     case DYN_WEAK_DEF * 16 + WEAK_COMMON:
610       // Whatever a weak common symbol is, it won't override a
611       // definition.
612       return false;
613
614     case UNDEF * 16 + WEAK_COMMON:
615     case WEAK_UNDEF * 16 + WEAK_COMMON:
616     case DYN_UNDEF * 16 + WEAK_COMMON:
617     case DYN_WEAK_UNDEF * 16 + WEAK_COMMON:
618       // A weak common symbol is better than an undefined symbol.
619       return true;
620
621     case COMMON * 16 + WEAK_COMMON:
622     case WEAK_COMMON * 16 + WEAK_COMMON:
623     case DYN_COMMON * 16 + WEAK_COMMON:
624     case DYN_WEAK_COMMON * 16 + WEAK_COMMON:
625       // Ignore a weak common symbol in the presence of a real common
626       // symbol.
627       return false;
628
629     case DEF * 16 + DYN_COMMON:
630     case WEAK_DEF * 16 + DYN_COMMON:
631     case DYN_DEF * 16 + DYN_COMMON:
632     case DYN_WEAK_DEF * 16 + DYN_COMMON:
633       // Ignore a dynamic common symbol in the presence of a
634       // definition.
635       return false;
636
637     case UNDEF * 16 + DYN_COMMON:
638     case WEAK_UNDEF * 16 + DYN_COMMON:
639     case DYN_UNDEF * 16 + DYN_COMMON:
640     case DYN_WEAK_UNDEF * 16 + DYN_COMMON:
641       // A dynamic common symbol is a definition of sorts.
642       return true;
643
644     case COMMON * 16 + DYN_COMMON:
645     case WEAK_COMMON * 16 + DYN_COMMON:
646     case DYN_COMMON * 16 + DYN_COMMON:
647     case DYN_WEAK_COMMON * 16 + DYN_COMMON:
648       // Set the size to the maximum.
649       *adjust_common_sizes = true;
650       return false;
651
652     case DEF * 16 + DYN_WEAK_COMMON:
653     case WEAK_DEF * 16 + DYN_WEAK_COMMON:
654     case DYN_DEF * 16 + DYN_WEAK_COMMON:
655     case DYN_WEAK_DEF * 16 + DYN_WEAK_COMMON:
656       // A common symbol is ignored in the face of a definition.
657       return false;
658
659     case UNDEF * 16 + DYN_WEAK_COMMON:
660     case WEAK_UNDEF * 16 + DYN_WEAK_COMMON:
661     case DYN_UNDEF * 16 + DYN_WEAK_COMMON:
662     case DYN_WEAK_UNDEF * 16 + DYN_WEAK_COMMON:
663       // I guess a weak common symbol is better than a definition.
664       return true;
665
666     case COMMON * 16 + DYN_WEAK_COMMON:
667     case WEAK_COMMON * 16 + DYN_WEAK_COMMON:
668     case DYN_COMMON * 16 + DYN_WEAK_COMMON:
669     case DYN_WEAK_COMMON * 16 + DYN_WEAK_COMMON:
670       // Set the size to the maximum.
671       *adjust_common_sizes = true;
672       return false;
673
674     default:
675       gold_unreachable();
676     }
677 }
678
679 // A special case of should_override which is only called for a strong
680 // defined symbol from a regular object file.  This is used when
681 // defining special symbols.
682
683 bool
684 Symbol_table::should_override_with_special(const Symbol* to)
685 {
686   bool adjust_common_sizes;
687   unsigned int frombits = global_flag | regular_flag | def_flag;
688   bool ret = Symbol_table::should_override(to, frombits, NULL,
689                                            &adjust_common_sizes);
690   gold_assert(!adjust_common_sizes);
691   return ret;
692 }
693
694 // Override symbol base with a special symbol.
695
696 void
697 Symbol::override_base_with_special(const Symbol* from)
698 {
699   gold_assert(this->name_ == from->name_ || this->has_alias());
700
701   this->source_ = from->source_;
702   switch (from->source_)
703     {
704     case FROM_OBJECT:
705       this->u_.from_object = from->u_.from_object;
706       break;
707     case IN_OUTPUT_DATA:
708       this->u_.in_output_data = from->u_.in_output_data;
709       break;
710     case IN_OUTPUT_SEGMENT:
711       this->u_.in_output_segment = from->u_.in_output_segment;
712       break;
713     case IS_CONSTANT:
714     case IS_UNDEFINED:
715       break;
716     default:
717       gold_unreachable();
718       break;
719     }
720
721   this->override_version(from->version_);
722   this->type_ = from->type_;
723   this->binding_ = from->binding_;
724   this->visibility_ = from->visibility_;
725   this->nonvis_ = from->nonvis_;
726
727   // Special symbols are always considered to be regular symbols.
728   this->in_reg_ = true;
729
730   if (from->needs_dynsym_entry_)
731     this->needs_dynsym_entry_ = true;
732   if (from->needs_dynsym_value_)
733     this->needs_dynsym_value_ = true;
734
735   // We shouldn't see these flags.  If we do, we need to handle them
736   // somehow.
737   gold_assert(!from->is_target_special_ || this->is_target_special_);
738   gold_assert(!from->is_forwarder_);
739   gold_assert(!from->has_plt_offset_);
740   gold_assert(!from->has_warning_);
741   gold_assert(!from->is_copied_from_dynobj_);
742   gold_assert(!from->is_forced_local_);
743 }
744
745 // Override a symbol with a special symbol.
746
747 template<int size>
748 void
749 Sized_symbol<size>::override_with_special(const Sized_symbol<size>* from)
750 {
751   this->override_base_with_special(from);
752   this->value_ = from->value_;
753   this->symsize_ = from->symsize_;
754 }
755
756 // Override TOSYM with the special symbol FROMSYM.  This handles all
757 // aliases of TOSYM.
758
759 template<int size>
760 void
761 Symbol_table::override_with_special(Sized_symbol<size>* tosym,
762                                     const Sized_symbol<size>* fromsym)
763 {
764   tosym->override_with_special(fromsym);
765   if (tosym->has_alias())
766     {
767       Symbol* sym = this->weak_aliases_[tosym];
768       gold_assert(sym != NULL);
769       Sized_symbol<size>* ssym = this->get_sized_symbol<size>(sym);
770       do
771         {
772           ssym->override_with_special(fromsym);
773           sym = this->weak_aliases_[ssym];
774           gold_assert(sym != NULL);
775           ssym = this->get_sized_symbol<size>(sym);
776         }
777       while (ssym != tosym);
778     }
779   if (tosym->binding() == elfcpp::STB_LOCAL)
780     this->force_local(tosym);
781 }
782
783 // Instantiate the templates we need.  We could use the configure
784 // script to restrict this to only the ones needed for implemented
785 // targets.
786
787 #ifdef HAVE_TARGET_32_LITTLE
788 template
789 void
790 Symbol_table::resolve<32, false>(
791     Sized_symbol<32>* to,
792     const elfcpp::Sym<32, false>& sym,
793     unsigned int st_shndx,
794     bool is_ordinary,
795     unsigned int orig_st_shndx,
796     Object* object,
797     const char* version);
798 #endif
799
800 #ifdef HAVE_TARGET_32_BIG
801 template
802 void
803 Symbol_table::resolve<32, true>(
804     Sized_symbol<32>* to,
805     const elfcpp::Sym<32, true>& sym,
806     unsigned int st_shndx,
807     bool is_ordinary,
808     unsigned int orig_st_shndx,
809     Object* object,
810     const char* version);
811 #endif
812
813 #ifdef HAVE_TARGET_64_LITTLE
814 template
815 void
816 Symbol_table::resolve<64, false>(
817     Sized_symbol<64>* to,
818     const elfcpp::Sym<64, false>& sym,
819     unsigned int st_shndx,
820     bool is_ordinary,
821     unsigned int orig_st_shndx,
822     Object* object,
823     const char* version);
824 #endif
825
826 #ifdef HAVE_TARGET_64_BIG
827 template
828 void
829 Symbol_table::resolve<64, true>(
830     Sized_symbol<64>* to,
831     const elfcpp::Sym<64, true>& sym,
832     unsigned int st_shndx,
833     bool is_ordinary,
834     unsigned int orig_st_shndx,
835     Object* object,
836     const char* version);
837 #endif
838
839 #if defined(HAVE_TARGET_32_LITTLE) || defined(HAVE_TARGET_32_BIG)
840 template
841 void
842 Symbol_table::override_with_special<32>(Sized_symbol<32>*,
843                                         const Sized_symbol<32>*);
844 #endif
845
846 #if defined(HAVE_TARGET_64_LITTLE) || defined(HAVE_TARGET_64_BIG)
847 template
848 void
849 Symbol_table::override_with_special<64>(Sized_symbol<64>*,
850                                         const Sized_symbol<64>*);
851 #endif
852
853 } // End namespace gold.