Use @acronym{MIPS} where appropriate.
[external/binutils.git] / gold / i386.cc
1 // i386.cc -- i386 target support for gold.
2
3 // Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
4 // Free Software Foundation, Inc.
5 // Written by Ian Lance Taylor <iant@google.com>.
6
7 // This file is part of gold.
8
9 // This program is free software; you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation; either version 3 of the License, or
12 // (at your option) any later version.
13
14 // This program is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 // GNU General Public License for more details.
18
19 // You should have received a copy of the GNU General Public License
20 // along with this program; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 // MA 02110-1301, USA.
23
24 #include "gold.h"
25
26 #include <cstring>
27
28 #include "elfcpp.h"
29 #include "dwarf.h"
30 #include "parameters.h"
31 #include "reloc.h"
32 #include "i386.h"
33 #include "object.h"
34 #include "symtab.h"
35 #include "layout.h"
36 #include "output.h"
37 #include "copy-relocs.h"
38 #include "target.h"
39 #include "target-reloc.h"
40 #include "target-select.h"
41 #include "tls.h"
42 #include "freebsd.h"
43 #include "nacl.h"
44 #include "gc.h"
45
46 namespace
47 {
48
49 using namespace gold;
50
51 // A class to handle the PLT data.
52 // This is an abstract base class that handles most of the linker details
53 // but does not know the actual contents of PLT entries.  The derived
54 // classes below fill in those details.
55
56 class Output_data_plt_i386 : public Output_section_data
57 {
58  public:
59   typedef Output_data_reloc<elfcpp::SHT_REL, true, 32, false> Reloc_section;
60
61   Output_data_plt_i386(Layout*, uint64_t addralign,
62                        Output_data_space*, Output_data_space*);
63
64   // Add an entry to the PLT.
65   void
66   add_entry(Symbol_table*, Layout*, Symbol* gsym);
67
68   // Add an entry to the PLT for a local STT_GNU_IFUNC symbol.
69   unsigned int
70   add_local_ifunc_entry(Symbol_table*, Layout*,
71                         Sized_relobj_file<32, false>* relobj,
72                         unsigned int local_sym_index);
73
74   // Return the .rel.plt section data.
75   Reloc_section*
76   rel_plt() const
77   { return this->rel_; }
78
79   // Return where the TLS_DESC relocations should go.
80   Reloc_section*
81   rel_tls_desc(Layout*);
82
83   // Return where the IRELATIVE relocations should go.
84   Reloc_section*
85   rel_irelative(Symbol_table*, Layout*);
86
87   // Return whether we created a section for IRELATIVE relocations.
88   bool
89   has_irelative_section() const
90   { return this->irelative_rel_ != NULL; }
91
92   // Return the number of PLT entries.
93   unsigned int
94   entry_count() const
95   { return this->count_ + this->irelative_count_; }
96
97   // Return the offset of the first non-reserved PLT entry.
98   unsigned int
99   first_plt_entry_offset()
100   { return this->get_plt_entry_size(); }
101
102   // Return the size of a PLT entry.
103   unsigned int
104   get_plt_entry_size() const
105   { return this->do_get_plt_entry_size(); }
106
107   // Return the PLT address to use for a global symbol.
108   uint64_t
109   address_for_global(const Symbol*);
110
111   // Return the PLT address to use for a local symbol.
112   uint64_t
113   address_for_local(const Relobj*, unsigned int symndx);
114
115   // Add .eh_frame information for the PLT.
116   void
117   add_eh_frame(Layout* layout)
118   { this->do_add_eh_frame(layout); }
119
120  protected:
121   // Fill the first PLT entry, given the pointer to the PLT section data
122   // and the runtime address of the GOT.
123   void
124   fill_first_plt_entry(unsigned char* pov,
125                        elfcpp::Elf_types<32>::Elf_Addr got_address)
126   { this->do_fill_first_plt_entry(pov, got_address); }
127
128   // Fill a normal PLT entry, given the pointer to the entry's data in the
129   // section, the runtime address of the GOT, the offset into the GOT of
130   // the corresponding slot, the offset into the relocation section of the
131   // corresponding reloc, and the offset of this entry within the whole
132   // PLT.  Return the offset from this PLT entry's runtime address that
133   // should be used to compute the initial value of the GOT slot.
134   unsigned int
135   fill_plt_entry(unsigned char* pov,
136                  elfcpp::Elf_types<32>::Elf_Addr got_address,
137                  unsigned int got_offset,
138                  unsigned int plt_offset,
139                  unsigned int plt_rel_offset)
140   {
141     return this->do_fill_plt_entry(pov, got_address, got_offset,
142                                    plt_offset, plt_rel_offset);
143   }
144
145   virtual unsigned int
146   do_get_plt_entry_size() const = 0;
147
148   virtual void
149   do_fill_first_plt_entry(unsigned char* pov,
150                           elfcpp::Elf_types<32>::Elf_Addr got_address) = 0;
151
152   virtual unsigned int
153   do_fill_plt_entry(unsigned char* pov,
154                     elfcpp::Elf_types<32>::Elf_Addr got_address,
155                     unsigned int got_offset,
156                     unsigned int plt_offset,
157                     unsigned int plt_rel_offset) = 0;
158
159   virtual void
160   do_add_eh_frame(Layout*) = 0;
161
162   void
163   do_adjust_output_section(Output_section* os);
164
165   // Write to a map file.
166   void
167   do_print_to_mapfile(Mapfile* mapfile) const
168   { mapfile->print_output_data(this, _("** PLT")); }
169
170   // The .eh_frame unwind information for the PLT.
171   // The CIE is common across variants of the PLT format.
172   static const int plt_eh_frame_cie_size = 16;
173   static const unsigned char plt_eh_frame_cie[plt_eh_frame_cie_size];
174
175  private:
176   // Set the final size.
177   void
178   set_final_data_size()
179   {
180     this->set_data_size((this->count_ + this->irelative_count_ + 1)
181                         * this->get_plt_entry_size());
182   }
183
184   // Write out the PLT data.
185   void
186   do_write(Output_file*);
187
188   // We keep a list of global STT_GNU_IFUNC symbols, each with its
189   // offset in the GOT.
190   struct Global_ifunc
191   {
192     Symbol* sym;
193     unsigned int got_offset;
194   };
195
196   // We keep a list of local STT_GNU_IFUNC symbols, each with its
197   // offset in the GOT.
198   struct Local_ifunc
199   {
200     Sized_relobj_file<32, false>* object;
201     unsigned int local_sym_index;
202     unsigned int got_offset;
203   };
204
205   // A pointer to the Layout class, so that we can find the .dynamic
206   // section when we write out the GOT PLT section.
207   Layout* layout_;
208   // The reloc section.
209   Reloc_section* rel_;
210   // The TLS_DESC relocations, if necessary.  These must follow the
211   // regular PLT relocs.
212   Reloc_section* tls_desc_rel_;
213   // The IRELATIVE relocations, if necessary.  These must follow the
214   // regular relocatoins and the TLS_DESC relocations.
215   Reloc_section* irelative_rel_;
216   // The .got.plt section.
217   Output_data_space* got_plt_;
218   // The part of the .got.plt section used for IRELATIVE relocs.
219   Output_data_space* got_irelative_;
220   // The number of PLT entries.
221   unsigned int count_;
222   // Number of PLT entries with R_386_IRELATIVE relocs.  These follow
223   // the regular PLT entries.
224   unsigned int irelative_count_;
225   // Global STT_GNU_IFUNC symbols.
226   std::vector<Global_ifunc> global_ifuncs_;
227   // Local STT_GNU_IFUNC symbols.
228   std::vector<Local_ifunc> local_ifuncs_;
229 };
230
231 // This is an abstract class for the standard PLT layout.
232 // The derived classes below handle the actual PLT contents
233 // for the executable (non-PIC) and shared-library (PIC) cases.
234 // The unwind information is uniform across those two, so it's here.
235
236 class Output_data_plt_i386_standard : public Output_data_plt_i386
237 {
238  public:
239   Output_data_plt_i386_standard(Layout* layout,
240                                 Output_data_space* got_plt,
241                                 Output_data_space* got_irelative)
242     : Output_data_plt_i386(layout, plt_entry_size, got_plt, got_irelative)
243   { }
244
245  protected:
246   virtual unsigned int
247   do_get_plt_entry_size() const
248   { return plt_entry_size; }
249
250   virtual void
251   do_add_eh_frame(Layout* layout)
252   {
253     layout->add_eh_frame_for_plt(this, plt_eh_frame_cie, plt_eh_frame_cie_size,
254                                  plt_eh_frame_fde, plt_eh_frame_fde_size);
255   }
256
257   // The size of an entry in the PLT.
258   static const int plt_entry_size = 16;
259
260   // The .eh_frame unwind information for the PLT.
261   static const int plt_eh_frame_fde_size = 32;
262   static const unsigned char plt_eh_frame_fde[plt_eh_frame_fde_size];
263 };
264
265 // Actually fill the PLT contents for an executable (non-PIC).
266
267 class Output_data_plt_i386_exec : public Output_data_plt_i386_standard
268 {
269 public:
270   Output_data_plt_i386_exec(Layout* layout,
271                             Output_data_space* got_plt,
272                             Output_data_space* got_irelative)
273     : Output_data_plt_i386_standard(layout, got_plt, got_irelative)
274   { }
275
276  protected:
277   virtual void
278   do_fill_first_plt_entry(unsigned char* pov,
279                           elfcpp::Elf_types<32>::Elf_Addr got_address);
280
281   virtual unsigned int
282   do_fill_plt_entry(unsigned char* pov,
283                     elfcpp::Elf_types<32>::Elf_Addr got_address,
284                     unsigned int got_offset,
285                     unsigned int plt_offset,
286                     unsigned int plt_rel_offset);
287
288  private:
289   // The first entry in the PLT for an executable.
290   static const unsigned char first_plt_entry[plt_entry_size];
291
292   // Other entries in the PLT for an executable.
293   static const unsigned char plt_entry[plt_entry_size];
294 };
295
296 // Actually fill the PLT contents for a shared library (PIC).
297
298 class Output_data_plt_i386_dyn : public Output_data_plt_i386_standard
299 {
300  public:
301   Output_data_plt_i386_dyn(Layout* layout,
302                            Output_data_space* got_plt,
303                            Output_data_space* got_irelative)
304     : Output_data_plt_i386_standard(layout, got_plt, got_irelative)
305   { }
306
307  protected:
308   virtual void
309   do_fill_first_plt_entry(unsigned char* pov, elfcpp::Elf_types<32>::Elf_Addr);
310
311   virtual unsigned int
312   do_fill_plt_entry(unsigned char* pov,
313                     elfcpp::Elf_types<32>::Elf_Addr,
314                     unsigned int got_offset,
315                     unsigned int plt_offset,
316                     unsigned int plt_rel_offset);
317
318  private:
319   // The first entry in the PLT for a shared object.
320   static const unsigned char first_plt_entry[plt_entry_size];
321
322   // Other entries in the PLT for a shared object.
323   static const unsigned char plt_entry[plt_entry_size];
324 };
325
326 // The i386 target class.
327 // TLS info comes from
328 //   http://people.redhat.com/drepper/tls.pdf
329 //   http://www.lsd.ic.unicamp.br/~oliva/writeups/TLS/RFC-TLSDESC-x86.txt
330
331 class Target_i386 : public Sized_target<32, false>
332 {
333  public:
334   typedef Output_data_reloc<elfcpp::SHT_REL, true, 32, false> Reloc_section;
335
336   Target_i386(const Target::Target_info* info = &i386_info)
337     : Sized_target<32, false>(info),
338       got_(NULL), plt_(NULL), got_plt_(NULL), got_irelative_(NULL),
339       got_tlsdesc_(NULL), global_offset_table_(NULL), rel_dyn_(NULL),
340       rel_irelative_(NULL), copy_relocs_(elfcpp::R_386_COPY), dynbss_(NULL),
341       got_mod_index_offset_(-1U), tls_base_symbol_defined_(false)
342   { }
343
344   // Process the relocations to determine unreferenced sections for
345   // garbage collection.
346   void
347   gc_process_relocs(Symbol_table* symtab,
348                     Layout* layout,
349                     Sized_relobj_file<32, false>* object,
350                     unsigned int data_shndx,
351                     unsigned int sh_type,
352                     const unsigned char* prelocs,
353                     size_t reloc_count,
354                     Output_section* output_section,
355                     bool needs_special_offset_handling,
356                     size_t local_symbol_count,
357                     const unsigned char* plocal_symbols);
358
359   // Scan the relocations to look for symbol adjustments.
360   void
361   scan_relocs(Symbol_table* symtab,
362               Layout* layout,
363               Sized_relobj_file<32, false>* object,
364               unsigned int data_shndx,
365               unsigned int sh_type,
366               const unsigned char* prelocs,
367               size_t reloc_count,
368               Output_section* output_section,
369               bool needs_special_offset_handling,
370               size_t local_symbol_count,
371               const unsigned char* plocal_symbols);
372
373   // Finalize the sections.
374   void
375   do_finalize_sections(Layout*, const Input_objects*, Symbol_table*);
376
377   // Return the value to use for a dynamic which requires special
378   // treatment.
379   uint64_t
380   do_dynsym_value(const Symbol*) const;
381
382   // Relocate a section.
383   void
384   relocate_section(const Relocate_info<32, false>*,
385                    unsigned int sh_type,
386                    const unsigned char* prelocs,
387                    size_t reloc_count,
388                    Output_section* output_section,
389                    bool needs_special_offset_handling,
390                    unsigned char* view,
391                    elfcpp::Elf_types<32>::Elf_Addr view_address,
392                    section_size_type view_size,
393                    const Reloc_symbol_changes*);
394
395   // Scan the relocs during a relocatable link.
396   void
397   scan_relocatable_relocs(Symbol_table* symtab,
398                           Layout* layout,
399                           Sized_relobj_file<32, false>* object,
400                           unsigned int data_shndx,
401                           unsigned int sh_type,
402                           const unsigned char* prelocs,
403                           size_t reloc_count,
404                           Output_section* output_section,
405                           bool needs_special_offset_handling,
406                           size_t local_symbol_count,
407                           const unsigned char* plocal_symbols,
408                           Relocatable_relocs*);
409
410   // Relocate a section during a relocatable link.
411   void
412   relocate_for_relocatable(const Relocate_info<32, false>*,
413                            unsigned int sh_type,
414                            const unsigned char* prelocs,
415                            size_t reloc_count,
416                            Output_section* output_section,
417                            off_t offset_in_output_section,
418                            const Relocatable_relocs*,
419                            unsigned char* view,
420                            elfcpp::Elf_types<32>::Elf_Addr view_address,
421                            section_size_type view_size,
422                            unsigned char* reloc_view,
423                            section_size_type reloc_view_size);
424
425   // Return a string used to fill a code section with nops.
426   std::string
427   do_code_fill(section_size_type length) const;
428
429   // Return whether SYM is defined by the ABI.
430   bool
431   do_is_defined_by_abi(const Symbol* sym) const
432   { return strcmp(sym->name(), "___tls_get_addr") == 0; }
433
434   // Return whether a symbol name implies a local label.  The UnixWare
435   // 2.1 cc generates temporary symbols that start with .X, so we
436   // recognize them here.  FIXME: do other SVR4 compilers also use .X?.
437   // If so, we should move the .X recognition into
438   // Target::do_is_local_label_name.
439   bool
440   do_is_local_label_name(const char* name) const
441   {
442     if (name[0] == '.' && name[1] == 'X')
443       return true;
444     return Target::do_is_local_label_name(name);
445   }
446
447   // Return the PLT address to use for a global symbol.
448   uint64_t
449   do_plt_address_for_global(const Symbol* gsym) const
450   { return this->plt_section()->address_for_global(gsym); }
451
452   uint64_t
453   do_plt_address_for_local(const Relobj* relobj, unsigned int symndx) const
454   { return this->plt_section()->address_for_local(relobj, symndx); }
455
456   // We can tell whether we take the address of a function.
457   inline bool
458   do_can_check_for_function_pointers() const
459   { return true; }
460
461   // Return the base for a DW_EH_PE_datarel encoding.
462   uint64_t
463   do_ehframe_datarel_base() const;
464
465   // Return whether SYM is call to a non-split function.
466   bool
467   do_is_call_to_non_split(const Symbol* sym, unsigned int) const;
468
469   // Adjust -fsplit-stack code which calls non-split-stack code.
470   void
471   do_calls_non_split(Relobj* object, unsigned int shndx,
472                      section_offset_type fnoffset, section_size_type fnsize,
473                      unsigned char* view, section_size_type view_size,
474                      std::string* from, std::string* to) const;
475
476   // Return the size of the GOT section.
477   section_size_type
478   got_size() const
479   {
480     gold_assert(this->got_ != NULL);
481     return this->got_->data_size();
482   }
483
484   // Return the number of entries in the GOT.
485   unsigned int
486   got_entry_count() const
487   {
488     if (this->got_ == NULL)
489       return 0;
490     return this->got_size() / 4;
491   }
492
493   // Return the number of entries in the PLT.
494   unsigned int
495   plt_entry_count() const;
496
497   // Return the offset of the first non-reserved PLT entry.
498   unsigned int
499   first_plt_entry_offset() const;
500
501   // Return the size of each PLT entry.
502   unsigned int
503   plt_entry_size() const;
504
505  protected:
506   // Instantiate the plt_ member.
507   // This chooses the right PLT flavor for an executable or a shared object.
508   Output_data_plt_i386*
509   make_data_plt(Layout* layout,
510                 Output_data_space* got_plt,
511                 Output_data_space* got_irelative,
512                 bool dyn)
513   { return this->do_make_data_plt(layout, got_plt, got_irelative, dyn); }
514
515   virtual Output_data_plt_i386*
516   do_make_data_plt(Layout* layout,
517                    Output_data_space* got_plt,
518                    Output_data_space* got_irelative,
519                    bool dyn)
520   {
521     if (dyn)
522       return new Output_data_plt_i386_dyn(layout, got_plt, got_irelative);
523     else
524       return new Output_data_plt_i386_exec(layout, got_plt, got_irelative);
525   }
526
527  private:
528   // The class which scans relocations.
529   struct Scan
530   {
531     static inline int
532
533     get_reference_flags(unsigned int r_type);
534
535     inline void
536     local(Symbol_table* symtab, Layout* layout, Target_i386* target,
537           Sized_relobj_file<32, false>* object,
538           unsigned int data_shndx,
539           Output_section* output_section,
540           const elfcpp::Rel<32, false>& reloc, unsigned int r_type,
541           const elfcpp::Sym<32, false>& lsym);
542
543     inline void
544     global(Symbol_table* symtab, Layout* layout, Target_i386* target,
545            Sized_relobj_file<32, false>* object,
546            unsigned int data_shndx,
547            Output_section* output_section,
548            const elfcpp::Rel<32, false>& reloc, unsigned int r_type,
549            Symbol* gsym);
550
551     inline bool
552     local_reloc_may_be_function_pointer(Symbol_table* symtab, Layout* layout,
553                                         Target_i386* target,
554                                         Sized_relobj_file<32, false>* object,
555                                         unsigned int data_shndx,
556                                         Output_section* output_section,
557                                         const elfcpp::Rel<32, false>& reloc,
558                                         unsigned int r_type,
559                                         const elfcpp::Sym<32, false>& lsym);
560
561     inline bool
562     global_reloc_may_be_function_pointer(Symbol_table* symtab, Layout* layout,
563                                          Target_i386* target,
564                                          Sized_relobj_file<32, false>* object,
565                                          unsigned int data_shndx,
566                                          Output_section* output_section,
567                                          const elfcpp::Rel<32, false>& reloc,
568                                          unsigned int r_type,
569                                          Symbol* gsym);
570
571     inline bool
572     possible_function_pointer_reloc(unsigned int r_type);
573
574     bool
575     reloc_needs_plt_for_ifunc(Sized_relobj_file<32, false>*,
576                               unsigned int r_type);
577
578     static void
579     unsupported_reloc_local(Sized_relobj_file<32, false>*, unsigned int r_type);
580
581     static void
582     unsupported_reloc_global(Sized_relobj_file<32, false>*, unsigned int r_type,
583                              Symbol*);
584   };
585
586   // The class which implements relocation.
587   class Relocate
588   {
589    public:
590     Relocate()
591       : skip_call_tls_get_addr_(false),
592         local_dynamic_type_(LOCAL_DYNAMIC_NONE)
593     { }
594
595     ~Relocate()
596     {
597       if (this->skip_call_tls_get_addr_)
598         {
599           // FIXME: This needs to specify the location somehow.
600           gold_error(_("missing expected TLS relocation"));
601         }
602     }
603
604     // Return whether the static relocation needs to be applied.
605     inline bool
606     should_apply_static_reloc(const Sized_symbol<32>* gsym,
607                               unsigned int r_type,
608                               bool is_32bit,
609                               Output_section* output_section);
610
611     // Do a relocation.  Return false if the caller should not issue
612     // any warnings about this relocation.
613     inline bool
614     relocate(const Relocate_info<32, false>*, Target_i386*, Output_section*,
615              size_t relnum, const elfcpp::Rel<32, false>&,
616              unsigned int r_type, const Sized_symbol<32>*,
617              const Symbol_value<32>*,
618              unsigned char*, elfcpp::Elf_types<32>::Elf_Addr,
619              section_size_type);
620
621    private:
622     // Do a TLS relocation.
623     inline void
624     relocate_tls(const Relocate_info<32, false>*, Target_i386* target,
625                  size_t relnum, const elfcpp::Rel<32, false>&,
626                  unsigned int r_type, const Sized_symbol<32>*,
627                  const Symbol_value<32>*,
628                  unsigned char*, elfcpp::Elf_types<32>::Elf_Addr,
629                  section_size_type);
630
631     // Do a TLS General-Dynamic to Initial-Exec transition.
632     inline void
633     tls_gd_to_ie(const Relocate_info<32, false>*, size_t relnum,
634                  Output_segment* tls_segment,
635                  const elfcpp::Rel<32, false>&, unsigned int r_type,
636                  elfcpp::Elf_types<32>::Elf_Addr value,
637                  unsigned char* view,
638                  section_size_type view_size);
639
640     // Do a TLS General-Dynamic to Local-Exec transition.
641     inline void
642     tls_gd_to_le(const Relocate_info<32, false>*, size_t relnum,
643                  Output_segment* tls_segment,
644                  const elfcpp::Rel<32, false>&, unsigned int r_type,
645                  elfcpp::Elf_types<32>::Elf_Addr value,
646                  unsigned char* view,
647                  section_size_type view_size);
648
649     // Do a TLS_GOTDESC or TLS_DESC_CALL General-Dynamic to Initial-Exec
650     // transition.
651     inline void
652     tls_desc_gd_to_ie(const Relocate_info<32, false>*, size_t relnum,
653                       Output_segment* tls_segment,
654                       const elfcpp::Rel<32, false>&, unsigned int r_type,
655                       elfcpp::Elf_types<32>::Elf_Addr value,
656                       unsigned char* view,
657                       section_size_type view_size);
658
659     // Do a TLS_GOTDESC or TLS_DESC_CALL General-Dynamic to Local-Exec
660     // transition.
661     inline void
662     tls_desc_gd_to_le(const Relocate_info<32, false>*, size_t relnum,
663                       Output_segment* tls_segment,
664                       const elfcpp::Rel<32, false>&, unsigned int r_type,
665                       elfcpp::Elf_types<32>::Elf_Addr value,
666                       unsigned char* view,
667                       section_size_type view_size);
668
669     // Do a TLS Local-Dynamic to Local-Exec transition.
670     inline void
671     tls_ld_to_le(const Relocate_info<32, false>*, size_t relnum,
672                  Output_segment* tls_segment,
673                  const elfcpp::Rel<32, false>&, unsigned int r_type,
674                  elfcpp::Elf_types<32>::Elf_Addr value,
675                  unsigned char* view,
676                  section_size_type view_size);
677
678     // Do a TLS Initial-Exec to Local-Exec transition.
679     static inline void
680     tls_ie_to_le(const Relocate_info<32, false>*, size_t relnum,
681                  Output_segment* tls_segment,
682                  const elfcpp::Rel<32, false>&, unsigned int r_type,
683                  elfcpp::Elf_types<32>::Elf_Addr value,
684                  unsigned char* view,
685                  section_size_type view_size);
686
687     // We need to keep track of which type of local dynamic relocation
688     // we have seen, so that we can optimize R_386_TLS_LDO_32 correctly.
689     enum Local_dynamic_type
690     {
691       LOCAL_DYNAMIC_NONE,
692       LOCAL_DYNAMIC_SUN,
693       LOCAL_DYNAMIC_GNU
694     };
695
696     // This is set if we should skip the next reloc, which should be a
697     // PLT32 reloc against ___tls_get_addr.
698     bool skip_call_tls_get_addr_;
699     // The type of local dynamic relocation we have seen in the section
700     // being relocated, if any.
701     Local_dynamic_type local_dynamic_type_;
702   };
703
704   // A class which returns the size required for a relocation type,
705   // used while scanning relocs during a relocatable link.
706   class Relocatable_size_for_reloc
707   {
708    public:
709     unsigned int
710     get_size_for_reloc(unsigned int, Relobj*);
711   };
712
713   // Adjust TLS relocation type based on the options and whether this
714   // is a local symbol.
715   static tls::Tls_optimization
716   optimize_tls_reloc(bool is_final, int r_type);
717
718   // Get the GOT section, creating it if necessary.
719   Output_data_got<32, false>*
720   got_section(Symbol_table*, Layout*);
721
722   // Get the GOT PLT section.
723   Output_data_space*
724   got_plt_section() const
725   {
726     gold_assert(this->got_plt_ != NULL);
727     return this->got_plt_;
728   }
729
730   // Get the GOT section for TLSDESC entries.
731   Output_data_got<32, false>*
732   got_tlsdesc_section() const
733   {
734     gold_assert(this->got_tlsdesc_ != NULL);
735     return this->got_tlsdesc_;
736   }
737
738   // Create the PLT section.
739   void
740   make_plt_section(Symbol_table* symtab, Layout* layout);
741
742   // Create a PLT entry for a global symbol.
743   void
744   make_plt_entry(Symbol_table*, Layout*, Symbol*);
745
746   // Create a PLT entry for a local STT_GNU_IFUNC symbol.
747   void
748   make_local_ifunc_plt_entry(Symbol_table*, Layout*,
749                              Sized_relobj_file<32, false>* relobj,
750                              unsigned int local_sym_index);
751
752   // Define the _TLS_MODULE_BASE_ symbol in the TLS segment.
753   void
754   define_tls_base_symbol(Symbol_table*, Layout*);
755
756   // Create a GOT entry for the TLS module index.
757   unsigned int
758   got_mod_index_entry(Symbol_table* symtab, Layout* layout,
759                       Sized_relobj_file<32, false>* object);
760
761   // Get the PLT section.
762   Output_data_plt_i386*
763   plt_section() const
764   {
765     gold_assert(this->plt_ != NULL);
766     return this->plt_;
767   }
768
769   // Get the dynamic reloc section, creating it if necessary.
770   Reloc_section*
771   rel_dyn_section(Layout*);
772
773   // Get the section to use for TLS_DESC relocations.
774   Reloc_section*
775   rel_tls_desc_section(Layout*) const;
776
777   // Get the section to use for IRELATIVE relocations.
778   Reloc_section*
779   rel_irelative_section(Layout*);
780
781   // Add a potential copy relocation.
782   void
783   copy_reloc(Symbol_table* symtab, Layout* layout,
784              Sized_relobj_file<32, false>* object,
785              unsigned int shndx, Output_section* output_section,
786              Symbol* sym, const elfcpp::Rel<32, false>& reloc)
787   {
788     this->copy_relocs_.copy_reloc(symtab, layout,
789                                   symtab->get_sized_symbol<32>(sym),
790                                   object, shndx, output_section, reloc,
791                                   this->rel_dyn_section(layout));
792   }
793
794   // Information about this specific target which we pass to the
795   // general Target structure.
796   static const Target::Target_info i386_info;
797
798   // The types of GOT entries needed for this platform.
799   // These values are exposed to the ABI in an incremental link.
800   // Do not renumber existing values without changing the version
801   // number of the .gnu_incremental_inputs section.
802   enum Got_type
803   {
804     GOT_TYPE_STANDARD = 0,      // GOT entry for a regular symbol
805     GOT_TYPE_TLS_NOFFSET = 1,   // GOT entry for negative TLS offset
806     GOT_TYPE_TLS_OFFSET = 2,    // GOT entry for positive TLS offset
807     GOT_TYPE_TLS_PAIR = 3,      // GOT entry for TLS module/offset pair
808     GOT_TYPE_TLS_DESC = 4       // GOT entry for TLS_DESC pair
809   };
810
811   // The GOT section.
812   Output_data_got<32, false>* got_;
813   // The PLT section.
814   Output_data_plt_i386* plt_;
815   // The GOT PLT section.
816   Output_data_space* got_plt_;
817   // The GOT section for IRELATIVE relocations.
818   Output_data_space* got_irelative_;
819   // The GOT section for TLSDESC relocations.
820   Output_data_got<32, false>* got_tlsdesc_;
821   // The _GLOBAL_OFFSET_TABLE_ symbol.
822   Symbol* global_offset_table_;
823   // The dynamic reloc section.
824   Reloc_section* rel_dyn_;
825   // The section to use for IRELATIVE relocs.
826   Reloc_section* rel_irelative_;
827   // Relocs saved to avoid a COPY reloc.
828   Copy_relocs<elfcpp::SHT_REL, 32, false> copy_relocs_;
829   // Space for variables copied with a COPY reloc.
830   Output_data_space* dynbss_;
831   // Offset of the GOT entry for the TLS module index.
832   unsigned int got_mod_index_offset_;
833   // True if the _TLS_MODULE_BASE_ symbol has been defined.
834   bool tls_base_symbol_defined_;
835 };
836
837 const Target::Target_info Target_i386::i386_info =
838 {
839   32,                   // size
840   false,                // is_big_endian
841   elfcpp::EM_386,       // machine_code
842   false,                // has_make_symbol
843   false,                // has_resolve
844   true,                 // has_code_fill
845   true,                 // is_default_stack_executable
846   true,                 // can_icf_inline_merge_sections
847   '\0',                 // wrap_char
848   "/usr/lib/libc.so.1", // dynamic_linker
849   0x08048000,           // default_text_segment_address
850   0x1000,               // abi_pagesize (overridable by -z max-page-size)
851   0x1000,               // common_pagesize (overridable by -z common-page-size)
852   false,                // isolate_execinstr
853   0,                    // rosegment_gap
854   elfcpp::SHN_UNDEF,    // small_common_shndx
855   elfcpp::SHN_UNDEF,    // large_common_shndx
856   0,                    // small_common_section_flags
857   0,                    // large_common_section_flags
858   NULL,                 // attributes_section
859   NULL                  // attributes_vendor
860 };
861
862 // Get the GOT section, creating it if necessary.
863
864 Output_data_got<32, false>*
865 Target_i386::got_section(Symbol_table* symtab, Layout* layout)
866 {
867   if (this->got_ == NULL)
868     {
869       gold_assert(symtab != NULL && layout != NULL);
870
871       this->got_ = new Output_data_got<32, false>();
872
873       // When using -z now, we can treat .got.plt as a relro section.
874       // Without -z now, it is modified after program startup by lazy
875       // PLT relocations.
876       bool is_got_plt_relro = parameters->options().now();
877       Output_section_order got_order = (is_got_plt_relro
878                                         ? ORDER_RELRO
879                                         : ORDER_RELRO_LAST);
880       Output_section_order got_plt_order = (is_got_plt_relro
881                                             ? ORDER_RELRO
882                                             : ORDER_NON_RELRO_FIRST);
883
884       layout->add_output_section_data(".got", elfcpp::SHT_PROGBITS,
885                                       (elfcpp::SHF_ALLOC
886                                        | elfcpp::SHF_WRITE),
887                                       this->got_, got_order, true);
888
889       this->got_plt_ = new Output_data_space(4, "** GOT PLT");
890       layout->add_output_section_data(".got.plt", elfcpp::SHT_PROGBITS,
891                                       (elfcpp::SHF_ALLOC
892                                        | elfcpp::SHF_WRITE),
893                                       this->got_plt_, got_plt_order,
894                                       is_got_plt_relro);
895
896       // The first three entries are reserved.
897       this->got_plt_->set_current_data_size(3 * 4);
898
899       if (!is_got_plt_relro)
900         {
901           // Those bytes can go into the relro segment.
902           layout->increase_relro(3 * 4);
903         }
904
905       // Define _GLOBAL_OFFSET_TABLE_ at the start of the PLT.
906       this->global_offset_table_ =
907         symtab->define_in_output_data("_GLOBAL_OFFSET_TABLE_", NULL,
908                                       Symbol_table::PREDEFINED,
909                                       this->got_plt_,
910                                       0, 0, elfcpp::STT_OBJECT,
911                                       elfcpp::STB_LOCAL,
912                                       elfcpp::STV_HIDDEN, 0,
913                                       false, false);
914
915       // If there are any IRELATIVE relocations, they get GOT entries
916       // in .got.plt after the jump slot relocations.
917       this->got_irelative_ = new Output_data_space(4, "** GOT IRELATIVE PLT");
918       layout->add_output_section_data(".got.plt", elfcpp::SHT_PROGBITS,
919                                       (elfcpp::SHF_ALLOC
920                                        | elfcpp::SHF_WRITE),
921                                       this->got_irelative_,
922                                       got_plt_order, is_got_plt_relro);
923
924       // If there are any TLSDESC relocations, they get GOT entries in
925       // .got.plt after the jump slot entries.
926       this->got_tlsdesc_ = new Output_data_got<32, false>();
927       layout->add_output_section_data(".got.plt", elfcpp::SHT_PROGBITS,
928                                       (elfcpp::SHF_ALLOC
929                                        | elfcpp::SHF_WRITE),
930                                       this->got_tlsdesc_,
931                                       got_plt_order, is_got_plt_relro);
932     }
933
934   return this->got_;
935 }
936
937 // Get the dynamic reloc section, creating it if necessary.
938
939 Target_i386::Reloc_section*
940 Target_i386::rel_dyn_section(Layout* layout)
941 {
942   if (this->rel_dyn_ == NULL)
943     {
944       gold_assert(layout != NULL);
945       this->rel_dyn_ = new Reloc_section(parameters->options().combreloc());
946       layout->add_output_section_data(".rel.dyn", elfcpp::SHT_REL,
947                                       elfcpp::SHF_ALLOC, this->rel_dyn_,
948                                       ORDER_DYNAMIC_RELOCS, false);
949     }
950   return this->rel_dyn_;
951 }
952
953 // Get the section to use for IRELATIVE relocs, creating it if
954 // necessary.  These go in .rel.dyn, but only after all other dynamic
955 // relocations.  They need to follow the other dynamic relocations so
956 // that they can refer to global variables initialized by those
957 // relocs.
958
959 Target_i386::Reloc_section*
960 Target_i386::rel_irelative_section(Layout* layout)
961 {
962   if (this->rel_irelative_ == NULL)
963     {
964       // Make sure we have already create the dynamic reloc section.
965       this->rel_dyn_section(layout);
966       this->rel_irelative_ = new Reloc_section(false);
967       layout->add_output_section_data(".rel.dyn", elfcpp::SHT_REL,
968                                       elfcpp::SHF_ALLOC, this->rel_irelative_,
969                                       ORDER_DYNAMIC_RELOCS, false);
970       gold_assert(this->rel_dyn_->output_section()
971                   == this->rel_irelative_->output_section());
972     }
973   return this->rel_irelative_;
974 }
975
976 // Create the PLT section.  The ordinary .got section is an argument,
977 // since we need to refer to the start.  We also create our own .got
978 // section just for PLT entries.
979
980 Output_data_plt_i386::Output_data_plt_i386(Layout* layout,
981                                            uint64_t addralign,
982                                            Output_data_space* got_plt,
983                                            Output_data_space* got_irelative)
984   : Output_section_data(addralign),
985     layout_(layout), tls_desc_rel_(NULL),
986     irelative_rel_(NULL), got_plt_(got_plt), got_irelative_(got_irelative),
987     count_(0), irelative_count_(0), global_ifuncs_(), local_ifuncs_()
988 {
989   this->rel_ = new Reloc_section(false);
990   layout->add_output_section_data(".rel.plt", elfcpp::SHT_REL,
991                                   elfcpp::SHF_ALLOC, this->rel_,
992                                   ORDER_DYNAMIC_PLT_RELOCS, false);
993 }
994
995 void
996 Output_data_plt_i386::do_adjust_output_section(Output_section* os)
997 {
998   // UnixWare sets the entsize of .plt to 4, and so does the old GNU
999   // linker, and so do we.
1000   os->set_entsize(4);
1001 }
1002
1003 // Add an entry to the PLT.
1004
1005 void
1006 Output_data_plt_i386::add_entry(Symbol_table* symtab, Layout* layout,
1007                                 Symbol* gsym)
1008 {
1009   gold_assert(!gsym->has_plt_offset());
1010
1011   // Every PLT entry needs a reloc.
1012   if (gsym->type() == elfcpp::STT_GNU_IFUNC
1013       && gsym->can_use_relative_reloc(false))
1014     {
1015       gsym->set_plt_offset(this->irelative_count_ * this->get_plt_entry_size());
1016       ++this->irelative_count_;
1017       section_offset_type got_offset =
1018         this->got_irelative_->current_data_size();
1019       this->got_irelative_->set_current_data_size(got_offset + 4);
1020       Reloc_section* rel = this->rel_irelative(symtab, layout);
1021       rel->add_symbolless_global_addend(gsym, elfcpp::R_386_IRELATIVE,
1022                                         this->got_irelative_, got_offset);
1023       struct Global_ifunc gi;
1024       gi.sym = gsym;
1025       gi.got_offset = got_offset;
1026       this->global_ifuncs_.push_back(gi);
1027     }
1028   else
1029     {
1030       // When setting the PLT offset we skip the initial reserved PLT
1031       // entry.
1032       gsym->set_plt_offset((this->count_ + 1) * this->get_plt_entry_size());
1033
1034       ++this->count_;
1035
1036       section_offset_type got_offset = this->got_plt_->current_data_size();
1037
1038       // Every PLT entry needs a GOT entry which points back to the
1039       // PLT entry (this will be changed by the dynamic linker,
1040       // normally lazily when the function is called).
1041       this->got_plt_->set_current_data_size(got_offset + 4);
1042
1043       gsym->set_needs_dynsym_entry();
1044       this->rel_->add_global(gsym, elfcpp::R_386_JUMP_SLOT, this->got_plt_,
1045                              got_offset);
1046     }
1047
1048   // Note that we don't need to save the symbol.  The contents of the
1049   // PLT are independent of which symbols are used.  The symbols only
1050   // appear in the relocations.
1051 }
1052
1053 // Add an entry to the PLT for a local STT_GNU_IFUNC symbol.  Return
1054 // the PLT offset.
1055
1056 unsigned int
1057 Output_data_plt_i386::add_local_ifunc_entry(
1058     Symbol_table* symtab,
1059     Layout* layout,
1060     Sized_relobj_file<32, false>* relobj,
1061     unsigned int local_sym_index)
1062 {
1063   unsigned int plt_offset = this->irelative_count_ * this->get_plt_entry_size();
1064   ++this->irelative_count_;
1065
1066   section_offset_type got_offset = this->got_irelative_->current_data_size();
1067
1068   // Every PLT entry needs a GOT entry which points back to the PLT
1069   // entry.
1070   this->got_irelative_->set_current_data_size(got_offset + 4);
1071
1072   // Every PLT entry needs a reloc.
1073   Reloc_section* rel = this->rel_irelative(symtab, layout);
1074   rel->add_symbolless_local_addend(relobj, local_sym_index,
1075                                    elfcpp::R_386_IRELATIVE,
1076                                    this->got_irelative_, got_offset);
1077
1078   struct Local_ifunc li;
1079   li.object = relobj;
1080   li.local_sym_index = local_sym_index;
1081   li.got_offset = got_offset;
1082   this->local_ifuncs_.push_back(li);
1083
1084   return plt_offset;
1085 }
1086
1087 // Return where the TLS_DESC relocations should go, creating it if
1088 // necessary. These follow the JUMP_SLOT relocations.
1089
1090 Output_data_plt_i386::Reloc_section*
1091 Output_data_plt_i386::rel_tls_desc(Layout* layout)
1092 {
1093   if (this->tls_desc_rel_ == NULL)
1094     {
1095       this->tls_desc_rel_ = new Reloc_section(false);
1096       layout->add_output_section_data(".rel.plt", elfcpp::SHT_REL,
1097                                       elfcpp::SHF_ALLOC, this->tls_desc_rel_,
1098                                       ORDER_DYNAMIC_PLT_RELOCS, false);
1099       gold_assert(this->tls_desc_rel_->output_section()
1100                   == this->rel_->output_section());
1101     }
1102   return this->tls_desc_rel_;
1103 }
1104
1105 // Return where the IRELATIVE relocations should go in the PLT.  These
1106 // follow the JUMP_SLOT and TLS_DESC relocations.
1107
1108 Output_data_plt_i386::Reloc_section*
1109 Output_data_plt_i386::rel_irelative(Symbol_table* symtab, Layout* layout)
1110 {
1111   if (this->irelative_rel_ == NULL)
1112     {
1113       // Make sure we have a place for the TLS_DESC relocations, in
1114       // case we see any later on.
1115       this->rel_tls_desc(layout);
1116       this->irelative_rel_ = new Reloc_section(false);
1117       layout->add_output_section_data(".rel.plt", elfcpp::SHT_REL,
1118                                       elfcpp::SHF_ALLOC, this->irelative_rel_,
1119                                       ORDER_DYNAMIC_PLT_RELOCS, false);
1120       gold_assert(this->irelative_rel_->output_section()
1121                   == this->rel_->output_section());
1122
1123       if (parameters->doing_static_link())
1124         {
1125           // A statically linked executable will only have a .rel.plt
1126           // section to hold R_386_IRELATIVE relocs for STT_GNU_IFUNC
1127           // symbols.  The library will use these symbols to locate
1128           // the IRELATIVE relocs at program startup time.
1129           symtab->define_in_output_data("__rel_iplt_start", NULL,
1130                                         Symbol_table::PREDEFINED,
1131                                         this->irelative_rel_, 0, 0,
1132                                         elfcpp::STT_NOTYPE, elfcpp::STB_GLOBAL,
1133                                         elfcpp::STV_HIDDEN, 0, false, true);
1134           symtab->define_in_output_data("__rel_iplt_end", NULL,
1135                                         Symbol_table::PREDEFINED,
1136                                         this->irelative_rel_, 0, 0,
1137                                         elfcpp::STT_NOTYPE, elfcpp::STB_GLOBAL,
1138                                         elfcpp::STV_HIDDEN, 0, true, true);
1139         }
1140     }
1141   return this->irelative_rel_;
1142 }
1143
1144 // Return the PLT address to use for a global symbol.
1145
1146 uint64_t
1147 Output_data_plt_i386::address_for_global(const Symbol* gsym)
1148 {
1149   uint64_t offset = 0;
1150   if (gsym->type() == elfcpp::STT_GNU_IFUNC
1151       && gsym->can_use_relative_reloc(false))
1152     offset = (this->count_ + 1) * this->get_plt_entry_size();
1153   return this->address() + offset;
1154 }
1155
1156 // Return the PLT address to use for a local symbol.  These are always
1157 // IRELATIVE relocs.
1158
1159 uint64_t
1160 Output_data_plt_i386::address_for_local(const Relobj*, unsigned int)
1161 {
1162   return this->address() + (this->count_ + 1) * this->get_plt_entry_size();
1163 }
1164
1165 // The first entry in the PLT for an executable.
1166
1167 const unsigned char Output_data_plt_i386_exec::first_plt_entry[plt_entry_size] =
1168 {
1169   0xff, 0x35,   // pushl contents of memory address
1170   0, 0, 0, 0,   // replaced with address of .got + 4
1171   0xff, 0x25,   // jmp indirect
1172   0, 0, 0, 0,   // replaced with address of .got + 8
1173   0, 0, 0, 0    // unused
1174 };
1175
1176 void
1177 Output_data_plt_i386_exec::do_fill_first_plt_entry(
1178     unsigned char* pov,
1179     elfcpp::Elf_types<32>::Elf_Addr got_address)
1180 {
1181   memcpy(pov, first_plt_entry, plt_entry_size);
1182   elfcpp::Swap_unaligned<32, false>::writeval(pov + 2, got_address + 4);
1183   elfcpp::Swap<32, false>::writeval(pov + 8, got_address + 8);
1184 }
1185
1186 // The first entry in the PLT for a shared object.
1187
1188 const unsigned char Output_data_plt_i386_dyn::first_plt_entry[plt_entry_size] =
1189 {
1190   0xff, 0xb3, 4, 0, 0, 0,       // pushl 4(%ebx)
1191   0xff, 0xa3, 8, 0, 0, 0,       // jmp *8(%ebx)
1192   0, 0, 0, 0                    // unused
1193 };
1194
1195 void
1196 Output_data_plt_i386_dyn::do_fill_first_plt_entry(
1197     unsigned char* pov,
1198     elfcpp::Elf_types<32>::Elf_Addr)
1199 {
1200   memcpy(pov, first_plt_entry, plt_entry_size);
1201 }
1202
1203 // Subsequent entries in the PLT for an executable.
1204
1205 const unsigned char Output_data_plt_i386_exec::plt_entry[plt_entry_size] =
1206 {
1207   0xff, 0x25,   // jmp indirect
1208   0, 0, 0, 0,   // replaced with address of symbol in .got
1209   0x68,         // pushl immediate
1210   0, 0, 0, 0,   // replaced with offset into relocation table
1211   0xe9,         // jmp relative
1212   0, 0, 0, 0    // replaced with offset to start of .plt
1213 };
1214
1215 unsigned int
1216 Output_data_plt_i386_exec::do_fill_plt_entry(
1217     unsigned char* pov,
1218     elfcpp::Elf_types<32>::Elf_Addr got_address,
1219     unsigned int got_offset,
1220     unsigned int plt_offset,
1221     unsigned int plt_rel_offset)
1222 {
1223   memcpy(pov, plt_entry, plt_entry_size);
1224   elfcpp::Swap_unaligned<32, false>::writeval(pov + 2,
1225                                               got_address + got_offset);
1226   elfcpp::Swap_unaligned<32, false>::writeval(pov + 7, plt_rel_offset);
1227   elfcpp::Swap<32, false>::writeval(pov + 12, - (plt_offset + 12 + 4));
1228   return 6;
1229 }
1230
1231 // Subsequent entries in the PLT for a shared object.
1232
1233 const unsigned char Output_data_plt_i386_dyn::plt_entry[plt_entry_size] =
1234 {
1235   0xff, 0xa3,   // jmp *offset(%ebx)
1236   0, 0, 0, 0,   // replaced with offset of symbol in .got
1237   0x68,         // pushl immediate
1238   0, 0, 0, 0,   // replaced with offset into relocation table
1239   0xe9,         // jmp relative
1240   0, 0, 0, 0    // replaced with offset to start of .plt
1241 };
1242
1243 unsigned int
1244 Output_data_plt_i386_dyn::do_fill_plt_entry(unsigned char* pov,
1245                                             elfcpp::Elf_types<32>::Elf_Addr,
1246                                             unsigned int got_offset,
1247                                             unsigned int plt_offset,
1248                                             unsigned int plt_rel_offset)
1249 {
1250   memcpy(pov, plt_entry, plt_entry_size);
1251   elfcpp::Swap_unaligned<32, false>::writeval(pov + 2, got_offset);
1252   elfcpp::Swap_unaligned<32, false>::writeval(pov + 7, plt_rel_offset);
1253   elfcpp::Swap<32, false>::writeval(pov + 12, - (plt_offset + 12 + 4));
1254   return 6;
1255 }
1256
1257 // The .eh_frame unwind information for the PLT.
1258
1259 const unsigned char
1260 Output_data_plt_i386::plt_eh_frame_cie[plt_eh_frame_cie_size] =
1261 {
1262   1,                            // CIE version.
1263   'z',                          // Augmentation: augmentation size included.
1264   'R',                          // Augmentation: FDE encoding included.
1265   '\0',                         // End of augmentation string.
1266   1,                            // Code alignment factor.
1267   0x7c,                         // Data alignment factor.
1268   8,                            // Return address column.
1269   1,                            // Augmentation size.
1270   (elfcpp::DW_EH_PE_pcrel       // FDE encoding.
1271    | elfcpp::DW_EH_PE_sdata4),
1272   elfcpp::DW_CFA_def_cfa, 4, 4, // DW_CFA_def_cfa: r4 (esp) ofs 4.
1273   elfcpp::DW_CFA_offset + 8, 1, // DW_CFA_offset: r8 (eip) at cfa-4.
1274   elfcpp::DW_CFA_nop,           // Align to 16 bytes.
1275   elfcpp::DW_CFA_nop
1276 };
1277
1278 const unsigned char
1279 Output_data_plt_i386_standard::plt_eh_frame_fde[plt_eh_frame_fde_size] =
1280 {
1281   0, 0, 0, 0,                           // Replaced with offset to .plt.
1282   0, 0, 0, 0,                           // Replaced with size of .plt.
1283   0,                                    // Augmentation size.
1284   elfcpp::DW_CFA_def_cfa_offset, 8,     // DW_CFA_def_cfa_offset: 8.
1285   elfcpp::DW_CFA_advance_loc + 6,       // Advance 6 to __PLT__ + 6.
1286   elfcpp::DW_CFA_def_cfa_offset, 12,    // DW_CFA_def_cfa_offset: 12.
1287   elfcpp::DW_CFA_advance_loc + 10,      // Advance 10 to __PLT__ + 16.
1288   elfcpp::DW_CFA_def_cfa_expression,    // DW_CFA_def_cfa_expression.
1289   11,                                   // Block length.
1290   elfcpp::DW_OP_breg4, 4,               // Push %esp + 4.
1291   elfcpp::DW_OP_breg8, 0,               // Push %eip.
1292   elfcpp::DW_OP_lit15,                  // Push 0xf.
1293   elfcpp::DW_OP_and,                    // & (%eip & 0xf).
1294   elfcpp::DW_OP_lit11,                  // Push 0xb.
1295   elfcpp::DW_OP_ge,                     // >= ((%eip & 0xf) >= 0xb)
1296   elfcpp::DW_OP_lit2,                   // Push 2.
1297   elfcpp::DW_OP_shl,                    // << (((%eip & 0xf) >= 0xb) << 2)
1298   elfcpp::DW_OP_plus,                   // + ((((%eip&0xf)>=0xb)<<2)+%esp+4
1299   elfcpp::DW_CFA_nop,                   // Align to 32 bytes.
1300   elfcpp::DW_CFA_nop,
1301   elfcpp::DW_CFA_nop,
1302   elfcpp::DW_CFA_nop
1303 };
1304
1305 // Write out the PLT.  This uses the hand-coded instructions above,
1306 // and adjusts them as needed.  This is all specified by the i386 ELF
1307 // Processor Supplement.
1308
1309 void
1310 Output_data_plt_i386::do_write(Output_file* of)
1311 {
1312   const off_t offset = this->offset();
1313   const section_size_type oview_size =
1314     convert_to_section_size_type(this->data_size());
1315   unsigned char* const oview = of->get_output_view(offset, oview_size);
1316
1317   const off_t got_file_offset = this->got_plt_->offset();
1318   gold_assert(parameters->incremental_update()
1319               || (got_file_offset + this->got_plt_->data_size()
1320                   == this->got_irelative_->offset()));
1321   const section_size_type got_size =
1322     convert_to_section_size_type(this->got_plt_->data_size()
1323                                  + this->got_irelative_->data_size());
1324   unsigned char* const got_view = of->get_output_view(got_file_offset,
1325                                                       got_size);
1326
1327   unsigned char* pov = oview;
1328
1329   elfcpp::Elf_types<32>::Elf_Addr plt_address = this->address();
1330   elfcpp::Elf_types<32>::Elf_Addr got_address = this->got_plt_->address();
1331
1332   this->fill_first_plt_entry(pov, got_address);
1333   pov += this->get_plt_entry_size();
1334
1335   unsigned char* got_pov = got_view;
1336
1337   // The first entry in the GOT is the address of the .dynamic section
1338   // aka the PT_DYNAMIC segment.  The next two entries are reserved.
1339   // We saved space for them when we created the section in
1340   // Target_i386::got_section.
1341   Output_section* dynamic = this->layout_->dynamic_section();
1342   uint32_t dynamic_addr = dynamic == NULL ? 0 : dynamic->address();
1343   elfcpp::Swap<32, false>::writeval(got_pov, dynamic_addr);
1344   got_pov += 4;
1345   memset(got_pov, 0, 8);
1346   got_pov += 8;
1347
1348   const int rel_size = elfcpp::Elf_sizes<32>::rel_size;
1349
1350   unsigned int plt_offset = this->get_plt_entry_size();
1351   unsigned int plt_rel_offset = 0;
1352   unsigned int got_offset = 12;
1353   const unsigned int count = this->count_ + this->irelative_count_;
1354   for (unsigned int i = 0;
1355        i < count;
1356        ++i,
1357          pov += this->get_plt_entry_size(),
1358          got_pov += 4,
1359          plt_offset += this->get_plt_entry_size(),
1360          plt_rel_offset += rel_size,
1361          got_offset += 4)
1362     {
1363       // Set and adjust the PLT entry itself.
1364       unsigned int lazy_offset = this->fill_plt_entry(pov,
1365                                                       got_address,
1366                                                       got_offset,
1367                                                       plt_offset,
1368                                                       plt_rel_offset);
1369
1370       // Set the entry in the GOT.
1371       elfcpp::Swap<32, false>::writeval(got_pov,
1372                                         plt_address + plt_offset + lazy_offset);
1373     }
1374
1375   // If any STT_GNU_IFUNC symbols have PLT entries, we need to change
1376   // the GOT to point to the actual symbol value, rather than point to
1377   // the PLT entry.  That will let the dynamic linker call the right
1378   // function when resolving IRELATIVE relocations.
1379   unsigned char* got_irelative_view = got_view + this->got_plt_->data_size();
1380   for (std::vector<Global_ifunc>::const_iterator p =
1381          this->global_ifuncs_.begin();
1382        p != this->global_ifuncs_.end();
1383        ++p)
1384     {
1385       const Sized_symbol<32>* ssym =
1386         static_cast<const Sized_symbol<32>*>(p->sym);
1387       elfcpp::Swap<32, false>::writeval(got_irelative_view + p->got_offset,
1388                                         ssym->value());
1389     }
1390
1391   for (std::vector<Local_ifunc>::const_iterator p =
1392          this->local_ifuncs_.begin();
1393        p != this->local_ifuncs_.end();
1394        ++p)
1395     {
1396       const Symbol_value<32>* psymval =
1397         p->object->local_symbol(p->local_sym_index);
1398       elfcpp::Swap<32, false>::writeval(got_irelative_view + p->got_offset,
1399                                         psymval->value(p->object, 0));
1400     }
1401
1402   gold_assert(static_cast<section_size_type>(pov - oview) == oview_size);
1403   gold_assert(static_cast<section_size_type>(got_pov - got_view) == got_size);
1404
1405   of->write_output_view(offset, oview_size, oview);
1406   of->write_output_view(got_file_offset, got_size, got_view);
1407 }
1408
1409 // Create the PLT section.
1410
1411 void
1412 Target_i386::make_plt_section(Symbol_table* symtab, Layout* layout)
1413 {
1414   if (this->plt_ == NULL)
1415     {
1416       // Create the GOT sections first.
1417       this->got_section(symtab, layout);
1418
1419       const bool dyn = parameters->options().output_is_position_independent();
1420       this->plt_ = this->make_data_plt(layout,
1421                                        this->got_plt_,
1422                                        this->got_irelative_,
1423                                        dyn);
1424
1425       // Add unwind information if requested.
1426       if (parameters->options().ld_generated_unwind_info())
1427         this->plt_->add_eh_frame(layout);
1428
1429       layout->add_output_section_data(".plt", elfcpp::SHT_PROGBITS,
1430                                       (elfcpp::SHF_ALLOC
1431                                        | elfcpp::SHF_EXECINSTR),
1432                                       this->plt_, ORDER_PLT, false);
1433
1434       // Make the sh_info field of .rel.plt point to .plt.
1435       Output_section* rel_plt_os = this->plt_->rel_plt()->output_section();
1436       rel_plt_os->set_info_section(this->plt_->output_section());
1437     }
1438 }
1439
1440 // Create a PLT entry for a global symbol.
1441
1442 void
1443 Target_i386::make_plt_entry(Symbol_table* symtab, Layout* layout, Symbol* gsym)
1444 {
1445   if (gsym->has_plt_offset())
1446     return;
1447   if (this->plt_ == NULL)
1448     this->make_plt_section(symtab, layout);
1449   this->plt_->add_entry(symtab, layout, gsym);
1450 }
1451
1452 // Make a PLT entry for a local STT_GNU_IFUNC symbol.
1453
1454 void
1455 Target_i386::make_local_ifunc_plt_entry(Symbol_table* symtab, Layout* layout,
1456                                         Sized_relobj_file<32, false>* relobj,
1457                                         unsigned int local_sym_index)
1458 {
1459   if (relobj->local_has_plt_offset(local_sym_index))
1460     return;
1461   if (this->plt_ == NULL)
1462     this->make_plt_section(symtab, layout);
1463   unsigned int plt_offset = this->plt_->add_local_ifunc_entry(symtab, layout,
1464                                                               relobj,
1465                                                               local_sym_index);
1466   relobj->set_local_plt_offset(local_sym_index, plt_offset);
1467 }
1468
1469 // Return the number of entries in the PLT.
1470
1471 unsigned int
1472 Target_i386::plt_entry_count() const
1473 {
1474   if (this->plt_ == NULL)
1475     return 0;
1476   return this->plt_->entry_count();
1477 }
1478
1479 // Return the offset of the first non-reserved PLT entry.
1480
1481 unsigned int
1482 Target_i386::first_plt_entry_offset() const
1483 {
1484   return this->plt_->first_plt_entry_offset();
1485 }
1486
1487 // Return the size of each PLT entry.
1488
1489 unsigned int
1490 Target_i386::plt_entry_size() const
1491 {
1492   return this->plt_->get_plt_entry_size();
1493 }
1494
1495 // Get the section to use for TLS_DESC relocations.
1496
1497 Target_i386::Reloc_section*
1498 Target_i386::rel_tls_desc_section(Layout* layout) const
1499 {
1500   return this->plt_section()->rel_tls_desc(layout);
1501 }
1502
1503 // Define the _TLS_MODULE_BASE_ symbol in the TLS segment.
1504
1505 void
1506 Target_i386::define_tls_base_symbol(Symbol_table* symtab, Layout* layout)
1507 {
1508   if (this->tls_base_symbol_defined_)
1509     return;
1510
1511   Output_segment* tls_segment = layout->tls_segment();
1512   if (tls_segment != NULL)
1513     {
1514       bool is_exec = parameters->options().output_is_executable();
1515       symtab->define_in_output_segment("_TLS_MODULE_BASE_", NULL,
1516                                        Symbol_table::PREDEFINED,
1517                                        tls_segment, 0, 0,
1518                                        elfcpp::STT_TLS,
1519                                        elfcpp::STB_LOCAL,
1520                                        elfcpp::STV_HIDDEN, 0,
1521                                        (is_exec
1522                                         ? Symbol::SEGMENT_END
1523                                         : Symbol::SEGMENT_START),
1524                                        true);
1525     }
1526   this->tls_base_symbol_defined_ = true;
1527 }
1528
1529 // Create a GOT entry for the TLS module index.
1530
1531 unsigned int
1532 Target_i386::got_mod_index_entry(Symbol_table* symtab, Layout* layout,
1533                                  Sized_relobj_file<32, false>* object)
1534 {
1535   if (this->got_mod_index_offset_ == -1U)
1536     {
1537       gold_assert(symtab != NULL && layout != NULL && object != NULL);
1538       Reloc_section* rel_dyn = this->rel_dyn_section(layout);
1539       Output_data_got<32, false>* got = this->got_section(symtab, layout);
1540       unsigned int got_offset = got->add_constant(0);
1541       rel_dyn->add_local(object, 0, elfcpp::R_386_TLS_DTPMOD32, got,
1542                          got_offset);
1543       got->add_constant(0);
1544       this->got_mod_index_offset_ = got_offset;
1545     }
1546   return this->got_mod_index_offset_;
1547 }
1548
1549 // Optimize the TLS relocation type based on what we know about the
1550 // symbol.  IS_FINAL is true if the final address of this symbol is
1551 // known at link time.
1552
1553 tls::Tls_optimization
1554 Target_i386::optimize_tls_reloc(bool is_final, int r_type)
1555 {
1556   // If we are generating a shared library, then we can't do anything
1557   // in the linker.
1558   if (parameters->options().shared())
1559     return tls::TLSOPT_NONE;
1560
1561   switch (r_type)
1562     {
1563     case elfcpp::R_386_TLS_GD:
1564     case elfcpp::R_386_TLS_GOTDESC:
1565     case elfcpp::R_386_TLS_DESC_CALL:
1566       // These are General-Dynamic which permits fully general TLS
1567       // access.  Since we know that we are generating an executable,
1568       // we can convert this to Initial-Exec.  If we also know that
1569       // this is a local symbol, we can further switch to Local-Exec.
1570       if (is_final)
1571         return tls::TLSOPT_TO_LE;
1572       return tls::TLSOPT_TO_IE;
1573
1574     case elfcpp::R_386_TLS_LDM:
1575       // This is Local-Dynamic, which refers to a local symbol in the
1576       // dynamic TLS block.  Since we know that we generating an
1577       // executable, we can switch to Local-Exec.
1578       return tls::TLSOPT_TO_LE;
1579
1580     case elfcpp::R_386_TLS_LDO_32:
1581       // Another type of Local-Dynamic relocation.
1582       return tls::TLSOPT_TO_LE;
1583
1584     case elfcpp::R_386_TLS_IE:
1585     case elfcpp::R_386_TLS_GOTIE:
1586     case elfcpp::R_386_TLS_IE_32:
1587       // These are Initial-Exec relocs which get the thread offset
1588       // from the GOT.  If we know that we are linking against the
1589       // local symbol, we can switch to Local-Exec, which links the
1590       // thread offset into the instruction.
1591       if (is_final)
1592         return tls::TLSOPT_TO_LE;
1593       return tls::TLSOPT_NONE;
1594
1595     case elfcpp::R_386_TLS_LE:
1596     case elfcpp::R_386_TLS_LE_32:
1597       // When we already have Local-Exec, there is nothing further we
1598       // can do.
1599       return tls::TLSOPT_NONE;
1600
1601     default:
1602       gold_unreachable();
1603     }
1604 }
1605
1606 // Get the Reference_flags for a particular relocation.
1607
1608 int
1609 Target_i386::Scan::get_reference_flags(unsigned int r_type)
1610 {
1611   switch (r_type)
1612     {
1613     case elfcpp::R_386_NONE:
1614     case elfcpp::R_386_GNU_VTINHERIT:
1615     case elfcpp::R_386_GNU_VTENTRY:
1616     case elfcpp::R_386_GOTPC:
1617       // No symbol reference.
1618       return 0;
1619
1620     case elfcpp::R_386_32:
1621     case elfcpp::R_386_16:
1622     case elfcpp::R_386_8:
1623       return Symbol::ABSOLUTE_REF;
1624
1625     case elfcpp::R_386_PC32:
1626     case elfcpp::R_386_PC16:
1627     case elfcpp::R_386_PC8:
1628     case elfcpp::R_386_GOTOFF:
1629       return Symbol::RELATIVE_REF;
1630
1631     case elfcpp::R_386_PLT32:
1632       return Symbol::FUNCTION_CALL | Symbol::RELATIVE_REF;
1633
1634     case elfcpp::R_386_GOT32:
1635       // Absolute in GOT.
1636       return Symbol::ABSOLUTE_REF;
1637
1638     case elfcpp::R_386_TLS_GD:            // Global-dynamic
1639     case elfcpp::R_386_TLS_GOTDESC:       // Global-dynamic (from ~oliva url)
1640     case elfcpp::R_386_TLS_DESC_CALL:
1641     case elfcpp::R_386_TLS_LDM:           // Local-dynamic
1642     case elfcpp::R_386_TLS_LDO_32:        // Alternate local-dynamic
1643     case elfcpp::R_386_TLS_IE:            // Initial-exec
1644     case elfcpp::R_386_TLS_IE_32:
1645     case elfcpp::R_386_TLS_GOTIE:
1646     case elfcpp::R_386_TLS_LE:            // Local-exec
1647     case elfcpp::R_386_TLS_LE_32:
1648       return Symbol::TLS_REF;
1649
1650     case elfcpp::R_386_COPY:
1651     case elfcpp::R_386_GLOB_DAT:
1652     case elfcpp::R_386_JUMP_SLOT:
1653     case elfcpp::R_386_RELATIVE:
1654     case elfcpp::R_386_IRELATIVE:
1655     case elfcpp::R_386_TLS_TPOFF:
1656     case elfcpp::R_386_TLS_DTPMOD32:
1657     case elfcpp::R_386_TLS_DTPOFF32:
1658     case elfcpp::R_386_TLS_TPOFF32:
1659     case elfcpp::R_386_TLS_DESC:
1660     case elfcpp::R_386_32PLT:
1661     case elfcpp::R_386_TLS_GD_32:
1662     case elfcpp::R_386_TLS_GD_PUSH:
1663     case elfcpp::R_386_TLS_GD_CALL:
1664     case elfcpp::R_386_TLS_GD_POP:
1665     case elfcpp::R_386_TLS_LDM_32:
1666     case elfcpp::R_386_TLS_LDM_PUSH:
1667     case elfcpp::R_386_TLS_LDM_CALL:
1668     case elfcpp::R_386_TLS_LDM_POP:
1669     case elfcpp::R_386_USED_BY_INTEL_200:
1670     default:
1671       // Not expected.  We will give an error later.
1672       return 0;
1673     }
1674 }
1675
1676 // Report an unsupported relocation against a local symbol.
1677
1678 void
1679 Target_i386::Scan::unsupported_reloc_local(Sized_relobj_file<32, false>* object,
1680                                            unsigned int r_type)
1681 {
1682   gold_error(_("%s: unsupported reloc %u against local symbol"),
1683              object->name().c_str(), r_type);
1684 }
1685
1686 // Return whether we need to make a PLT entry for a relocation of a
1687 // given type against a STT_GNU_IFUNC symbol.
1688
1689 bool
1690 Target_i386::Scan::reloc_needs_plt_for_ifunc(
1691     Sized_relobj_file<32, false>* object,
1692     unsigned int r_type)
1693 {
1694   int flags = Scan::get_reference_flags(r_type);
1695   if (flags & Symbol::TLS_REF)
1696     gold_error(_("%s: unsupported TLS reloc %u for IFUNC symbol"),
1697                object->name().c_str(), r_type);
1698   return flags != 0;
1699 }
1700
1701 // Scan a relocation for a local symbol.
1702
1703 inline void
1704 Target_i386::Scan::local(Symbol_table* symtab,
1705                                 Layout* layout,
1706                                 Target_i386* target,
1707                                 Sized_relobj_file<32, false>* object,
1708                                 unsigned int data_shndx,
1709                                 Output_section* output_section,
1710                                 const elfcpp::Rel<32, false>& reloc,
1711                                 unsigned int r_type,
1712                                 const elfcpp::Sym<32, false>& lsym)
1713 {
1714   // A local STT_GNU_IFUNC symbol may require a PLT entry.
1715   if (lsym.get_st_type() == elfcpp::STT_GNU_IFUNC
1716       && this->reloc_needs_plt_for_ifunc(object, r_type))
1717     {
1718       unsigned int r_sym = elfcpp::elf_r_sym<32>(reloc.get_r_info());
1719       target->make_local_ifunc_plt_entry(symtab, layout, object, r_sym);
1720     }
1721
1722   switch (r_type)
1723     {
1724     case elfcpp::R_386_NONE:
1725     case elfcpp::R_386_GNU_VTINHERIT:
1726     case elfcpp::R_386_GNU_VTENTRY:
1727       break;
1728
1729     case elfcpp::R_386_32:
1730       // If building a shared library (or a position-independent
1731       // executable), we need to create a dynamic relocation for
1732       // this location. The relocation applied at link time will
1733       // apply the link-time value, so we flag the location with
1734       // an R_386_RELATIVE relocation so the dynamic loader can
1735       // relocate it easily.
1736       if (parameters->options().output_is_position_independent())
1737         {
1738           Reloc_section* rel_dyn = target->rel_dyn_section(layout);
1739           unsigned int r_sym = elfcpp::elf_r_sym<32>(reloc.get_r_info());
1740           rel_dyn->add_local_relative(object, r_sym, elfcpp::R_386_RELATIVE,
1741                                       output_section, data_shndx,
1742                                       reloc.get_r_offset());
1743         }
1744       break;
1745
1746     case elfcpp::R_386_16:
1747     case elfcpp::R_386_8:
1748       // If building a shared library (or a position-independent
1749       // executable), we need to create a dynamic relocation for
1750       // this location. Because the addend needs to remain in the
1751       // data section, we need to be careful not to apply this
1752       // relocation statically.
1753       if (parameters->options().output_is_position_independent())
1754         {
1755           Reloc_section* rel_dyn = target->rel_dyn_section(layout);
1756           unsigned int r_sym = elfcpp::elf_r_sym<32>(reloc.get_r_info());
1757           if (lsym.get_st_type() != elfcpp::STT_SECTION)
1758             rel_dyn->add_local(object, r_sym, r_type, output_section,
1759                                data_shndx, reloc.get_r_offset());
1760           else
1761             {
1762               gold_assert(lsym.get_st_value() == 0);
1763               unsigned int shndx = lsym.get_st_shndx();
1764               bool is_ordinary;
1765               shndx = object->adjust_sym_shndx(r_sym, shndx,
1766                                                &is_ordinary);
1767               if (!is_ordinary)
1768                 object->error(_("section symbol %u has bad shndx %u"),
1769                               r_sym, shndx);
1770               else
1771                 rel_dyn->add_local_section(object, shndx,
1772                                            r_type, output_section,
1773                                            data_shndx, reloc.get_r_offset());
1774             }
1775         }
1776       break;
1777
1778     case elfcpp::R_386_PC32:
1779     case elfcpp::R_386_PC16:
1780     case elfcpp::R_386_PC8:
1781       break;
1782
1783     case elfcpp::R_386_PLT32:
1784       // Since we know this is a local symbol, we can handle this as a
1785       // PC32 reloc.
1786       break;
1787
1788     case elfcpp::R_386_GOTOFF:
1789     case elfcpp::R_386_GOTPC:
1790       // We need a GOT section.
1791       target->got_section(symtab, layout);
1792       break;
1793
1794     case elfcpp::R_386_GOT32:
1795       {
1796         // The symbol requires a GOT entry.
1797         Output_data_got<32, false>* got = target->got_section(symtab, layout);
1798         unsigned int r_sym = elfcpp::elf_r_sym<32>(reloc.get_r_info());
1799
1800         // For a STT_GNU_IFUNC symbol we want the PLT offset.  That
1801         // lets function pointers compare correctly with shared
1802         // libraries.  Otherwise we would need an IRELATIVE reloc.
1803         bool is_new;
1804         if (lsym.get_st_type() == elfcpp::STT_GNU_IFUNC)
1805           is_new = got->add_local_plt(object, r_sym, GOT_TYPE_STANDARD);
1806         else
1807           is_new = got->add_local(object, r_sym, GOT_TYPE_STANDARD);
1808         if (is_new)
1809           {
1810             // If we are generating a shared object, we need to add a
1811             // dynamic RELATIVE relocation for this symbol's GOT entry.
1812             if (parameters->options().output_is_position_independent())
1813               {
1814                 Reloc_section* rel_dyn = target->rel_dyn_section(layout);
1815                 unsigned int got_offset =
1816                   object->local_got_offset(r_sym, GOT_TYPE_STANDARD);
1817                 rel_dyn->add_local_relative(object, r_sym,
1818                                             elfcpp::R_386_RELATIVE,
1819                                             got, got_offset);
1820               }
1821           }
1822       }
1823       break;
1824
1825       // These are relocations which should only be seen by the
1826       // dynamic linker, and should never be seen here.
1827     case elfcpp::R_386_COPY:
1828     case elfcpp::R_386_GLOB_DAT:
1829     case elfcpp::R_386_JUMP_SLOT:
1830     case elfcpp::R_386_RELATIVE:
1831     case elfcpp::R_386_IRELATIVE:
1832     case elfcpp::R_386_TLS_TPOFF:
1833     case elfcpp::R_386_TLS_DTPMOD32:
1834     case elfcpp::R_386_TLS_DTPOFF32:
1835     case elfcpp::R_386_TLS_TPOFF32:
1836     case elfcpp::R_386_TLS_DESC:
1837       gold_error(_("%s: unexpected reloc %u in object file"),
1838                  object->name().c_str(), r_type);
1839       break;
1840
1841       // These are initial TLS relocs, which are expected when
1842       // linking.
1843     case elfcpp::R_386_TLS_GD:            // Global-dynamic
1844     case elfcpp::R_386_TLS_GOTDESC:       // Global-dynamic (from ~oliva url)
1845     case elfcpp::R_386_TLS_DESC_CALL:
1846     case elfcpp::R_386_TLS_LDM:           // Local-dynamic
1847     case elfcpp::R_386_TLS_LDO_32:        // Alternate local-dynamic
1848     case elfcpp::R_386_TLS_IE:            // Initial-exec
1849     case elfcpp::R_386_TLS_IE_32:
1850     case elfcpp::R_386_TLS_GOTIE:
1851     case elfcpp::R_386_TLS_LE:            // Local-exec
1852     case elfcpp::R_386_TLS_LE_32:
1853       {
1854         bool output_is_shared = parameters->options().shared();
1855         const tls::Tls_optimization optimized_type
1856             = Target_i386::optimize_tls_reloc(!output_is_shared, r_type);
1857         switch (r_type)
1858           {
1859           case elfcpp::R_386_TLS_GD:          // Global-dynamic
1860             if (optimized_type == tls::TLSOPT_NONE)
1861               {
1862                 // Create a pair of GOT entries for the module index and
1863                 // dtv-relative offset.
1864                 Output_data_got<32, false>* got
1865                     = target->got_section(symtab, layout);
1866                 unsigned int r_sym = elfcpp::elf_r_sym<32>(reloc.get_r_info());
1867                 unsigned int shndx = lsym.get_st_shndx();
1868                 bool is_ordinary;
1869                 shndx = object->adjust_sym_shndx(r_sym, shndx, &is_ordinary);
1870                 if (!is_ordinary)
1871                   object->error(_("local symbol %u has bad shndx %u"),
1872                               r_sym, shndx);
1873                 else
1874                   got->add_local_pair_with_rel(object, r_sym, shndx,
1875                                                GOT_TYPE_TLS_PAIR,
1876                                                target->rel_dyn_section(layout),
1877                                                elfcpp::R_386_TLS_DTPMOD32, 0);
1878               }
1879             else if (optimized_type != tls::TLSOPT_TO_LE)
1880               unsupported_reloc_local(object, r_type);
1881             break;
1882
1883           case elfcpp::R_386_TLS_GOTDESC:     // Global-dynamic (from ~oliva)
1884             target->define_tls_base_symbol(symtab, layout);
1885             if (optimized_type == tls::TLSOPT_NONE)
1886               {
1887                 // Create a double GOT entry with an R_386_TLS_DESC
1888                 // reloc.  The R_386_TLS_DESC reloc is resolved
1889                 // lazily, so the GOT entry needs to be in an area in
1890                 // .got.plt, not .got.  Call got_section to make sure
1891                 // the section has been created.
1892                 target->got_section(symtab, layout);
1893                 Output_data_got<32, false>* got = target->got_tlsdesc_section();
1894                 unsigned int r_sym = elfcpp::elf_r_sym<32>(reloc.get_r_info());
1895                 if (!object->local_has_got_offset(r_sym, GOT_TYPE_TLS_DESC))
1896                   {
1897                     unsigned int got_offset = got->add_constant(0);
1898                     // The local symbol value is stored in the second
1899                     // GOT entry.
1900                     got->add_local(object, r_sym, GOT_TYPE_TLS_DESC);
1901                     // That set the GOT offset of the local symbol to
1902                     // point to the second entry, but we want it to
1903                     // point to the first.
1904                     object->set_local_got_offset(r_sym, GOT_TYPE_TLS_DESC,
1905                                                  got_offset);
1906                     Reloc_section* rt = target->rel_tls_desc_section(layout);
1907                     rt->add_absolute(elfcpp::R_386_TLS_DESC, got, got_offset);
1908                   }
1909               }
1910             else if (optimized_type != tls::TLSOPT_TO_LE)
1911               unsupported_reloc_local(object, r_type);
1912             break;
1913
1914           case elfcpp::R_386_TLS_DESC_CALL:
1915             break;
1916
1917           case elfcpp::R_386_TLS_LDM:         // Local-dynamic
1918             if (optimized_type == tls::TLSOPT_NONE)
1919               {
1920                 // Create a GOT entry for the module index.
1921                 target->got_mod_index_entry(symtab, layout, object);
1922               }
1923             else if (optimized_type != tls::TLSOPT_TO_LE)
1924               unsupported_reloc_local(object, r_type);
1925             break;
1926
1927           case elfcpp::R_386_TLS_LDO_32:      // Alternate local-dynamic
1928             break;
1929
1930           case elfcpp::R_386_TLS_IE:          // Initial-exec
1931           case elfcpp::R_386_TLS_IE_32:
1932           case elfcpp::R_386_TLS_GOTIE:
1933             layout->set_has_static_tls();
1934             if (optimized_type == tls::TLSOPT_NONE)
1935               {
1936                 // For the R_386_TLS_IE relocation, we need to create a
1937                 // dynamic relocation when building a shared library.
1938                 if (r_type == elfcpp::R_386_TLS_IE
1939                     && parameters->options().shared())
1940                   {
1941                     Reloc_section* rel_dyn = target->rel_dyn_section(layout);
1942                     unsigned int r_sym
1943                         = elfcpp::elf_r_sym<32>(reloc.get_r_info());
1944                     rel_dyn->add_local_relative(object, r_sym,
1945                                                 elfcpp::R_386_RELATIVE,
1946                                                 output_section, data_shndx,
1947                                                 reloc.get_r_offset());
1948                   }
1949                 // Create a GOT entry for the tp-relative offset.
1950                 Output_data_got<32, false>* got
1951                     = target->got_section(symtab, layout);
1952                 unsigned int r_sym = elfcpp::elf_r_sym<32>(reloc.get_r_info());
1953                 unsigned int dyn_r_type = (r_type == elfcpp::R_386_TLS_IE_32
1954                                            ? elfcpp::R_386_TLS_TPOFF32
1955                                            : elfcpp::R_386_TLS_TPOFF);
1956                 unsigned int got_type = (r_type == elfcpp::R_386_TLS_IE_32
1957                                          ? GOT_TYPE_TLS_OFFSET
1958                                          : GOT_TYPE_TLS_NOFFSET);
1959                 got->add_local_with_rel(object, r_sym, got_type,
1960                                         target->rel_dyn_section(layout),
1961                                         dyn_r_type);
1962               }
1963             else if (optimized_type != tls::TLSOPT_TO_LE)
1964               unsupported_reloc_local(object, r_type);
1965             break;
1966
1967           case elfcpp::R_386_TLS_LE:          // Local-exec
1968           case elfcpp::R_386_TLS_LE_32:
1969             layout->set_has_static_tls();
1970             if (output_is_shared)
1971               {
1972                 // We need to create a dynamic relocation.
1973                 gold_assert(lsym.get_st_type() != elfcpp::STT_SECTION);
1974                 unsigned int r_sym = elfcpp::elf_r_sym<32>(reloc.get_r_info());
1975                 unsigned int dyn_r_type = (r_type == elfcpp::R_386_TLS_LE_32
1976                                            ? elfcpp::R_386_TLS_TPOFF32
1977                                            : elfcpp::R_386_TLS_TPOFF);
1978                 Reloc_section* rel_dyn = target->rel_dyn_section(layout);
1979                 rel_dyn->add_local(object, r_sym, dyn_r_type, output_section,
1980                                    data_shndx, reloc.get_r_offset());
1981               }
1982             break;
1983
1984           default:
1985             gold_unreachable();
1986           }
1987       }
1988       break;
1989
1990     case elfcpp::R_386_32PLT:
1991     case elfcpp::R_386_TLS_GD_32:
1992     case elfcpp::R_386_TLS_GD_PUSH:
1993     case elfcpp::R_386_TLS_GD_CALL:
1994     case elfcpp::R_386_TLS_GD_POP:
1995     case elfcpp::R_386_TLS_LDM_32:
1996     case elfcpp::R_386_TLS_LDM_PUSH:
1997     case elfcpp::R_386_TLS_LDM_CALL:
1998     case elfcpp::R_386_TLS_LDM_POP:
1999     case elfcpp::R_386_USED_BY_INTEL_200:
2000     default:
2001       unsupported_reloc_local(object, r_type);
2002       break;
2003     }
2004 }
2005
2006 // Report an unsupported relocation against a global symbol.
2007
2008 void
2009 Target_i386::Scan::unsupported_reloc_global(
2010     Sized_relobj_file<32, false>* object,
2011     unsigned int r_type,
2012     Symbol* gsym)
2013 {
2014   gold_error(_("%s: unsupported reloc %u against global symbol %s"),
2015              object->name().c_str(), r_type, gsym->demangled_name().c_str());
2016 }
2017
2018 inline bool
2019 Target_i386::Scan::possible_function_pointer_reloc(unsigned int r_type)
2020 {
2021   switch (r_type)
2022     {
2023     case elfcpp::R_386_32:
2024     case elfcpp::R_386_16:
2025     case elfcpp::R_386_8:
2026     case elfcpp::R_386_GOTOFF:
2027     case elfcpp::R_386_GOT32:
2028       {
2029         return true;
2030       }
2031     default:
2032       return false;
2033     }
2034   return false;
2035 }
2036
2037 inline bool
2038 Target_i386::Scan::local_reloc_may_be_function_pointer(
2039   Symbol_table* ,
2040   Layout* ,
2041   Target_i386* ,
2042   Sized_relobj_file<32, false>* ,
2043   unsigned int ,
2044   Output_section* ,
2045   const elfcpp::Rel<32, false>& ,
2046   unsigned int r_type,
2047   const elfcpp::Sym<32, false>&)
2048 {
2049   return possible_function_pointer_reloc(r_type);
2050 }
2051
2052 inline bool
2053 Target_i386::Scan::global_reloc_may_be_function_pointer(
2054   Symbol_table* ,
2055   Layout* ,
2056   Target_i386* ,
2057   Sized_relobj_file<32, false>* ,
2058   unsigned int ,
2059   Output_section* ,
2060   const elfcpp::Rel<32, false>& ,
2061   unsigned int r_type,
2062   Symbol*)
2063 {
2064   return possible_function_pointer_reloc(r_type);
2065 }
2066
2067 // Scan a relocation for a global symbol.
2068
2069 inline void
2070 Target_i386::Scan::global(Symbol_table* symtab,
2071                                  Layout* layout,
2072                                  Target_i386* target,
2073                                  Sized_relobj_file<32, false>* object,
2074                                  unsigned int data_shndx,
2075                                  Output_section* output_section,
2076                                  const elfcpp::Rel<32, false>& reloc,
2077                                  unsigned int r_type,
2078                                  Symbol* gsym)
2079 {
2080   // A STT_GNU_IFUNC symbol may require a PLT entry.
2081   if (gsym->type() == elfcpp::STT_GNU_IFUNC
2082       && this->reloc_needs_plt_for_ifunc(object, r_type))
2083     target->make_plt_entry(symtab, layout, gsym);
2084
2085   switch (r_type)
2086     {
2087     case elfcpp::R_386_NONE:
2088     case elfcpp::R_386_GNU_VTINHERIT:
2089     case elfcpp::R_386_GNU_VTENTRY:
2090       break;
2091
2092     case elfcpp::R_386_32:
2093     case elfcpp::R_386_16:
2094     case elfcpp::R_386_8:
2095       {
2096         // Make a PLT entry if necessary.
2097         if (gsym->needs_plt_entry())
2098           {
2099             target->make_plt_entry(symtab, layout, gsym);
2100             // Since this is not a PC-relative relocation, we may be
2101             // taking the address of a function. In that case we need to
2102             // set the entry in the dynamic symbol table to the address of
2103             // the PLT entry.
2104             if (gsym->is_from_dynobj() && !parameters->options().shared())
2105               gsym->set_needs_dynsym_value();
2106           }
2107         // Make a dynamic relocation if necessary.
2108         if (gsym->needs_dynamic_reloc(Scan::get_reference_flags(r_type)))
2109           {
2110             if (gsym->may_need_copy_reloc())
2111               {
2112                 target->copy_reloc(symtab, layout, object,
2113                                    data_shndx, output_section, gsym, reloc);
2114               }
2115             else if (r_type == elfcpp::R_386_32
2116                      && gsym->type() == elfcpp::STT_GNU_IFUNC
2117                      && gsym->can_use_relative_reloc(false)
2118                      && !gsym->is_from_dynobj()
2119                      && !gsym->is_undefined()
2120                      && !gsym->is_preemptible())
2121               {
2122                 // Use an IRELATIVE reloc for a locally defined
2123                 // STT_GNU_IFUNC symbol.  This makes a function
2124                 // address in a PIE executable match the address in a
2125                 // shared library that it links against.
2126                 Reloc_section* rel_dyn = target->rel_irelative_section(layout);
2127                 rel_dyn->add_symbolless_global_addend(gsym,
2128                                                       elfcpp::R_386_IRELATIVE,
2129                                                       output_section,
2130                                                       object, data_shndx,
2131                                                       reloc.get_r_offset());
2132               }
2133             else if (r_type == elfcpp::R_386_32
2134                      && gsym->can_use_relative_reloc(false))
2135               {
2136                 Reloc_section* rel_dyn = target->rel_dyn_section(layout);
2137                 rel_dyn->add_global_relative(gsym, elfcpp::R_386_RELATIVE,
2138                                              output_section, object,
2139                                              data_shndx, reloc.get_r_offset());
2140               }
2141             else
2142               {
2143                 Reloc_section* rel_dyn = target->rel_dyn_section(layout);
2144                 rel_dyn->add_global(gsym, r_type, output_section, object,
2145                                     data_shndx, reloc.get_r_offset());
2146               }
2147           }
2148       }
2149       break;
2150
2151     case elfcpp::R_386_PC32:
2152     case elfcpp::R_386_PC16:
2153     case elfcpp::R_386_PC8:
2154       {
2155         // Make a PLT entry if necessary.
2156         if (gsym->needs_plt_entry())
2157           {
2158             // These relocations are used for function calls only in
2159             // non-PIC code.  For a 32-bit relocation in a shared library,
2160             // we'll need a text relocation anyway, so we can skip the
2161             // PLT entry and let the dynamic linker bind the call directly
2162             // to the target.  For smaller relocations, we should use a
2163             // PLT entry to ensure that the call can reach.
2164             if (!parameters->options().shared()
2165                 || r_type != elfcpp::R_386_PC32)
2166               target->make_plt_entry(symtab, layout, gsym);
2167           }
2168         // Make a dynamic relocation if necessary.
2169         if (gsym->needs_dynamic_reloc(Scan::get_reference_flags(r_type)))
2170           {
2171             if (gsym->may_need_copy_reloc())
2172               {
2173                 target->copy_reloc(symtab, layout, object,
2174                                    data_shndx, output_section, gsym, reloc);
2175               }
2176             else
2177               {
2178                 Reloc_section* rel_dyn = target->rel_dyn_section(layout);
2179                 rel_dyn->add_global(gsym, r_type, output_section, object,
2180                                     data_shndx, reloc.get_r_offset());
2181               }
2182           }
2183       }
2184       break;
2185
2186     case elfcpp::R_386_GOT32:
2187       {
2188         // The symbol requires a GOT entry.
2189         Output_data_got<32, false>* got = target->got_section(symtab, layout);
2190         if (gsym->final_value_is_known())
2191           {
2192             // For a STT_GNU_IFUNC symbol we want the PLT address.
2193             if (gsym->type() == elfcpp::STT_GNU_IFUNC)
2194               got->add_global_plt(gsym, GOT_TYPE_STANDARD);
2195             else
2196               got->add_global(gsym, GOT_TYPE_STANDARD);
2197           }
2198         else
2199           {
2200             // If this symbol is not fully resolved, we need to add a
2201             // GOT entry with a dynamic relocation.
2202             Reloc_section* rel_dyn = target->rel_dyn_section(layout);
2203
2204             // Use a GLOB_DAT rather than a RELATIVE reloc if:
2205             //
2206             // 1) The symbol may be defined in some other module.
2207             //
2208             // 2) We are building a shared library and this is a
2209             // protected symbol; using GLOB_DAT means that the dynamic
2210             // linker can use the address of the PLT in the main
2211             // executable when appropriate so that function address
2212             // comparisons work.
2213             //
2214             // 3) This is a STT_GNU_IFUNC symbol in position dependent
2215             // code, again so that function address comparisons work.
2216             if (gsym->is_from_dynobj()
2217                 || gsym->is_undefined()
2218                 || gsym->is_preemptible()
2219                 || (gsym->visibility() == elfcpp::STV_PROTECTED
2220                     && parameters->options().shared())
2221                 || (gsym->type() == elfcpp::STT_GNU_IFUNC
2222                     && parameters->options().output_is_position_independent()))
2223               got->add_global_with_rel(gsym, GOT_TYPE_STANDARD,
2224                                        rel_dyn, elfcpp::R_386_GLOB_DAT);
2225             else
2226               {
2227                 // For a STT_GNU_IFUNC symbol we want to write the PLT
2228                 // offset into the GOT, so that function pointer
2229                 // comparisons work correctly.
2230                 bool is_new;
2231                 if (gsym->type() != elfcpp::STT_GNU_IFUNC)
2232                   is_new = got->add_global(gsym, GOT_TYPE_STANDARD);
2233                 else
2234                   {
2235                     is_new = got->add_global_plt(gsym, GOT_TYPE_STANDARD);
2236                     // Tell the dynamic linker to use the PLT address
2237                     // when resolving relocations.
2238                     if (gsym->is_from_dynobj()
2239                         && !parameters->options().shared())
2240                       gsym->set_needs_dynsym_value();
2241                   }
2242                 if (is_new)
2243                   {
2244                     unsigned int got_off = gsym->got_offset(GOT_TYPE_STANDARD);
2245                     rel_dyn->add_global_relative(gsym, elfcpp::R_386_RELATIVE,
2246                                                  got, got_off);
2247                   }
2248               }
2249           }
2250       }
2251       break;
2252
2253     case elfcpp::R_386_PLT32:
2254       // If the symbol is fully resolved, this is just a PC32 reloc.
2255       // Otherwise we need a PLT entry.
2256       if (gsym->final_value_is_known())
2257         break;
2258       // If building a shared library, we can also skip the PLT entry
2259       // if the symbol is defined in the output file and is protected
2260       // or hidden.
2261       if (gsym->is_defined()
2262           && !gsym->is_from_dynobj()
2263           && !gsym->is_preemptible())
2264         break;
2265       target->make_plt_entry(symtab, layout, gsym);
2266       break;
2267
2268     case elfcpp::R_386_GOTOFF:
2269     case elfcpp::R_386_GOTPC:
2270       // We need a GOT section.
2271       target->got_section(symtab, layout);
2272       break;
2273
2274       // These are relocations which should only be seen by the
2275       // dynamic linker, and should never be seen here.
2276     case elfcpp::R_386_COPY:
2277     case elfcpp::R_386_GLOB_DAT:
2278     case elfcpp::R_386_JUMP_SLOT:
2279     case elfcpp::R_386_RELATIVE:
2280     case elfcpp::R_386_IRELATIVE:
2281     case elfcpp::R_386_TLS_TPOFF:
2282     case elfcpp::R_386_TLS_DTPMOD32:
2283     case elfcpp::R_386_TLS_DTPOFF32:
2284     case elfcpp::R_386_TLS_TPOFF32:
2285     case elfcpp::R_386_TLS_DESC:
2286       gold_error(_("%s: unexpected reloc %u in object file"),
2287                  object->name().c_str(), r_type);
2288       break;
2289
2290       // These are initial tls relocs, which are expected when
2291       // linking.
2292     case elfcpp::R_386_TLS_GD:            // Global-dynamic
2293     case elfcpp::R_386_TLS_GOTDESC:       // Global-dynamic (from ~oliva url)
2294     case elfcpp::R_386_TLS_DESC_CALL:
2295     case elfcpp::R_386_TLS_LDM:           // Local-dynamic
2296     case elfcpp::R_386_TLS_LDO_32:        // Alternate local-dynamic
2297     case elfcpp::R_386_TLS_IE:            // Initial-exec
2298     case elfcpp::R_386_TLS_IE_32:
2299     case elfcpp::R_386_TLS_GOTIE:
2300     case elfcpp::R_386_TLS_LE:            // Local-exec
2301     case elfcpp::R_386_TLS_LE_32:
2302       {
2303         const bool is_final = gsym->final_value_is_known();
2304         const tls::Tls_optimization optimized_type
2305             = Target_i386::optimize_tls_reloc(is_final, r_type);
2306         switch (r_type)
2307           {
2308           case elfcpp::R_386_TLS_GD:          // Global-dynamic
2309             if (optimized_type == tls::TLSOPT_NONE)
2310               {
2311                 // Create a pair of GOT entries for the module index and
2312                 // dtv-relative offset.
2313                 Output_data_got<32, false>* got
2314                     = target->got_section(symtab, layout);
2315                 got->add_global_pair_with_rel(gsym, GOT_TYPE_TLS_PAIR,
2316                                              target->rel_dyn_section(layout),
2317                                              elfcpp::R_386_TLS_DTPMOD32,
2318                                              elfcpp::R_386_TLS_DTPOFF32);
2319               }
2320             else if (optimized_type == tls::TLSOPT_TO_IE)
2321               {
2322                 // Create a GOT entry for the tp-relative offset.
2323                 Output_data_got<32, false>* got
2324                     = target->got_section(symtab, layout);
2325                 got->add_global_with_rel(gsym, GOT_TYPE_TLS_NOFFSET,
2326                                          target->rel_dyn_section(layout),
2327                                          elfcpp::R_386_TLS_TPOFF);
2328               }
2329             else if (optimized_type != tls::TLSOPT_TO_LE)
2330               unsupported_reloc_global(object, r_type, gsym);
2331             break;
2332
2333           case elfcpp::R_386_TLS_GOTDESC:     // Global-dynamic (~oliva url)
2334             target->define_tls_base_symbol(symtab, layout);
2335             if (optimized_type == tls::TLSOPT_NONE)
2336               {
2337                 // Create a double GOT entry with an R_386_TLS_DESC
2338                 // reloc.  The R_386_TLS_DESC reloc is resolved
2339                 // lazily, so the GOT entry needs to be in an area in
2340                 // .got.plt, not .got.  Call got_section to make sure
2341                 // the section has been created.
2342                 target->got_section(symtab, layout);
2343                 Output_data_got<32, false>* got = target->got_tlsdesc_section();
2344                 Reloc_section* rt = target->rel_tls_desc_section(layout);
2345                 got->add_global_pair_with_rel(gsym, GOT_TYPE_TLS_DESC, rt,
2346                                              elfcpp::R_386_TLS_DESC, 0);
2347               }
2348             else if (optimized_type == tls::TLSOPT_TO_IE)
2349               {
2350                 // Create a GOT entry for the tp-relative offset.
2351                 Output_data_got<32, false>* got
2352                     = target->got_section(symtab, layout);
2353                 got->add_global_with_rel(gsym, GOT_TYPE_TLS_NOFFSET,
2354                                          target->rel_dyn_section(layout),
2355                                          elfcpp::R_386_TLS_TPOFF);
2356               }
2357             else if (optimized_type != tls::TLSOPT_TO_LE)
2358               unsupported_reloc_global(object, r_type, gsym);
2359             break;
2360
2361           case elfcpp::R_386_TLS_DESC_CALL:
2362             break;
2363
2364           case elfcpp::R_386_TLS_LDM:         // Local-dynamic
2365             if (optimized_type == tls::TLSOPT_NONE)
2366               {
2367                 // Create a GOT entry for the module index.
2368                 target->got_mod_index_entry(symtab, layout, object);
2369               }
2370             else if (optimized_type != tls::TLSOPT_TO_LE)
2371               unsupported_reloc_global(object, r_type, gsym);
2372             break;
2373
2374           case elfcpp::R_386_TLS_LDO_32:      // Alternate local-dynamic
2375             break;
2376
2377           case elfcpp::R_386_TLS_IE:          // Initial-exec
2378           case elfcpp::R_386_TLS_IE_32:
2379           case elfcpp::R_386_TLS_GOTIE:
2380             layout->set_has_static_tls();
2381             if (optimized_type == tls::TLSOPT_NONE)
2382               {
2383                 // For the R_386_TLS_IE relocation, we need to create a
2384                 // dynamic relocation when building a shared library.
2385                 if (r_type == elfcpp::R_386_TLS_IE
2386                     && parameters->options().shared())
2387                   {
2388                     Reloc_section* rel_dyn = target->rel_dyn_section(layout);
2389                     rel_dyn->add_global_relative(gsym, elfcpp::R_386_RELATIVE,
2390                                                  output_section, object,
2391                                                  data_shndx,
2392                                                  reloc.get_r_offset());
2393                   }
2394                 // Create a GOT entry for the tp-relative offset.
2395                 Output_data_got<32, false>* got
2396                     = target->got_section(symtab, layout);
2397                 unsigned int dyn_r_type = (r_type == elfcpp::R_386_TLS_IE_32
2398                                            ? elfcpp::R_386_TLS_TPOFF32
2399                                            : elfcpp::R_386_TLS_TPOFF);
2400                 unsigned int got_type = (r_type == elfcpp::R_386_TLS_IE_32
2401                                          ? GOT_TYPE_TLS_OFFSET
2402                                          : GOT_TYPE_TLS_NOFFSET);
2403                 got->add_global_with_rel(gsym, got_type,
2404                                          target->rel_dyn_section(layout),
2405                                          dyn_r_type);
2406               }
2407             else if (optimized_type != tls::TLSOPT_TO_LE)
2408               unsupported_reloc_global(object, r_type, gsym);
2409             break;
2410
2411           case elfcpp::R_386_TLS_LE:          // Local-exec
2412           case elfcpp::R_386_TLS_LE_32:
2413             layout->set_has_static_tls();
2414             if (parameters->options().shared())
2415               {
2416                 // We need to create a dynamic relocation.
2417                 unsigned int dyn_r_type = (r_type == elfcpp::R_386_TLS_LE_32
2418                                            ? elfcpp::R_386_TLS_TPOFF32
2419                                            : elfcpp::R_386_TLS_TPOFF);
2420                 Reloc_section* rel_dyn = target->rel_dyn_section(layout);
2421                 rel_dyn->add_global(gsym, dyn_r_type, output_section, object,
2422                                     data_shndx, reloc.get_r_offset());
2423               }
2424             break;
2425
2426           default:
2427             gold_unreachable();
2428           }
2429       }
2430       break;
2431
2432     case elfcpp::R_386_32PLT:
2433     case elfcpp::R_386_TLS_GD_32:
2434     case elfcpp::R_386_TLS_GD_PUSH:
2435     case elfcpp::R_386_TLS_GD_CALL:
2436     case elfcpp::R_386_TLS_GD_POP:
2437     case elfcpp::R_386_TLS_LDM_32:
2438     case elfcpp::R_386_TLS_LDM_PUSH:
2439     case elfcpp::R_386_TLS_LDM_CALL:
2440     case elfcpp::R_386_TLS_LDM_POP:
2441     case elfcpp::R_386_USED_BY_INTEL_200:
2442     default:
2443       unsupported_reloc_global(object, r_type, gsym);
2444       break;
2445     }
2446 }
2447
2448 // Process relocations for gc.
2449
2450 void
2451 Target_i386::gc_process_relocs(Symbol_table* symtab,
2452                                       Layout* layout,
2453                                       Sized_relobj_file<32, false>* object,
2454                                       unsigned int data_shndx,
2455                                       unsigned int,
2456                                       const unsigned char* prelocs,
2457                                       size_t reloc_count,
2458                                       Output_section* output_section,
2459                                       bool needs_special_offset_handling,
2460                                       size_t local_symbol_count,
2461                                       const unsigned char* plocal_symbols)
2462 {
2463   gold::gc_process_relocs<32, false, Target_i386, elfcpp::SHT_REL,
2464                           Target_i386::Scan,
2465                           Target_i386::Relocatable_size_for_reloc>(
2466     symtab,
2467     layout,
2468     this,
2469     object,
2470     data_shndx,
2471     prelocs,
2472     reloc_count,
2473     output_section,
2474     needs_special_offset_handling,
2475     local_symbol_count,
2476     plocal_symbols);
2477 }
2478
2479 // Scan relocations for a section.
2480
2481 void
2482 Target_i386::scan_relocs(Symbol_table* symtab,
2483                                 Layout* layout,
2484                                 Sized_relobj_file<32, false>* object,
2485                                 unsigned int data_shndx,
2486                                 unsigned int sh_type,
2487                                 const unsigned char* prelocs,
2488                                 size_t reloc_count,
2489                                 Output_section* output_section,
2490                                 bool needs_special_offset_handling,
2491                                 size_t local_symbol_count,
2492                                 const unsigned char* plocal_symbols)
2493 {
2494   if (sh_type == elfcpp::SHT_RELA)
2495     {
2496       gold_error(_("%s: unsupported RELA reloc section"),
2497                  object->name().c_str());
2498       return;
2499     }
2500
2501   gold::scan_relocs<32, false, Target_i386, elfcpp::SHT_REL,
2502                     Target_i386::Scan>(
2503     symtab,
2504     layout,
2505     this,
2506     object,
2507     data_shndx,
2508     prelocs,
2509     reloc_count,
2510     output_section,
2511     needs_special_offset_handling,
2512     local_symbol_count,
2513     plocal_symbols);
2514 }
2515
2516 // Finalize the sections.
2517
2518 void
2519 Target_i386::do_finalize_sections(
2520     Layout* layout,
2521     const Input_objects*,
2522     Symbol_table* symtab)
2523 {
2524   const Reloc_section* rel_plt = (this->plt_ == NULL
2525                                   ? NULL
2526                                   : this->plt_->rel_plt());
2527   layout->add_target_dynamic_tags(true, this->got_plt_, rel_plt,
2528                                   this->rel_dyn_, true, false);
2529
2530   // Emit any relocs we saved in an attempt to avoid generating COPY
2531   // relocs.
2532   if (this->copy_relocs_.any_saved_relocs())
2533     this->copy_relocs_.emit(this->rel_dyn_section(layout));
2534
2535   // Set the size of the _GLOBAL_OFFSET_TABLE_ symbol to the size of
2536   // the .got.plt section.
2537   Symbol* sym = this->global_offset_table_;
2538   if (sym != NULL)
2539     {
2540       uint32_t data_size = this->got_plt_->current_data_size();
2541       symtab->get_sized_symbol<32>(sym)->set_symsize(data_size);
2542     }
2543
2544   if (parameters->doing_static_link()
2545       && (this->plt_ == NULL || !this->plt_->has_irelative_section()))
2546     {
2547       // If linking statically, make sure that the __rel_iplt symbols
2548       // were defined if necessary, even if we didn't create a PLT.
2549       static const Define_symbol_in_segment syms[] =
2550         {
2551           {
2552             "__rel_iplt_start",         // name
2553             elfcpp::PT_LOAD,            // segment_type
2554             elfcpp::PF_W,               // segment_flags_set
2555             elfcpp::PF(0),              // segment_flags_clear
2556             0,                          // value
2557             0,                          // size
2558             elfcpp::STT_NOTYPE,         // type
2559             elfcpp::STB_GLOBAL,         // binding
2560             elfcpp::STV_HIDDEN,         // visibility
2561             0,                          // nonvis
2562             Symbol::SEGMENT_START,      // offset_from_base
2563             true                        // only_if_ref
2564           },
2565           {
2566             "__rel_iplt_end",           // name
2567             elfcpp::PT_LOAD,            // segment_type
2568             elfcpp::PF_W,               // segment_flags_set
2569             elfcpp::PF(0),              // segment_flags_clear
2570             0,                          // value
2571             0,                          // size
2572             elfcpp::STT_NOTYPE,         // type
2573             elfcpp::STB_GLOBAL,         // binding
2574             elfcpp::STV_HIDDEN,         // visibility
2575             0,                          // nonvis
2576             Symbol::SEGMENT_START,      // offset_from_base
2577             true                        // only_if_ref
2578           }
2579         };
2580
2581       symtab->define_symbols(layout, 2, syms,
2582                              layout->script_options()->saw_sections_clause());
2583     }
2584 }
2585
2586 // Return whether a direct absolute static relocation needs to be applied.
2587 // In cases where Scan::local() or Scan::global() has created
2588 // a dynamic relocation other than R_386_RELATIVE, the addend
2589 // of the relocation is carried in the data, and we must not
2590 // apply the static relocation.
2591
2592 inline bool
2593 Target_i386::Relocate::should_apply_static_reloc(const Sized_symbol<32>* gsym,
2594                                                  unsigned int r_type,
2595                                                  bool is_32bit,
2596                                                  Output_section* output_section)
2597 {
2598   // If the output section is not allocated, then we didn't call
2599   // scan_relocs, we didn't create a dynamic reloc, and we must apply
2600   // the reloc here.
2601   if ((output_section->flags() & elfcpp::SHF_ALLOC) == 0)
2602     return true;
2603
2604   int ref_flags = Scan::get_reference_flags(r_type);
2605
2606   // For local symbols, we will have created a non-RELATIVE dynamic
2607   // relocation only if (a) the output is position independent,
2608   // (b) the relocation is absolute (not pc- or segment-relative), and
2609   // (c) the relocation is not 32 bits wide.
2610   if (gsym == NULL)
2611     return !(parameters->options().output_is_position_independent()
2612              && (ref_flags & Symbol::ABSOLUTE_REF)
2613              && !is_32bit);
2614
2615   // For global symbols, we use the same helper routines used in the
2616   // scan pass.  If we did not create a dynamic relocation, or if we
2617   // created a RELATIVE dynamic relocation, we should apply the static
2618   // relocation.
2619   bool has_dyn = gsym->needs_dynamic_reloc(ref_flags);
2620   bool is_rel = (ref_flags & Symbol::ABSOLUTE_REF)
2621                 && gsym->can_use_relative_reloc(ref_flags
2622                                                 & Symbol::FUNCTION_CALL);
2623   return !has_dyn || is_rel;
2624 }
2625
2626 // Perform a relocation.
2627
2628 inline bool
2629 Target_i386::Relocate::relocate(const Relocate_info<32, false>* relinfo,
2630                                        Target_i386* target,
2631                                        Output_section* output_section,
2632                                        size_t relnum,
2633                                        const elfcpp::Rel<32, false>& rel,
2634                                        unsigned int r_type,
2635                                        const Sized_symbol<32>* gsym,
2636                                        const Symbol_value<32>* psymval,
2637                                        unsigned char* view,
2638                                        elfcpp::Elf_types<32>::Elf_Addr address,
2639                                        section_size_type view_size)
2640 {
2641   if (this->skip_call_tls_get_addr_)
2642     {
2643       if ((r_type != elfcpp::R_386_PLT32
2644            && r_type != elfcpp::R_386_PC32)
2645           || gsym == NULL
2646           || strcmp(gsym->name(), "___tls_get_addr") != 0)
2647         gold_error_at_location(relinfo, relnum, rel.get_r_offset(),
2648                                _("missing expected TLS relocation"));
2649       else
2650         {
2651           this->skip_call_tls_get_addr_ = false;
2652           return false;
2653         }
2654     }
2655
2656   const Sized_relobj_file<32, false>* object = relinfo->object;
2657
2658   // Pick the value to use for symbols defined in shared objects.
2659   Symbol_value<32> symval;
2660   if (gsym != NULL
2661       && gsym->type() == elfcpp::STT_GNU_IFUNC
2662       && r_type == elfcpp::R_386_32
2663       && gsym->needs_dynamic_reloc(Scan::get_reference_flags(r_type))
2664       && gsym->can_use_relative_reloc(false)
2665       && !gsym->is_from_dynobj()
2666       && !gsym->is_undefined()
2667       && !gsym->is_preemptible())
2668     {
2669       // In this case we are generating a R_386_IRELATIVE reloc.  We
2670       // want to use the real value of the symbol, not the PLT offset.
2671     }
2672   else if (gsym != NULL
2673            && gsym->use_plt_offset(Scan::get_reference_flags(r_type)))
2674     {
2675       symval.set_output_value(target->plt_address_for_global(gsym)
2676                               + gsym->plt_offset());
2677       psymval = &symval;
2678     }
2679   else if (gsym == NULL && psymval->is_ifunc_symbol())
2680     {
2681       unsigned int r_sym = elfcpp::elf_r_sym<32>(rel.get_r_info());
2682       if (object->local_has_plt_offset(r_sym))
2683         {
2684           symval.set_output_value(target->plt_address_for_local(object, r_sym)
2685                                   + object->local_plt_offset(r_sym));
2686           psymval = &symval;
2687         }
2688     }
2689
2690   // Get the GOT offset if needed.
2691   // The GOT pointer points to the end of the GOT section.
2692   // We need to subtract the size of the GOT section to get
2693   // the actual offset to use in the relocation.
2694   bool have_got_offset = false;
2695   unsigned int got_offset = 0;
2696   switch (r_type)
2697     {
2698     case elfcpp::R_386_GOT32:
2699       if (gsym != NULL)
2700         {
2701           gold_assert(gsym->has_got_offset(GOT_TYPE_STANDARD));
2702           got_offset = (gsym->got_offset(GOT_TYPE_STANDARD)
2703                         - target->got_size());
2704         }
2705       else
2706         {
2707           unsigned int r_sym = elfcpp::elf_r_sym<32>(rel.get_r_info());
2708           gold_assert(object->local_has_got_offset(r_sym, GOT_TYPE_STANDARD));
2709           got_offset = (object->local_got_offset(r_sym, GOT_TYPE_STANDARD)
2710                         - target->got_size());
2711         }
2712       have_got_offset = true;
2713       break;
2714
2715     default:
2716       break;
2717     }
2718
2719   switch (r_type)
2720     {
2721     case elfcpp::R_386_NONE:
2722     case elfcpp::R_386_GNU_VTINHERIT:
2723     case elfcpp::R_386_GNU_VTENTRY:
2724       break;
2725
2726     case elfcpp::R_386_32:
2727       if (should_apply_static_reloc(gsym, r_type, true, output_section))
2728         Relocate_functions<32, false>::rel32(view, object, psymval);
2729       break;
2730
2731     case elfcpp::R_386_PC32:
2732       if (should_apply_static_reloc(gsym, r_type, true, output_section))
2733         Relocate_functions<32, false>::pcrel32(view, object, psymval, address);
2734       break;
2735
2736     case elfcpp::R_386_16:
2737       if (should_apply_static_reloc(gsym, r_type, false, output_section))
2738         Relocate_functions<32, false>::rel16(view, object, psymval);
2739       break;
2740
2741     case elfcpp::R_386_PC16:
2742       if (should_apply_static_reloc(gsym, r_type, false, output_section))
2743         Relocate_functions<32, false>::pcrel16(view, object, psymval, address);
2744       break;
2745
2746     case elfcpp::R_386_8:
2747       if (should_apply_static_reloc(gsym, r_type, false, output_section))
2748         Relocate_functions<32, false>::rel8(view, object, psymval);
2749       break;
2750
2751     case elfcpp::R_386_PC8:
2752       if (should_apply_static_reloc(gsym, r_type, false, output_section))
2753         Relocate_functions<32, false>::pcrel8(view, object, psymval, address);
2754       break;
2755
2756     case elfcpp::R_386_PLT32:
2757       gold_assert(gsym == NULL
2758                   || gsym->has_plt_offset()
2759                   || gsym->final_value_is_known()
2760                   || (gsym->is_defined()
2761                       && !gsym->is_from_dynobj()
2762                       && !gsym->is_preemptible()));
2763       Relocate_functions<32, false>::pcrel32(view, object, psymval, address);
2764       break;
2765
2766     case elfcpp::R_386_GOT32:
2767       gold_assert(have_got_offset);
2768       Relocate_functions<32, false>::rel32(view, got_offset);
2769       break;
2770
2771     case elfcpp::R_386_GOTOFF:
2772       {
2773         elfcpp::Elf_types<32>::Elf_Addr value;
2774         value = (psymval->value(object, 0)
2775                  - target->got_plt_section()->address());
2776         Relocate_functions<32, false>::rel32(view, value);
2777       }
2778       break;
2779
2780     case elfcpp::R_386_GOTPC:
2781       {
2782         elfcpp::Elf_types<32>::Elf_Addr value;
2783         value = target->got_plt_section()->address();
2784         Relocate_functions<32, false>::pcrel32(view, value, address);
2785       }
2786       break;
2787
2788     case elfcpp::R_386_COPY:
2789     case elfcpp::R_386_GLOB_DAT:
2790     case elfcpp::R_386_JUMP_SLOT:
2791     case elfcpp::R_386_RELATIVE:
2792     case elfcpp::R_386_IRELATIVE:
2793       // These are outstanding tls relocs, which are unexpected when
2794       // linking.
2795     case elfcpp::R_386_TLS_TPOFF:
2796     case elfcpp::R_386_TLS_DTPMOD32:
2797     case elfcpp::R_386_TLS_DTPOFF32:
2798     case elfcpp::R_386_TLS_TPOFF32:
2799     case elfcpp::R_386_TLS_DESC:
2800       gold_error_at_location(relinfo, relnum, rel.get_r_offset(),
2801                              _("unexpected reloc %u in object file"),
2802                              r_type);
2803       break;
2804
2805       // These are initial tls relocs, which are expected when
2806       // linking.
2807     case elfcpp::R_386_TLS_GD:             // Global-dynamic
2808     case elfcpp::R_386_TLS_GOTDESC:        // Global-dynamic (from ~oliva url)
2809     case elfcpp::R_386_TLS_DESC_CALL:
2810     case elfcpp::R_386_TLS_LDM:            // Local-dynamic
2811     case elfcpp::R_386_TLS_LDO_32:         // Alternate local-dynamic
2812     case elfcpp::R_386_TLS_IE:             // Initial-exec
2813     case elfcpp::R_386_TLS_IE_32:
2814     case elfcpp::R_386_TLS_GOTIE:
2815     case elfcpp::R_386_TLS_LE:             // Local-exec
2816     case elfcpp::R_386_TLS_LE_32:
2817       this->relocate_tls(relinfo, target, relnum, rel, r_type, gsym, psymval,
2818                          view, address, view_size);
2819       break;
2820
2821     case elfcpp::R_386_32PLT:
2822     case elfcpp::R_386_TLS_GD_32:
2823     case elfcpp::R_386_TLS_GD_PUSH:
2824     case elfcpp::R_386_TLS_GD_CALL:
2825     case elfcpp::R_386_TLS_GD_POP:
2826     case elfcpp::R_386_TLS_LDM_32:
2827     case elfcpp::R_386_TLS_LDM_PUSH:
2828     case elfcpp::R_386_TLS_LDM_CALL:
2829     case elfcpp::R_386_TLS_LDM_POP:
2830     case elfcpp::R_386_USED_BY_INTEL_200:
2831     default:
2832       gold_error_at_location(relinfo, relnum, rel.get_r_offset(),
2833                              _("unsupported reloc %u"),
2834                              r_type);
2835       break;
2836     }
2837
2838   return true;
2839 }
2840
2841 // Perform a TLS relocation.
2842
2843 inline void
2844 Target_i386::Relocate::relocate_tls(const Relocate_info<32, false>* relinfo,
2845                                     Target_i386* target,
2846                                     size_t relnum,
2847                                     const elfcpp::Rel<32, false>& rel,
2848                                     unsigned int r_type,
2849                                     const Sized_symbol<32>* gsym,
2850                                     const Symbol_value<32>* psymval,
2851                                     unsigned char* view,
2852                                     elfcpp::Elf_types<32>::Elf_Addr,
2853                                     section_size_type view_size)
2854 {
2855   Output_segment* tls_segment = relinfo->layout->tls_segment();
2856
2857   const Sized_relobj_file<32, false>* object = relinfo->object;
2858
2859   elfcpp::Elf_types<32>::Elf_Addr value = psymval->value(object, 0);
2860
2861   const bool is_final = (gsym == NULL
2862                          ? !parameters->options().shared()
2863                          : gsym->final_value_is_known());
2864   const tls::Tls_optimization optimized_type
2865       = Target_i386::optimize_tls_reloc(is_final, r_type);
2866   switch (r_type)
2867     {
2868     case elfcpp::R_386_TLS_GD:           // Global-dynamic
2869       if (optimized_type == tls::TLSOPT_TO_LE)
2870         {
2871           if (tls_segment == NULL)
2872             {
2873               gold_assert(parameters->errors()->error_count() > 0
2874                           || issue_undefined_symbol_error(gsym));
2875               return;
2876             }
2877           this->tls_gd_to_le(relinfo, relnum, tls_segment,
2878                              rel, r_type, value, view,
2879                              view_size);
2880           break;
2881         }
2882       else
2883         {
2884           unsigned int got_type = (optimized_type == tls::TLSOPT_TO_IE
2885                                    ? GOT_TYPE_TLS_NOFFSET
2886                                    : GOT_TYPE_TLS_PAIR);
2887           unsigned int got_offset;
2888           if (gsym != NULL)
2889             {
2890               gold_assert(gsym->has_got_offset(got_type));
2891               got_offset = gsym->got_offset(got_type) - target->got_size();
2892             }
2893           else
2894             {
2895               unsigned int r_sym = elfcpp::elf_r_sym<32>(rel.get_r_info());
2896               gold_assert(object->local_has_got_offset(r_sym, got_type));
2897               got_offset = (object->local_got_offset(r_sym, got_type)
2898                             - target->got_size());
2899             }
2900           if (optimized_type == tls::TLSOPT_TO_IE)
2901             {
2902               this->tls_gd_to_ie(relinfo, relnum, tls_segment, rel, r_type,
2903                                  got_offset, view, view_size);
2904               break;
2905             }
2906           else if (optimized_type == tls::TLSOPT_NONE)
2907             {
2908               // Relocate the field with the offset of the pair of GOT
2909               // entries.
2910               Relocate_functions<32, false>::rel32(view, got_offset);
2911               break;
2912             }
2913         }
2914       gold_error_at_location(relinfo, relnum, rel.get_r_offset(),
2915                              _("unsupported reloc %u"),
2916                              r_type);
2917       break;
2918
2919     case elfcpp::R_386_TLS_GOTDESC:      // Global-dynamic (from ~oliva url)
2920     case elfcpp::R_386_TLS_DESC_CALL:
2921       this->local_dynamic_type_ = LOCAL_DYNAMIC_GNU;
2922       if (optimized_type == tls::TLSOPT_TO_LE)
2923         {
2924           if (tls_segment == NULL)
2925             {
2926               gold_assert(parameters->errors()->error_count() > 0
2927                           || issue_undefined_symbol_error(gsym));
2928               return;
2929             }
2930           this->tls_desc_gd_to_le(relinfo, relnum, tls_segment,
2931                                   rel, r_type, value, view,
2932                                   view_size);
2933           break;
2934         }
2935       else
2936         {
2937           unsigned int got_type = (optimized_type == tls::TLSOPT_TO_IE
2938                                    ? GOT_TYPE_TLS_NOFFSET
2939                                    : GOT_TYPE_TLS_DESC);
2940           unsigned int got_offset = 0;
2941           if (r_type == elfcpp::R_386_TLS_GOTDESC
2942               && optimized_type == tls::TLSOPT_NONE)
2943             {
2944               // We created GOT entries in the .got.tlsdesc portion of
2945               // the .got.plt section, but the offset stored in the
2946               // symbol is the offset within .got.tlsdesc.
2947               got_offset = (target->got_size()
2948                             + target->got_plt_section()->data_size());
2949             }
2950           if (gsym != NULL)
2951             {
2952               gold_assert(gsym->has_got_offset(got_type));
2953               got_offset += gsym->got_offset(got_type) - target->got_size();
2954             }
2955           else
2956             {
2957               unsigned int r_sym = elfcpp::elf_r_sym<32>(rel.get_r_info());
2958               gold_assert(object->local_has_got_offset(r_sym, got_type));
2959               got_offset += (object->local_got_offset(r_sym, got_type)
2960                              - target->got_size());
2961             }
2962           if (optimized_type == tls::TLSOPT_TO_IE)
2963             {
2964               if (tls_segment == NULL)
2965                 {
2966                   gold_assert(parameters->errors()->error_count() > 0
2967                               || issue_undefined_symbol_error(gsym));
2968                   return;
2969                 }
2970               this->tls_desc_gd_to_ie(relinfo, relnum, tls_segment, rel, r_type,
2971                                       got_offset, view, view_size);
2972               break;
2973             }
2974           else if (optimized_type == tls::TLSOPT_NONE)
2975             {
2976               if (r_type == elfcpp::R_386_TLS_GOTDESC)
2977                 {
2978                   // Relocate the field with the offset of the pair of GOT
2979                   // entries.
2980                   Relocate_functions<32, false>::rel32(view, got_offset);
2981                 }
2982               break;
2983             }
2984         }
2985       gold_error_at_location(relinfo, relnum, rel.get_r_offset(),
2986                              _("unsupported reloc %u"),
2987                              r_type);
2988       break;
2989
2990     case elfcpp::R_386_TLS_LDM:          // Local-dynamic
2991       if (this->local_dynamic_type_ == LOCAL_DYNAMIC_SUN)
2992         {
2993           gold_error_at_location(relinfo, relnum, rel.get_r_offset(),
2994                                  _("both SUN and GNU model "
2995                                    "TLS relocations"));
2996           break;
2997         }
2998       this->local_dynamic_type_ = LOCAL_DYNAMIC_GNU;
2999       if (optimized_type == tls::TLSOPT_TO_LE)
3000         {
3001           if (tls_segment == NULL)
3002             {
3003               gold_assert(parameters->errors()->error_count() > 0
3004                           || issue_undefined_symbol_error(gsym));
3005               return;
3006             }
3007           this->tls_ld_to_le(relinfo, relnum, tls_segment, rel, r_type,
3008                              value, view, view_size);
3009           break;
3010         }
3011       else if (optimized_type == tls::TLSOPT_NONE)
3012         {
3013           // Relocate the field with the offset of the GOT entry for
3014           // the module index.
3015           unsigned int got_offset;
3016           got_offset = (target->got_mod_index_entry(NULL, NULL, NULL)
3017                         - target->got_size());
3018           Relocate_functions<32, false>::rel32(view, got_offset);
3019           break;
3020         }
3021       gold_error_at_location(relinfo, relnum, rel.get_r_offset(),
3022                              _("unsupported reloc %u"),
3023                              r_type);
3024       break;
3025
3026     case elfcpp::R_386_TLS_LDO_32:       // Alternate local-dynamic
3027       if (optimized_type == tls::TLSOPT_TO_LE)
3028         {
3029           // This reloc can appear in debugging sections, in which
3030           // case we must not convert to local-exec.  We decide what
3031           // to do based on whether the section is marked as
3032           // containing executable code.  That is what the GNU linker
3033           // does as well.
3034           elfcpp::Shdr<32, false> shdr(relinfo->data_shdr);
3035           if ((shdr.get_sh_flags() & elfcpp::SHF_EXECINSTR) != 0)
3036             {
3037               if (tls_segment == NULL)
3038                 {
3039                   gold_assert(parameters->errors()->error_count() > 0
3040                               || issue_undefined_symbol_error(gsym));
3041                   return;
3042                 }
3043               value -= tls_segment->memsz();
3044             }
3045         }
3046       Relocate_functions<32, false>::rel32(view, value);
3047       break;
3048
3049     case elfcpp::R_386_TLS_IE:           // Initial-exec
3050     case elfcpp::R_386_TLS_GOTIE:
3051     case elfcpp::R_386_TLS_IE_32:
3052       if (optimized_type == tls::TLSOPT_TO_LE)
3053         {
3054           if (tls_segment == NULL)
3055             {
3056               gold_assert(parameters->errors()->error_count() > 0
3057                           || issue_undefined_symbol_error(gsym));
3058               return;
3059             }
3060           Target_i386::Relocate::tls_ie_to_le(relinfo, relnum, tls_segment,
3061                                               rel, r_type, value, view,
3062                                               view_size);
3063           break;
3064         }
3065       else if (optimized_type == tls::TLSOPT_NONE)
3066         {
3067           // Relocate the field with the offset of the GOT entry for
3068           // the tp-relative offset of the symbol.
3069           unsigned int got_type = (r_type == elfcpp::R_386_TLS_IE_32
3070                                    ? GOT_TYPE_TLS_OFFSET
3071                                    : GOT_TYPE_TLS_NOFFSET);
3072           unsigned int got_offset;
3073           if (gsym != NULL)
3074             {
3075               gold_assert(gsym->has_got_offset(got_type));
3076               got_offset = gsym->got_offset(got_type);
3077             }
3078           else
3079             {
3080               unsigned int r_sym = elfcpp::elf_r_sym<32>(rel.get_r_info());
3081               gold_assert(object->local_has_got_offset(r_sym, got_type));
3082               got_offset = object->local_got_offset(r_sym, got_type);
3083             }
3084           // For the R_386_TLS_IE relocation, we need to apply the
3085           // absolute address of the GOT entry.
3086           if (r_type == elfcpp::R_386_TLS_IE)
3087             got_offset += target->got_plt_section()->address();
3088           // All GOT offsets are relative to the end of the GOT.
3089           got_offset -= target->got_size();
3090           Relocate_functions<32, false>::rel32(view, got_offset);
3091           break;
3092         }
3093       gold_error_at_location(relinfo, relnum, rel.get_r_offset(),
3094                              _("unsupported reloc %u"),
3095                              r_type);
3096       break;
3097
3098     case elfcpp::R_386_TLS_LE:           // Local-exec
3099       // If we're creating a shared library, a dynamic relocation will
3100       // have been created for this location, so do not apply it now.
3101       if (!parameters->options().shared())
3102         {
3103           if (tls_segment == NULL)
3104             {
3105               gold_assert(parameters->errors()->error_count() > 0
3106                           || issue_undefined_symbol_error(gsym));
3107               return;
3108             }
3109           value -= tls_segment->memsz();
3110           Relocate_functions<32, false>::rel32(view, value);
3111         }
3112       break;
3113
3114     case elfcpp::R_386_TLS_LE_32:
3115       // If we're creating a shared library, a dynamic relocation will
3116       // have been created for this location, so do not apply it now.
3117       if (!parameters->options().shared())
3118         {
3119           if (tls_segment == NULL)
3120             {
3121               gold_assert(parameters->errors()->error_count() > 0
3122                           || issue_undefined_symbol_error(gsym));
3123               return;
3124             }
3125           value = tls_segment->memsz() - value;
3126           Relocate_functions<32, false>::rel32(view, value);
3127         }
3128       break;
3129     }
3130 }
3131
3132 // Do a relocation in which we convert a TLS General-Dynamic to a
3133 // Local-Exec.
3134
3135 inline void
3136 Target_i386::Relocate::tls_gd_to_le(const Relocate_info<32, false>* relinfo,
3137                                     size_t relnum,
3138                                     Output_segment* tls_segment,
3139                                     const elfcpp::Rel<32, false>& rel,
3140                                     unsigned int,
3141                                     elfcpp::Elf_types<32>::Elf_Addr value,
3142                                     unsigned char* view,
3143                                     section_size_type view_size)
3144 {
3145   // leal foo(,%reg,1),%eax; call ___tls_get_addr
3146   //  ==> movl %gs:0,%eax; subl $foo@tpoff,%eax
3147   // leal foo(%reg),%eax; call ___tls_get_addr
3148   //  ==> movl %gs:0,%eax; subl $foo@tpoff,%eax
3149
3150   tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, -2);
3151   tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, 9);
3152
3153   unsigned char op1 = view[-1];
3154   unsigned char op2 = view[-2];
3155
3156   tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3157                  op2 == 0x8d || op2 == 0x04);
3158   tls::check_tls(relinfo, relnum, rel.get_r_offset(), view[4] == 0xe8);
3159
3160   int roff = 5;
3161
3162   if (op2 == 0x04)
3163     {
3164       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, -3);
3165       tls::check_tls(relinfo, relnum, rel.get_r_offset(), view[-3] == 0x8d);
3166       tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3167                      ((op1 & 0xc7) == 0x05 && op1 != (4 << 3)));
3168       memcpy(view - 3, "\x65\xa1\0\0\0\0\x81\xe8\0\0\0", 12);
3169     }
3170   else
3171     {
3172       tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3173                      (op1 & 0xf8) == 0x80 && (op1 & 7) != 4);
3174       if (rel.get_r_offset() + 9 < view_size
3175           && view[9] == 0x90)
3176         {
3177           // There is a trailing nop.  Use the size byte subl.
3178           memcpy(view - 2, "\x65\xa1\0\0\0\0\x81\xe8\0\0\0", 12);
3179           roff = 6;
3180         }
3181       else
3182         {
3183           // Use the five byte subl.
3184           memcpy(view - 2, "\x65\xa1\0\0\0\0\x2d\0\0\0", 11);
3185         }
3186     }
3187
3188   value = tls_segment->memsz() - value;
3189   Relocate_functions<32, false>::rel32(view + roff, value);
3190
3191   // The next reloc should be a PLT32 reloc against __tls_get_addr.
3192   // We can skip it.
3193   this->skip_call_tls_get_addr_ = true;
3194 }
3195
3196 // Do a relocation in which we convert a TLS General-Dynamic to an
3197 // Initial-Exec.
3198
3199 inline void
3200 Target_i386::Relocate::tls_gd_to_ie(const Relocate_info<32, false>* relinfo,
3201                                     size_t relnum,
3202                                     Output_segment*,
3203                                     const elfcpp::Rel<32, false>& rel,
3204                                     unsigned int,
3205                                     elfcpp::Elf_types<32>::Elf_Addr value,
3206                                     unsigned char* view,
3207                                     section_size_type view_size)
3208 {
3209   // leal foo(,%ebx,1),%eax; call ___tls_get_addr
3210   //  ==> movl %gs:0,%eax; addl foo@gotntpoff(%ebx),%eax
3211
3212   tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, -2);
3213   tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, 9);
3214
3215   unsigned char op1 = view[-1];
3216   unsigned char op2 = view[-2];
3217
3218   tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3219                  op2 == 0x8d || op2 == 0x04);
3220   tls::check_tls(relinfo, relnum, rel.get_r_offset(), view[4] == 0xe8);
3221
3222   int roff = 5;
3223
3224   // FIXME: For now, support only the first (SIB) form.
3225   tls::check_tls(relinfo, relnum, rel.get_r_offset(), op2 == 0x04);
3226
3227   if (op2 == 0x04)
3228     {
3229       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, -3);
3230       tls::check_tls(relinfo, relnum, rel.get_r_offset(), view[-3] == 0x8d);
3231       tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3232                      ((op1 & 0xc7) == 0x05 && op1 != (4 << 3)));
3233       memcpy(view - 3, "\x65\xa1\0\0\0\0\x03\x83\0\0\0", 12);
3234     }
3235   else
3236     {
3237       tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3238                      (op1 & 0xf8) == 0x80 && (op1 & 7) != 4);
3239       if (rel.get_r_offset() + 9 < view_size
3240           && view[9] == 0x90)
3241         {
3242           // FIXME: This is not the right instruction sequence.
3243           // There is a trailing nop.  Use the size byte subl.
3244           memcpy(view - 2, "\x65\xa1\0\0\0\0\x81\xe8\0\0\0", 12);
3245           roff = 6;
3246         }
3247       else
3248         {
3249           // FIXME: This is not the right instruction sequence.
3250           // Use the five byte subl.
3251           memcpy(view - 2, "\x65\xa1\0\0\0\0\x2d\0\0\0", 11);
3252         }
3253     }
3254
3255   Relocate_functions<32, false>::rel32(view + roff, value);
3256
3257   // The next reloc should be a PLT32 reloc against __tls_get_addr.
3258   // We can skip it.
3259   this->skip_call_tls_get_addr_ = true;
3260 }
3261
3262 // Do a relocation in which we convert a TLS_GOTDESC or TLS_DESC_CALL
3263 // General-Dynamic to a Local-Exec.
3264
3265 inline void
3266 Target_i386::Relocate::tls_desc_gd_to_le(
3267     const Relocate_info<32, false>* relinfo,
3268     size_t relnum,
3269     Output_segment* tls_segment,
3270     const elfcpp::Rel<32, false>& rel,
3271     unsigned int r_type,
3272     elfcpp::Elf_types<32>::Elf_Addr value,
3273     unsigned char* view,
3274     section_size_type view_size)
3275 {
3276   if (r_type == elfcpp::R_386_TLS_GOTDESC)
3277     {
3278       // leal foo@TLSDESC(%ebx), %eax
3279       // ==> leal foo@NTPOFF, %eax
3280       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, -2);
3281       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, 4);
3282       tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3283                      view[-2] == 0x8d && view[-1] == 0x83);
3284       view[-1] = 0x05;
3285       value -= tls_segment->memsz();
3286       Relocate_functions<32, false>::rel32(view, value);
3287     }
3288   else
3289     {
3290       // call *foo@TLSCALL(%eax)
3291       // ==> nop; nop
3292       gold_assert(r_type == elfcpp::R_386_TLS_DESC_CALL);
3293       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, 2);
3294       tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3295                      view[0] == 0xff && view[1] == 0x10);
3296       view[0] = 0x66;
3297       view[1] = 0x90;
3298     }
3299 }
3300
3301 // Do a relocation in which we convert a TLS_GOTDESC or TLS_DESC_CALL
3302 // General-Dynamic to an Initial-Exec.
3303
3304 inline void
3305 Target_i386::Relocate::tls_desc_gd_to_ie(
3306     const Relocate_info<32, false>* relinfo,
3307     size_t relnum,
3308     Output_segment*,
3309     const elfcpp::Rel<32, false>& rel,
3310     unsigned int r_type,
3311     elfcpp::Elf_types<32>::Elf_Addr value,
3312     unsigned char* view,
3313     section_size_type view_size)
3314 {
3315   if (r_type == elfcpp::R_386_TLS_GOTDESC)
3316     {
3317       // leal foo@TLSDESC(%ebx), %eax
3318       // ==> movl foo@GOTNTPOFF(%ebx), %eax
3319       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, -2);
3320       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, 4);
3321       tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3322                      view[-2] == 0x8d && view[-1] == 0x83);
3323       view[-2] = 0x8b;
3324       Relocate_functions<32, false>::rel32(view, value);
3325     }
3326   else
3327     {
3328       // call *foo@TLSCALL(%eax)
3329       // ==> nop; nop
3330       gold_assert(r_type == elfcpp::R_386_TLS_DESC_CALL);
3331       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, 2);
3332       tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3333                      view[0] == 0xff && view[1] == 0x10);
3334       view[0] = 0x66;
3335       view[1] = 0x90;
3336     }
3337 }
3338
3339 // Do a relocation in which we convert a TLS Local-Dynamic to a
3340 // Local-Exec.
3341
3342 inline void
3343 Target_i386::Relocate::tls_ld_to_le(const Relocate_info<32, false>* relinfo,
3344                                     size_t relnum,
3345                                     Output_segment*,
3346                                     const elfcpp::Rel<32, false>& rel,
3347                                     unsigned int,
3348                                     elfcpp::Elf_types<32>::Elf_Addr,
3349                                     unsigned char* view,
3350                                     section_size_type view_size)
3351 {
3352   // leal foo(%reg), %eax; call ___tls_get_addr
3353   // ==> movl %gs:0,%eax; nop; leal 0(%esi,1),%esi
3354
3355   tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, -2);
3356   tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, 9);
3357
3358   // FIXME: Does this test really always pass?
3359   tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3360                  view[-2] == 0x8d && view[-1] == 0x83);
3361
3362   tls::check_tls(relinfo, relnum, rel.get_r_offset(), view[4] == 0xe8);
3363
3364   memcpy(view - 2, "\x65\xa1\0\0\0\0\x90\x8d\x74\x26\0", 11);
3365
3366   // The next reloc should be a PLT32 reloc against __tls_get_addr.
3367   // We can skip it.
3368   this->skip_call_tls_get_addr_ = true;
3369 }
3370
3371 // Do a relocation in which we convert a TLS Initial-Exec to a
3372 // Local-Exec.
3373
3374 inline void
3375 Target_i386::Relocate::tls_ie_to_le(const Relocate_info<32, false>* relinfo,
3376                                     size_t relnum,
3377                                     Output_segment* tls_segment,
3378                                     const elfcpp::Rel<32, false>& rel,
3379                                     unsigned int r_type,
3380                                     elfcpp::Elf_types<32>::Elf_Addr value,
3381                                     unsigned char* view,
3382                                     section_size_type view_size)
3383 {
3384   // We have to actually change the instructions, which means that we
3385   // need to examine the opcodes to figure out which instruction we
3386   // are looking at.
3387   if (r_type == elfcpp::R_386_TLS_IE)
3388     {
3389       // movl %gs:XX,%eax  ==>  movl $YY,%eax
3390       // movl %gs:XX,%reg  ==>  movl $YY,%reg
3391       // addl %gs:XX,%reg  ==>  addl $YY,%reg
3392       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, -1);
3393       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, 4);
3394
3395       unsigned char op1 = view[-1];
3396       if (op1 == 0xa1)
3397         {
3398           // movl XX,%eax  ==>  movl $YY,%eax
3399           view[-1] = 0xb8;
3400         }
3401       else
3402         {
3403           tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, -2);
3404
3405           unsigned char op2 = view[-2];
3406           if (op2 == 0x8b)
3407             {
3408               // movl XX,%reg  ==>  movl $YY,%reg
3409               tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3410                              (op1 & 0xc7) == 0x05);
3411               view[-2] = 0xc7;
3412               view[-1] = 0xc0 | ((op1 >> 3) & 7);
3413             }
3414           else if (op2 == 0x03)
3415             {
3416               // addl XX,%reg  ==>  addl $YY,%reg
3417               tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3418                              (op1 & 0xc7) == 0x05);
3419               view[-2] = 0x81;
3420               view[-1] = 0xc0 | ((op1 >> 3) & 7);
3421             }
3422           else
3423             tls::check_tls(relinfo, relnum, rel.get_r_offset(), 0);
3424         }
3425     }
3426   else
3427     {
3428       // subl %gs:XX(%reg1),%reg2  ==>  subl $YY,%reg2
3429       // movl %gs:XX(%reg1),%reg2  ==>  movl $YY,%reg2
3430       // addl %gs:XX(%reg1),%reg2  ==>  addl $YY,$reg2
3431       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, -2);
3432       tls::check_range(relinfo, relnum, rel.get_r_offset(), view_size, 4);
3433
3434       unsigned char op1 = view[-1];
3435       unsigned char op2 = view[-2];
3436       tls::check_tls(relinfo, relnum, rel.get_r_offset(),
3437                      (op1 & 0xc0) == 0x80 && (op1 & 7) != 4);
3438       if (op2 == 0x8b)
3439         {
3440           // movl %gs:XX(%reg1),%reg2  ==>  movl $YY,%reg2
3441           view[-2] = 0xc7;
3442           view[-1] = 0xc0 | ((op1 >> 3) & 7);
3443         }
3444       else if (op2 == 0x2b)
3445         {
3446           // subl %gs:XX(%reg1),%reg2  ==>  subl $YY,%reg2
3447           view[-2] = 0x81;
3448           view[-1] = 0xe8 | ((op1 >> 3) & 7);
3449         }
3450       else if (op2 == 0x03)
3451         {
3452           // addl %gs:XX(%reg1),%reg2  ==>  addl $YY,$reg2
3453           view[-2] = 0x81;
3454           view[-1] = 0xc0 | ((op1 >> 3) & 7);
3455         }
3456       else
3457         tls::check_tls(relinfo, relnum, rel.get_r_offset(), 0);
3458     }
3459
3460   value = tls_segment->memsz() - value;
3461   if (r_type == elfcpp::R_386_TLS_IE || r_type == elfcpp::R_386_TLS_GOTIE)
3462     value = - value;
3463
3464   Relocate_functions<32, false>::rel32(view, value);
3465 }
3466
3467 // Relocate section data.
3468
3469 void
3470 Target_i386::relocate_section(const Relocate_info<32, false>* relinfo,
3471                               unsigned int sh_type,
3472                               const unsigned char* prelocs,
3473                               size_t reloc_count,
3474                               Output_section* output_section,
3475                               bool needs_special_offset_handling,
3476                               unsigned char* view,
3477                               elfcpp::Elf_types<32>::Elf_Addr address,
3478                               section_size_type view_size,
3479                               const Reloc_symbol_changes* reloc_symbol_changes)
3480 {
3481   gold_assert(sh_type == elfcpp::SHT_REL);
3482
3483   gold::relocate_section<32, false, Target_i386, elfcpp::SHT_REL,
3484                          Target_i386::Relocate>(
3485     relinfo,
3486     this,
3487     prelocs,
3488     reloc_count,
3489     output_section,
3490     needs_special_offset_handling,
3491     view,
3492     address,
3493     view_size,
3494     reloc_symbol_changes);
3495 }
3496
3497 // Return the size of a relocation while scanning during a relocatable
3498 // link.
3499
3500 unsigned int
3501 Target_i386::Relocatable_size_for_reloc::get_size_for_reloc(
3502     unsigned int r_type,
3503     Relobj* object)
3504 {
3505   switch (r_type)
3506     {
3507     case elfcpp::R_386_NONE:
3508     case elfcpp::R_386_GNU_VTINHERIT:
3509     case elfcpp::R_386_GNU_VTENTRY:
3510     case elfcpp::R_386_TLS_GD:            // Global-dynamic
3511     case elfcpp::R_386_TLS_GOTDESC:       // Global-dynamic (from ~oliva url)
3512     case elfcpp::R_386_TLS_DESC_CALL:
3513     case elfcpp::R_386_TLS_LDM:           // Local-dynamic
3514     case elfcpp::R_386_TLS_LDO_32:        // Alternate local-dynamic
3515     case elfcpp::R_386_TLS_IE:            // Initial-exec
3516     case elfcpp::R_386_TLS_IE_32:
3517     case elfcpp::R_386_TLS_GOTIE:
3518     case elfcpp::R_386_TLS_LE:            // Local-exec
3519     case elfcpp::R_386_TLS_LE_32:
3520       return 0;
3521
3522     case elfcpp::R_386_32:
3523     case elfcpp::R_386_PC32:
3524     case elfcpp::R_386_GOT32:
3525     case elfcpp::R_386_PLT32:
3526     case elfcpp::R_386_GOTOFF:
3527     case elfcpp::R_386_GOTPC:
3528      return 4;
3529
3530     case elfcpp::R_386_16:
3531     case elfcpp::R_386_PC16:
3532       return 2;
3533
3534     case elfcpp::R_386_8:
3535     case elfcpp::R_386_PC8:
3536       return 1;
3537
3538       // These are relocations which should only be seen by the
3539       // dynamic linker, and should never be seen here.
3540     case elfcpp::R_386_COPY:
3541     case elfcpp::R_386_GLOB_DAT:
3542     case elfcpp::R_386_JUMP_SLOT:
3543     case elfcpp::R_386_RELATIVE:
3544     case elfcpp::R_386_IRELATIVE:
3545     case elfcpp::R_386_TLS_TPOFF:
3546     case elfcpp::R_386_TLS_DTPMOD32:
3547     case elfcpp::R_386_TLS_DTPOFF32:
3548     case elfcpp::R_386_TLS_TPOFF32:
3549     case elfcpp::R_386_TLS_DESC:
3550       object->error(_("unexpected reloc %u in object file"), r_type);
3551       return 0;
3552
3553     case elfcpp::R_386_32PLT:
3554     case elfcpp::R_386_TLS_GD_32:
3555     case elfcpp::R_386_TLS_GD_PUSH:
3556     case elfcpp::R_386_TLS_GD_CALL:
3557     case elfcpp::R_386_TLS_GD_POP:
3558     case elfcpp::R_386_TLS_LDM_32:
3559     case elfcpp::R_386_TLS_LDM_PUSH:
3560     case elfcpp::R_386_TLS_LDM_CALL:
3561     case elfcpp::R_386_TLS_LDM_POP:
3562     case elfcpp::R_386_USED_BY_INTEL_200:
3563     default:
3564       object->error(_("unsupported reloc %u in object file"), r_type);
3565       return 0;
3566     }
3567 }
3568
3569 // Scan the relocs during a relocatable link.
3570
3571 void
3572 Target_i386::scan_relocatable_relocs(Symbol_table* symtab,
3573                                      Layout* layout,
3574                                      Sized_relobj_file<32, false>* object,
3575                                      unsigned int data_shndx,
3576                                      unsigned int sh_type,
3577                                      const unsigned char* prelocs,
3578                                      size_t reloc_count,
3579                                      Output_section* output_section,
3580                                      bool needs_special_offset_handling,
3581                                      size_t local_symbol_count,
3582                                      const unsigned char* plocal_symbols,
3583                                      Relocatable_relocs* rr)
3584 {
3585   gold_assert(sh_type == elfcpp::SHT_REL);
3586
3587   typedef gold::Default_scan_relocatable_relocs<elfcpp::SHT_REL,
3588     Relocatable_size_for_reloc> Scan_relocatable_relocs;
3589
3590   gold::scan_relocatable_relocs<32, false, elfcpp::SHT_REL,
3591       Scan_relocatable_relocs>(
3592     symtab,
3593     layout,
3594     object,
3595     data_shndx,
3596     prelocs,
3597     reloc_count,
3598     output_section,
3599     needs_special_offset_handling,
3600     local_symbol_count,
3601     plocal_symbols,
3602     rr);
3603 }
3604
3605 // Relocate a section during a relocatable link.
3606
3607 void
3608 Target_i386::relocate_for_relocatable(
3609     const Relocate_info<32, false>* relinfo,
3610     unsigned int sh_type,
3611     const unsigned char* prelocs,
3612     size_t reloc_count,
3613     Output_section* output_section,
3614     off_t offset_in_output_section,
3615     const Relocatable_relocs* rr,
3616     unsigned char* view,
3617     elfcpp::Elf_types<32>::Elf_Addr view_address,
3618     section_size_type view_size,
3619     unsigned char* reloc_view,
3620     section_size_type reloc_view_size)
3621 {
3622   gold_assert(sh_type == elfcpp::SHT_REL);
3623
3624   gold::relocate_for_relocatable<32, false, elfcpp::SHT_REL>(
3625     relinfo,
3626     prelocs,
3627     reloc_count,
3628     output_section,
3629     offset_in_output_section,
3630     rr,
3631     view,
3632     view_address,
3633     view_size,
3634     reloc_view,
3635     reloc_view_size);
3636 }
3637
3638 // Return the value to use for a dynamic which requires special
3639 // treatment.  This is how we support equality comparisons of function
3640 // pointers across shared library boundaries, as described in the
3641 // processor specific ABI supplement.
3642
3643 uint64_t
3644 Target_i386::do_dynsym_value(const Symbol* gsym) const
3645 {
3646   gold_assert(gsym->is_from_dynobj() && gsym->has_plt_offset());
3647   return this->plt_address_for_global(gsym) + gsym->plt_offset();
3648 }
3649
3650 // Return a string used to fill a code section with nops to take up
3651 // the specified length.
3652
3653 std::string
3654 Target_i386::do_code_fill(section_size_type length) const
3655 {
3656   if (length >= 16)
3657     {
3658       // Build a jmp instruction to skip over the bytes.
3659       unsigned char jmp[5];
3660       jmp[0] = 0xe9;
3661       elfcpp::Swap_unaligned<32, false>::writeval(jmp + 1, length - 5);
3662       return (std::string(reinterpret_cast<char*>(&jmp[0]), 5)
3663               + std::string(length - 5, static_cast<char>(0x90)));
3664     }
3665
3666   // Nop sequences of various lengths.
3667   const char nop1[1] = { '\x90' };                   // nop
3668   const char nop2[2] = { '\x66', '\x90' };           // xchg %ax %ax
3669   const char nop3[3] = { '\x8d', '\x76', '\x00' };   // leal 0(%esi),%esi
3670   const char nop4[4] = { '\x8d', '\x74', '\x26',     // leal 0(%esi,1),%esi
3671                          '\x00'};
3672   const char nop5[5] = { '\x90', '\x8d', '\x74',     // nop
3673                          '\x26', '\x00' };           // leal 0(%esi,1),%esi
3674   const char nop6[6] = { '\x8d', '\xb6', '\x00',     // leal 0L(%esi),%esi
3675                          '\x00', '\x00', '\x00' };
3676   const char nop7[7] = { '\x8d', '\xb4', '\x26',     // leal 0L(%esi,1),%esi
3677                          '\x00', '\x00', '\x00',
3678                          '\x00' };
3679   const char nop8[8] = { '\x90', '\x8d', '\xb4',     // nop
3680                          '\x26', '\x00', '\x00',     // leal 0L(%esi,1),%esi
3681                          '\x00', '\x00' };
3682   const char nop9[9] = { '\x89', '\xf6', '\x8d',     // movl %esi,%esi
3683                          '\xbc', '\x27', '\x00',     // leal 0L(%edi,1),%edi
3684                          '\x00', '\x00', '\x00' };
3685   const char nop10[10] = { '\x8d', '\x76', '\x00',   // leal 0(%esi),%esi
3686                            '\x8d', '\xbc', '\x27',   // leal 0L(%edi,1),%edi
3687                            '\x00', '\x00', '\x00',
3688                            '\x00' };
3689   const char nop11[11] = { '\x8d', '\x74', '\x26',   // leal 0(%esi,1),%esi
3690                            '\x00', '\x8d', '\xbc',   // leal 0L(%edi,1),%edi
3691                            '\x27', '\x00', '\x00',
3692                            '\x00', '\x00' };
3693   const char nop12[12] = { '\x8d', '\xb6', '\x00',   // leal 0L(%esi),%esi
3694                            '\x00', '\x00', '\x00',   // leal 0L(%edi),%edi
3695                            '\x8d', '\xbf', '\x00',
3696                            '\x00', '\x00', '\x00' };
3697   const char nop13[13] = { '\x8d', '\xb6', '\x00',   // leal 0L(%esi),%esi
3698                            '\x00', '\x00', '\x00',   // leal 0L(%edi,1),%edi
3699                            '\x8d', '\xbc', '\x27',
3700                            '\x00', '\x00', '\x00',
3701                            '\x00' };
3702   const char nop14[14] = { '\x8d', '\xb4', '\x26',   // leal 0L(%esi,1),%esi
3703                            '\x00', '\x00', '\x00',   // leal 0L(%edi,1),%edi
3704                            '\x00', '\x8d', '\xbc',
3705                            '\x27', '\x00', '\x00',
3706                            '\x00', '\x00' };
3707   const char nop15[15] = { '\xeb', '\x0d', '\x90',   // jmp .+15
3708                            '\x90', '\x90', '\x90',   // nop,nop,nop,...
3709                            '\x90', '\x90', '\x90',
3710                            '\x90', '\x90', '\x90',
3711                            '\x90', '\x90', '\x90' };
3712
3713   const char* nops[16] = {
3714     NULL,
3715     nop1, nop2, nop3, nop4, nop5, nop6, nop7,
3716     nop8, nop9, nop10, nop11, nop12, nop13, nop14, nop15
3717   };
3718
3719   return std::string(nops[length], length);
3720 }
3721
3722 // Return the value to use for the base of a DW_EH_PE_datarel offset
3723 // in an FDE.  Solaris and SVR4 use DW_EH_PE_datarel because their
3724 // assembler can not write out the difference between two labels in
3725 // different sections, so instead of using a pc-relative value they
3726 // use an offset from the GOT.
3727
3728 uint64_t
3729 Target_i386::do_ehframe_datarel_base() const
3730 {
3731   gold_assert(this->global_offset_table_ != NULL);
3732   Symbol* sym = this->global_offset_table_;
3733   Sized_symbol<32>* ssym = static_cast<Sized_symbol<32>*>(sym);
3734   return ssym->value();
3735 }
3736
3737 // Return whether SYM should be treated as a call to a non-split
3738 // function.  We don't want that to be true of a call to a
3739 // get_pc_thunk function.
3740
3741 bool
3742 Target_i386::do_is_call_to_non_split(const Symbol* sym, unsigned int) const
3743 {
3744   return (sym->type() == elfcpp::STT_FUNC
3745           && !is_prefix_of("__i686.get_pc_thunk.", sym->name()));
3746 }
3747
3748 // FNOFFSET in section SHNDX in OBJECT is the start of a function
3749 // compiled with -fsplit-stack.  The function calls non-split-stack
3750 // code.  We have to change the function so that it always ensures
3751 // that it has enough stack space to run some random function.
3752
3753 void
3754 Target_i386::do_calls_non_split(Relobj* object, unsigned int shndx,
3755                                        section_offset_type fnoffset,
3756                                        section_size_type fnsize,
3757                                        unsigned char* view,
3758                                        section_size_type view_size,
3759                                        std::string* from,
3760                                        std::string* to) const
3761 {
3762   // The function starts with a comparison of the stack pointer and a
3763   // field in the TCB.  This is followed by a jump.
3764
3765   // cmp %gs:NN,%esp
3766   if (this->match_view(view, view_size, fnoffset, "\x65\x3b\x25", 3)
3767       && fnsize > 7)
3768     {
3769       // We will call __morestack if the carry flag is set after this
3770       // comparison.  We turn the comparison into an stc instruction
3771       // and some nops.
3772       view[fnoffset] = '\xf9';
3773       this->set_view_to_nop(view, view_size, fnoffset + 1, 6);
3774     }
3775   // lea NN(%esp),%ecx
3776   // lea NN(%esp),%edx
3777   else if ((this->match_view(view, view_size, fnoffset, "\x8d\x8c\x24", 3)
3778             || this->match_view(view, view_size, fnoffset, "\x8d\x94\x24", 3))
3779            && fnsize > 7)
3780     {
3781       // This is loading an offset from the stack pointer for a
3782       // comparison.  The offset is negative, so we decrease the
3783       // offset by the amount of space we need for the stack.  This
3784       // means we will avoid calling __morestack if there happens to
3785       // be plenty of space on the stack already.
3786       unsigned char* pval = view + fnoffset + 3;
3787       uint32_t val = elfcpp::Swap_unaligned<32, false>::readval(pval);
3788       val -= parameters->options().split_stack_adjust_size();
3789       elfcpp::Swap_unaligned<32, false>::writeval(pval, val);
3790     }
3791   else
3792     {
3793       if (!object->has_no_split_stack())
3794         object->error(_("failed to match split-stack sequence at "
3795                         "section %u offset %0zx"),
3796                       shndx, static_cast<size_t>(fnoffset));
3797       return;
3798     }
3799
3800   // We have to change the function so that it calls
3801   // __morestack_non_split instead of __morestack.  The former will
3802   // allocate additional stack space.
3803   *from = "__morestack";
3804   *to = "__morestack_non_split";
3805 }
3806
3807 // The selector for i386 object files.  Note this is never instantiated
3808 // directly.  It's only used in Target_selector_i386_nacl, below.
3809
3810 class Target_selector_i386 : public Target_selector_freebsd
3811 {
3812 public:
3813   Target_selector_i386()
3814     : Target_selector_freebsd(elfcpp::EM_386, 32, false,
3815                               "elf32-i386", "elf32-i386-freebsd",
3816                               "elf_i386")
3817   { }
3818
3819   Target*
3820   do_instantiate_target()
3821   { return new Target_i386(); }
3822 };
3823
3824 // NaCl variant.  It uses different PLT contents.
3825
3826 class Output_data_plt_i386_nacl : public Output_data_plt_i386
3827 {
3828  public:
3829   Output_data_plt_i386_nacl(Layout* layout,
3830                             Output_data_space* got_plt,
3831                             Output_data_space* got_irelative)
3832     : Output_data_plt_i386(layout, plt_entry_size, got_plt, got_irelative)
3833   { }
3834
3835  protected:
3836   virtual unsigned int
3837   do_get_plt_entry_size() const
3838   { return plt_entry_size; }
3839
3840   virtual void
3841   do_add_eh_frame(Layout* layout)
3842   {
3843     layout->add_eh_frame_for_plt(this, plt_eh_frame_cie, plt_eh_frame_cie_size,
3844                                  plt_eh_frame_fde, plt_eh_frame_fde_size);
3845   }
3846
3847   // The size of an entry in the PLT.
3848   static const int plt_entry_size = 64;
3849
3850   // The .eh_frame unwind information for the PLT.
3851   static const int plt_eh_frame_fde_size = 32;
3852   static const unsigned char plt_eh_frame_fde[plt_eh_frame_fde_size];
3853 };
3854
3855 class Output_data_plt_i386_nacl_exec : public Output_data_plt_i386_nacl
3856 {
3857 public:
3858   Output_data_plt_i386_nacl_exec(Layout* layout,
3859                                  Output_data_space* got_plt,
3860                                  Output_data_space* got_irelative)
3861     : Output_data_plt_i386_nacl(layout, got_plt, got_irelative)
3862   { }
3863
3864  protected:
3865   virtual void
3866   do_fill_first_plt_entry(unsigned char* pov,
3867                           elfcpp::Elf_types<32>::Elf_Addr got_address);
3868
3869   virtual unsigned int
3870   do_fill_plt_entry(unsigned char* pov,
3871                     elfcpp::Elf_types<32>::Elf_Addr got_address,
3872                     unsigned int got_offset,
3873                     unsigned int plt_offset,
3874                     unsigned int plt_rel_offset);
3875
3876  private:
3877   // The first entry in the PLT for an executable.
3878   static const unsigned char first_plt_entry[plt_entry_size];
3879
3880   // Other entries in the PLT for an executable.
3881   static const unsigned char plt_entry[plt_entry_size];
3882 };
3883
3884 class Output_data_plt_i386_nacl_dyn : public Output_data_plt_i386_nacl
3885 {
3886  public:
3887   Output_data_plt_i386_nacl_dyn(Layout* layout,
3888                                 Output_data_space* got_plt,
3889                                 Output_data_space* got_irelative)
3890     : Output_data_plt_i386_nacl(layout, got_plt, got_irelative)
3891   { }
3892
3893  protected:
3894   virtual void
3895   do_fill_first_plt_entry(unsigned char* pov, elfcpp::Elf_types<32>::Elf_Addr);
3896
3897   virtual unsigned int
3898   do_fill_plt_entry(unsigned char* pov,
3899                     elfcpp::Elf_types<32>::Elf_Addr,
3900                     unsigned int got_offset,
3901                     unsigned int plt_offset,
3902                     unsigned int plt_rel_offset);
3903
3904  private:
3905   // The first entry in the PLT for a shared object.
3906   static const unsigned char first_plt_entry[plt_entry_size];
3907
3908   // Other entries in the PLT for a shared object.
3909   static const unsigned char plt_entry[plt_entry_size];
3910 };
3911
3912 class Target_i386_nacl : public Target_i386
3913 {
3914  public:
3915   Target_i386_nacl()
3916     : Target_i386(&i386_nacl_info)
3917   { }
3918
3919  protected:
3920   virtual Output_data_plt_i386*
3921   do_make_data_plt(Layout* layout,
3922                    Output_data_space* got_plt,
3923                    Output_data_space* got_irelative,
3924                    bool dyn)
3925   {
3926     if (dyn)
3927       return new Output_data_plt_i386_nacl_dyn(layout, got_plt, got_irelative);
3928     else
3929       return new Output_data_plt_i386_nacl_exec(layout, got_plt, got_irelative);
3930   }
3931
3932  private:
3933   static const Target::Target_info i386_nacl_info;
3934 };
3935
3936 const Target::Target_info Target_i386_nacl::i386_nacl_info =
3937 {
3938   32,                   // size
3939   false,                // is_big_endian
3940   elfcpp::EM_386,       // machine_code
3941   false,                // has_make_symbol
3942   false,                // has_resolve
3943   true,                 // has_code_fill
3944   true,                 // is_default_stack_executable
3945   true,                 // can_icf_inline_merge_sections
3946   '\0',                 // wrap_char
3947   "/lib/ld-nacl-x86-32.so.1", // dynamic_linker
3948   0x20000,              // default_text_segment_address
3949   0x10000,              // abi_pagesize (overridable by -z max-page-size)
3950   0x10000,              // common_pagesize (overridable by -z common-page-size)
3951   true,                 // isolate_execinstr
3952   0x10000000,           // rosegment_gap
3953   elfcpp::SHN_UNDEF,    // small_common_shndx
3954   elfcpp::SHN_UNDEF,    // large_common_shndx
3955   0,                    // small_common_section_flags
3956   0,                    // large_common_section_flags
3957   NULL,                 // attributes_section
3958   NULL                  // attributes_vendor
3959 };
3960
3961 #define NACLMASK        0xe0            // 32-byte alignment mask
3962
3963 const unsigned char
3964 Output_data_plt_i386_nacl_exec::first_plt_entry[plt_entry_size] =
3965 {
3966   0xff, 0x35,                          // pushl contents of memory address
3967   0, 0, 0, 0,                          // replaced with address of .got + 4
3968   0x8b, 0x0d,                          // movl contents of address, %ecx
3969   0, 0, 0, 0,                          // replaced with address of .got + 8
3970   0x83, 0xe1, NACLMASK,                // andl $NACLMASK, %ecx
3971   0xff, 0xe1,                          // jmp *%ecx
3972   0x90, 0x90, 0x90, 0x90, 0x90, 0x90,  // nops
3973   0x90, 0x90, 0x90, 0x90, 0x90, 0x90,  // nops
3974   0x90, 0x90, 0x90, 0x90, 0x90, 0x90,  // nops
3975   0x90, 0x90, 0x90, 0x90, 0x90, 0x90,  // nops
3976   0x90, 0x90, 0x90, 0x90, 0x90, 0x90,  // nops
3977   0x90, 0x90, 0x90, 0x90, 0x90, 0x90,  // nops
3978   0x90, 0x90, 0x90, 0x90, 0x90, 0x90,  // nops
3979   0x90, 0x90, 0x90, 0x90, 0x90
3980 };
3981
3982 void
3983 Output_data_plt_i386_nacl_exec::do_fill_first_plt_entry(
3984     unsigned char* pov,
3985     elfcpp::Elf_types<32>::Elf_Addr got_address)
3986 {
3987   memcpy(pov, first_plt_entry, plt_entry_size);
3988   elfcpp::Swap_unaligned<32, false>::writeval(pov + 2, got_address + 4);
3989   elfcpp::Swap<32, false>::writeval(pov + 8, got_address + 8);
3990 }
3991
3992 // The first entry in the PLT for a shared object.
3993
3994 const unsigned char
3995 Output_data_plt_i386_nacl_dyn::first_plt_entry[plt_entry_size] =
3996 {
3997   0xff, 0xb3, 4, 0, 0, 0,       // pushl 4(%ebx)
3998   0x8b, 0x4b, 0x08,             // mov 0x8(%ebx), %ecx
3999   0x83, 0xe1, NACLMASK,         // andl $NACLMASK, %ecx
4000   0xff, 0xe1,                   // jmp *%ecx
4001   0x90, 0x90, 0x90, 0x90, 0x90,  // nops
4002   0x90, 0x90, 0x90, 0x90, 0x90,  // nops
4003   0x90, 0x90, 0x90, 0x90, 0x90,  // nops
4004   0x90, 0x90, 0x90, 0x90, 0x90,  // nops
4005   0x90, 0x90, 0x90, 0x90, 0x90,  // nops
4006   0x90, 0x90, 0x90, 0x90, 0x90,  // nops
4007   0x90, 0x90, 0x90, 0x90, 0x90,  // nops
4008   0x90, 0x90, 0x90, 0x90, 0x90,  // nops
4009   0x90, 0x90, 0x90, 0x90, 0x90,  // nops
4010   0x90, 0x90, 0x90, 0x90, 0x90   // nops
4011 };
4012
4013 void
4014 Output_data_plt_i386_nacl_dyn::do_fill_first_plt_entry(
4015     unsigned char* pov,
4016     elfcpp::Elf_types<32>::Elf_Addr)
4017 {
4018   memcpy(pov, first_plt_entry, plt_entry_size);
4019 }
4020
4021 // Subsequent entries in the PLT for an executable.
4022
4023 const unsigned char
4024 Output_data_plt_i386_nacl_exec::plt_entry[plt_entry_size] =
4025 {
4026   0x8b, 0x0d,                    // movl contents of address, %ecx */
4027   0, 0, 0, 0,                    // replaced with address of symbol in .got
4028   0x83, 0xe1, NACLMASK,          // andl $NACLMASK, %ecx
4029   0xff, 0xe1,                    // jmp *%ecx
4030
4031   // Pad to the next 32-byte boundary with nop instructions.
4032   0x90,
4033   0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
4034   0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
4035
4036   // Lazy GOT entries point here (32-byte aligned).
4037   0x68,                       // pushl immediate
4038   0, 0, 0, 0,                 // replaced with offset into relocation table
4039   0xe9,                       // jmp relative
4040   0, 0, 0, 0,                 // replaced with offset to start of .plt
4041
4042   // Pad to the next 32-byte boundary with nop instructions.
4043   0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
4044   0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
4045   0x90, 0x90
4046 };
4047
4048 unsigned int
4049 Output_data_plt_i386_nacl_exec::do_fill_plt_entry(
4050     unsigned char* pov,
4051     elfcpp::Elf_types<32>::Elf_Addr got_address,
4052     unsigned int got_offset,
4053     unsigned int plt_offset,
4054     unsigned int plt_rel_offset)
4055 {
4056   memcpy(pov, plt_entry, plt_entry_size);
4057   elfcpp::Swap_unaligned<32, false>::writeval(pov + 2,
4058                                               got_address + got_offset);
4059   elfcpp::Swap_unaligned<32, false>::writeval(pov + 33, plt_rel_offset);
4060   elfcpp::Swap<32, false>::writeval(pov + 38, - (plt_offset + 38 + 4));
4061   return 32;
4062 }
4063
4064 // Subsequent entries in the PLT for a shared object.
4065
4066 const unsigned char
4067 Output_data_plt_i386_nacl_dyn::plt_entry[plt_entry_size] =
4068 {
4069   0x8b, 0x8b,          // movl offset(%ebx), %ecx
4070   0, 0, 0, 0,          // replaced with offset of symbol in .got
4071   0x83, 0xe1, 0xe0,    // andl $NACLMASK, %ecx
4072   0xff, 0xe1,          // jmp *%ecx
4073
4074   // Pad to the next 32-byte boundary with nop instructions.
4075   0x90,
4076   0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
4077   0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
4078
4079   // Lazy GOT entries point here (32-byte aligned).
4080   0x68,                // pushl immediate
4081   0, 0, 0, 0,          // replaced with offset into relocation table.
4082   0xe9,                // jmp relative
4083   0, 0, 0, 0,          // replaced with offset to start of .plt.
4084
4085   // Pad to the next 32-byte boundary with nop instructions.
4086   0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
4087   0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
4088   0x90, 0x90
4089 };
4090
4091 unsigned int
4092 Output_data_plt_i386_nacl_dyn::do_fill_plt_entry(
4093     unsigned char* pov,
4094     elfcpp::Elf_types<32>::Elf_Addr,
4095     unsigned int got_offset,
4096     unsigned int plt_offset,
4097     unsigned int plt_rel_offset)
4098 {
4099   memcpy(pov, plt_entry, plt_entry_size);
4100   elfcpp::Swap_unaligned<32, false>::writeval(pov + 2, got_offset);
4101   elfcpp::Swap_unaligned<32, false>::writeval(pov + 33, plt_rel_offset);
4102   elfcpp::Swap<32, false>::writeval(pov + 38, - (plt_offset + 38 + 4));
4103   return 32;
4104 }
4105
4106 const unsigned char
4107 Output_data_plt_i386_nacl::plt_eh_frame_fde[plt_eh_frame_fde_size] =
4108 {
4109   0, 0, 0, 0,                           // Replaced with offset to .plt.
4110   0, 0, 0, 0,                           // Replaced with size of .plt.
4111   0,                                    // Augmentation size.
4112   elfcpp::DW_CFA_def_cfa_offset, 8,     // DW_CFA_def_cfa_offset: 8.
4113   elfcpp::DW_CFA_advance_loc + 6,       // Advance 6 to __PLT__ + 6.
4114   elfcpp::DW_CFA_def_cfa_offset, 12,    // DW_CFA_def_cfa_offset: 12.
4115   elfcpp::DW_CFA_advance_loc + 58,      // Advance 58 to __PLT__ + 64.
4116   elfcpp::DW_CFA_def_cfa_expression,    // DW_CFA_def_cfa_expression.
4117   13,                                   // Block length.
4118   elfcpp::DW_OP_breg4, 4,               // Push %esp + 4.
4119   elfcpp::DW_OP_breg8, 0,               // Push %eip.
4120   elfcpp::DW_OP_const1u, 63,            // Push 0x3f.
4121   elfcpp::DW_OP_and,                    // & (%eip & 0x3f).
4122   elfcpp::DW_OP_const1u, 37,            // Push 0x25.
4123   elfcpp::DW_OP_ge,                     // >= ((%eip & 0x3f) >= 0x25)
4124   elfcpp::DW_OP_lit2,                   // Push 2.
4125   elfcpp::DW_OP_shl,                    // << (((%eip & 0x3f) >= 0x25) << 2)
4126   elfcpp::DW_OP_plus,                   // + ((((%eip&0x3f)>=0x25)<<2)+%esp+4
4127   elfcpp::DW_CFA_nop,                   // Align to 32 bytes.
4128   elfcpp::DW_CFA_nop
4129 };
4130
4131 // The selector for i386-nacl object files.
4132
4133 class Target_selector_i386_nacl
4134   : public Target_selector_nacl<Target_selector_i386, Target_i386_nacl>
4135 {
4136  public:
4137   Target_selector_i386_nacl()
4138     : Target_selector_nacl<Target_selector_i386,
4139                            Target_i386_nacl>("x86-32",
4140                                              "elf32-i386-nacl",
4141                                              "elf_i386_nacl")
4142   { }
4143 };
4144
4145 Target_selector_i386_nacl target_selector_i386;
4146
4147 } // End anonymous namespace.