]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gold/layout.cc
From Cary Coutant: Improve i386 shared library TLS support.
[thirdparty/binutils-gdb.git] / gold / layout.cc
1 // layout.cc -- lay out output file sections for gold
2
3 // Copyright 2006, 2007 Free Software Foundation, Inc.
4 // Written by Ian Lance Taylor <iant@google.com>.
5
6 // This file is part of gold.
7
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 3 of the License, or
11 // (at your option) any later version.
12
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
17
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 // MA 02110-1301, USA.
22
23 #include "gold.h"
24
25 #include <cstring>
26 #include <algorithm>
27 #include <iostream>
28 #include <utility>
29
30 #include "parameters.h"
31 #include "output.h"
32 #include "symtab.h"
33 #include "dynobj.h"
34 #include "ehframe.h"
35 #include "layout.h"
36
37 namespace gold
38 {
39
40 // Layout_task_runner methods.
41
42 // Lay out the sections. This is called after all the input objects
43 // have been read.
44
45 void
46 Layout_task_runner::run(Workqueue* workqueue)
47 {
48 off_t file_size = this->layout_->finalize(this->input_objects_,
49 this->symtab_);
50
51 // Now we know the final size of the output file and we know where
52 // each piece of information goes.
53 Output_file* of = new Output_file(this->options_,
54 this->input_objects_->target());
55 of->open(file_size);
56
57 // Queue up the final set of tasks.
58 gold::queue_final_tasks(this->options_, this->input_objects_,
59 this->symtab_, this->layout_, workqueue, of);
60 }
61
62 // Layout methods.
63
64 Layout::Layout(const General_options& options)
65 : options_(options), namepool_(), sympool_(), dynpool_(), signatures_(),
66 section_name_map_(), segment_list_(), section_list_(),
67 unattached_section_list_(), special_output_list_(),
68 tls_segment_(NULL), symtab_section_(NULL),
69 dynsym_section_(NULL), dynamic_section_(NULL), dynamic_data_(NULL),
70 eh_frame_section_(NULL), output_file_size_(-1),
71 input_requires_executable_stack_(false),
72 input_with_gnu_stack_note_(false),
73 input_without_gnu_stack_note_(false),
74 have_textrel_(false)
75 {
76 // Make space for more than enough segments for a typical file.
77 // This is just for efficiency--it's OK if we wind up needing more.
78 this->segment_list_.reserve(12);
79
80 // We expect three unattached Output_data objects: the file header,
81 // the segment headers, and the section headers.
82 this->special_output_list_.reserve(3);
83 }
84
85 // Hash a key we use to look up an output section mapping.
86
87 size_t
88 Layout::Hash_key::operator()(const Layout::Key& k) const
89 {
90 return k.first + k.second.first + k.second.second;
91 }
92
93 // Return whether PREFIX is a prefix of STR.
94
95 static inline bool
96 is_prefix_of(const char* prefix, const char* str)
97 {
98 return strncmp(prefix, str, strlen(prefix)) == 0;
99 }
100
101 // Whether to include this section in the link.
102
103 template<int size, bool big_endian>
104 bool
105 Layout::include_section(Sized_relobj<size, big_endian>*, const char* name,
106 const elfcpp::Shdr<size, big_endian>& shdr)
107 {
108 // Some section types are never linked. Some are only linked when
109 // doing a relocateable link.
110 switch (shdr.get_sh_type())
111 {
112 case elfcpp::SHT_NULL:
113 case elfcpp::SHT_SYMTAB:
114 case elfcpp::SHT_DYNSYM:
115 case elfcpp::SHT_STRTAB:
116 case elfcpp::SHT_HASH:
117 case elfcpp::SHT_DYNAMIC:
118 case elfcpp::SHT_SYMTAB_SHNDX:
119 return false;
120
121 case elfcpp::SHT_RELA:
122 case elfcpp::SHT_REL:
123 case elfcpp::SHT_GROUP:
124 return parameters->output_is_object();
125
126 case elfcpp::SHT_PROGBITS:
127 if (parameters->strip_debug()
128 && (shdr.get_sh_flags() & elfcpp::SHF_ALLOC) == 0)
129 {
130 // Debugging sections can only be recognized by name.
131 if (is_prefix_of(".debug", name)
132 || is_prefix_of(".gnu.linkonce.wi.", name)
133 || is_prefix_of(".line", name)
134 || is_prefix_of(".stab", name))
135 return false;
136 }
137 return true;
138
139 default:
140 return true;
141 }
142 }
143
144 // Return an output section named NAME, or NULL if there is none.
145
146 Output_section*
147 Layout::find_output_section(const char* name) const
148 {
149 for (Section_name_map::const_iterator p = this->section_name_map_.begin();
150 p != this->section_name_map_.end();
151 ++p)
152 if (strcmp(p->second->name(), name) == 0)
153 return p->second;
154 return NULL;
155 }
156
157 // Return an output segment of type TYPE, with segment flags SET set
158 // and segment flags CLEAR clear. Return NULL if there is none.
159
160 Output_segment*
161 Layout::find_output_segment(elfcpp::PT type, elfcpp::Elf_Word set,
162 elfcpp::Elf_Word clear) const
163 {
164 for (Segment_list::const_iterator p = this->segment_list_.begin();
165 p != this->segment_list_.end();
166 ++p)
167 if (static_cast<elfcpp::PT>((*p)->type()) == type
168 && ((*p)->flags() & set) == set
169 && ((*p)->flags() & clear) == 0)
170 return *p;
171 return NULL;
172 }
173
174 // Return the output section to use for section NAME with type TYPE
175 // and section flags FLAGS.
176
177 Output_section*
178 Layout::get_output_section(const char* name, Stringpool::Key name_key,
179 elfcpp::Elf_Word type, elfcpp::Elf_Xword flags)
180 {
181 // We should ignore some flags.
182 flags &= ~ (elfcpp::SHF_INFO_LINK
183 | elfcpp::SHF_LINK_ORDER
184 | elfcpp::SHF_GROUP
185 | elfcpp::SHF_MERGE
186 | elfcpp::SHF_STRINGS);
187
188 const Key key(name_key, std::make_pair(type, flags));
189 const std::pair<Key, Output_section*> v(key, NULL);
190 std::pair<Section_name_map::iterator, bool> ins(
191 this->section_name_map_.insert(v));
192
193 if (!ins.second)
194 return ins.first->second;
195 else
196 {
197 // This is the first time we've seen this name/type/flags
198 // combination.
199 Output_section* os = this->make_output_section(name, type, flags);
200 ins.first->second = os;
201 return os;
202 }
203 }
204
205 // Return the output section to use for input section SHNDX, with name
206 // NAME, with header HEADER, from object OBJECT. RELOC_SHNDX is the
207 // index of a relocation section which applies to this section, or 0
208 // if none, or -1U if more than one. RELOC_TYPE is the type of the
209 // relocation section if there is one. Set *OFF to the offset of this
210 // input section without the output section. Return NULL if the
211 // section should be discarded. Set *OFF to -1 if the section
212 // contents should not be written directly to the output file, but
213 // will instead receive special handling.
214
215 template<int size, bool big_endian>
216 Output_section*
217 Layout::layout(Sized_relobj<size, big_endian>* object, unsigned int shndx,
218 const char* name, const elfcpp::Shdr<size, big_endian>& shdr,
219 unsigned int reloc_shndx, unsigned int, off_t* off)
220 {
221 if (!this->include_section(object, name, shdr))
222 return NULL;
223
224 // If we are not doing a relocateable link, choose the name to use
225 // for the output section.
226 size_t len = strlen(name);
227 if (!parameters->output_is_object())
228 name = Layout::output_section_name(name, &len);
229
230 // FIXME: Handle SHF_OS_NONCONFORMING here.
231
232 // Canonicalize the section name.
233 Stringpool::Key name_key;
234 name = this->namepool_.add_prefix(name, len, &name_key);
235
236 // Find the output section. The output section is selected based on
237 // the section name, type, and flags.
238 Output_section* os = this->get_output_section(name, name_key,
239 shdr.get_sh_type(),
240 shdr.get_sh_flags());
241
242 // FIXME: Handle SHF_LINK_ORDER somewhere.
243
244 *off = os->add_input_section(object, shndx, name, shdr, reloc_shndx);
245
246 return os;
247 }
248
249 // Special GNU handling of sections name .eh_frame. They will
250 // normally hold exception frame data as defined by the C++ ABI
251 // (http://codesourcery.com/cxx-abi/).
252
253 template<int size, bool big_endian>
254 Output_section*
255 Layout::layout_eh_frame(Sized_relobj<size, big_endian>* object,
256 const unsigned char* symbols,
257 off_t symbols_size,
258 const unsigned char* symbol_names,
259 off_t symbol_names_size,
260 unsigned int shndx,
261 const elfcpp::Shdr<size, big_endian>& shdr,
262 unsigned int reloc_shndx, unsigned int reloc_type,
263 off_t* off)
264 {
265 gold_assert(shdr.get_sh_type() == elfcpp::SHT_PROGBITS);
266 gold_assert(shdr.get_sh_flags() == elfcpp::SHF_ALLOC);
267
268 Stringpool::Key name_key;
269 const char* name = this->namepool_.add(".eh_frame", false, &name_key);
270
271 Output_section* os = this->get_output_section(name, name_key,
272 elfcpp::SHT_PROGBITS,
273 elfcpp::SHF_ALLOC);
274
275 if (this->eh_frame_section_ == NULL)
276 {
277 this->eh_frame_section_ = os;
278 this->eh_frame_data_ = new Eh_frame();
279 os->add_output_section_data(this->eh_frame_data_);
280
281 if (this->options_.create_eh_frame_hdr())
282 {
283 Stringpool::Key hdr_name_key;
284 const char* hdr_name = this->namepool_.add(".eh_frame_hdr",
285 false,
286 &hdr_name_key);
287 Output_section* hdr_os =
288 this->get_output_section(hdr_name, hdr_name_key,
289 elfcpp::SHT_PROGBITS,
290 elfcpp::SHF_ALLOC);
291
292 Eh_frame_hdr* hdr_posd = new Eh_frame_hdr(os, this->eh_frame_data_);
293 hdr_os->add_output_section_data(hdr_posd);
294
295 hdr_os->set_after_input_sections();
296
297 Output_segment* hdr_oseg =
298 new Output_segment(elfcpp::PT_GNU_EH_FRAME, elfcpp::PF_R);
299 this->segment_list_.push_back(hdr_oseg);
300 hdr_oseg->add_output_section(hdr_os, elfcpp::PF_R);
301
302 this->eh_frame_data_->set_eh_frame_hdr(hdr_posd);
303 }
304 }
305
306 gold_assert(this->eh_frame_section_ == os);
307
308 if (this->eh_frame_data_->add_ehframe_input_section(object,
309 symbols,
310 symbols_size,
311 symbol_names,
312 symbol_names_size,
313 shndx,
314 reloc_shndx,
315 reloc_type))
316 *off = -1;
317 else
318 {
319 // We couldn't handle this .eh_frame section for some reason.
320 // Add it as a normal section.
321 *off = os->add_input_section(object, shndx, name, shdr, reloc_shndx);
322 }
323
324 return os;
325 }
326
327 // Add POSD to an output section using NAME, TYPE, and FLAGS.
328
329 void
330 Layout::add_output_section_data(const char* name, elfcpp::Elf_Word type,
331 elfcpp::Elf_Xword flags,
332 Output_section_data* posd)
333 {
334 // Canonicalize the name.
335 Stringpool::Key name_key;
336 name = this->namepool_.add(name, true, &name_key);
337
338 Output_section* os = this->get_output_section(name, name_key, type, flags);
339 os->add_output_section_data(posd);
340 }
341
342 // Map section flags to segment flags.
343
344 elfcpp::Elf_Word
345 Layout::section_flags_to_segment(elfcpp::Elf_Xword flags)
346 {
347 elfcpp::Elf_Word ret = elfcpp::PF_R;
348 if ((flags & elfcpp::SHF_WRITE) != 0)
349 ret |= elfcpp::PF_W;
350 if ((flags & elfcpp::SHF_EXECINSTR) != 0)
351 ret |= elfcpp::PF_X;
352 return ret;
353 }
354
355 // Make a new Output_section, and attach it to segments as
356 // appropriate.
357
358 Output_section*
359 Layout::make_output_section(const char* name, elfcpp::Elf_Word type,
360 elfcpp::Elf_Xword flags)
361 {
362 Output_section* os = new Output_section(name, type, flags);
363 this->section_list_.push_back(os);
364
365 if ((flags & elfcpp::SHF_ALLOC) == 0)
366 this->unattached_section_list_.push_back(os);
367 else
368 {
369 // This output section goes into a PT_LOAD segment.
370
371 elfcpp::Elf_Word seg_flags = Layout::section_flags_to_segment(flags);
372
373 // The only thing we really care about for PT_LOAD segments is
374 // whether or not they are writable, so that is how we search
375 // for them. People who need segments sorted on some other
376 // basis will have to wait until we implement a mechanism for
377 // them to describe the segments they want.
378
379 Segment_list::const_iterator p;
380 for (p = this->segment_list_.begin();
381 p != this->segment_list_.end();
382 ++p)
383 {
384 if ((*p)->type() == elfcpp::PT_LOAD
385 && ((*p)->flags() & elfcpp::PF_W) == (seg_flags & elfcpp::PF_W))
386 {
387 (*p)->add_output_section(os, seg_flags);
388 break;
389 }
390 }
391
392 if (p == this->segment_list_.end())
393 {
394 Output_segment* oseg = new Output_segment(elfcpp::PT_LOAD,
395 seg_flags);
396 this->segment_list_.push_back(oseg);
397 oseg->add_output_section(os, seg_flags);
398 }
399
400 // If we see a loadable SHT_NOTE section, we create a PT_NOTE
401 // segment.
402 if (type == elfcpp::SHT_NOTE)
403 {
404 // See if we already have an equivalent PT_NOTE segment.
405 for (p = this->segment_list_.begin();
406 p != segment_list_.end();
407 ++p)
408 {
409 if ((*p)->type() == elfcpp::PT_NOTE
410 && (((*p)->flags() & elfcpp::PF_W)
411 == (seg_flags & elfcpp::PF_W)))
412 {
413 (*p)->add_output_section(os, seg_flags);
414 break;
415 }
416 }
417
418 if (p == this->segment_list_.end())
419 {
420 Output_segment* oseg = new Output_segment(elfcpp::PT_NOTE,
421 seg_flags);
422 this->segment_list_.push_back(oseg);
423 oseg->add_output_section(os, seg_flags);
424 }
425 }
426
427 // If we see a loadable SHF_TLS section, we create a PT_TLS
428 // segment. There can only be one such segment.
429 if ((flags & elfcpp::SHF_TLS) != 0)
430 {
431 if (this->tls_segment_ == NULL)
432 {
433 this->tls_segment_ = new Output_segment(elfcpp::PT_TLS,
434 seg_flags);
435 this->segment_list_.push_back(this->tls_segment_);
436 }
437 this->tls_segment_->add_output_section(os, seg_flags);
438 }
439 }
440
441 return os;
442 }
443
444 // Handle the .note.GNU-stack section at layout time. SEEN_GNU_STACK
445 // is whether we saw a .note.GNU-stack section in the object file.
446 // GNU_STACK_FLAGS is the section flags. The flags give the
447 // protection required for stack memory. We record this in an
448 // executable as a PT_GNU_STACK segment. If an object file does not
449 // have a .note.GNU-stack segment, we must assume that it is an old
450 // object. On some targets that will force an executable stack.
451
452 void
453 Layout::layout_gnu_stack(bool seen_gnu_stack, uint64_t gnu_stack_flags)
454 {
455 if (!seen_gnu_stack)
456 this->input_without_gnu_stack_note_ = true;
457 else
458 {
459 this->input_with_gnu_stack_note_ = true;
460 if ((gnu_stack_flags & elfcpp::SHF_EXECINSTR) != 0)
461 this->input_requires_executable_stack_ = true;
462 }
463 }
464
465 // Create the dynamic sections which are needed before we read the
466 // relocs.
467
468 void
469 Layout::create_initial_dynamic_sections(const Input_objects* input_objects,
470 Symbol_table* symtab)
471 {
472 if (parameters->doing_static_link())
473 return;
474
475 const char* dynamic_name = this->namepool_.add(".dynamic", false, NULL);
476 this->dynamic_section_ = this->make_output_section(dynamic_name,
477 elfcpp::SHT_DYNAMIC,
478 (elfcpp::SHF_ALLOC
479 | elfcpp::SHF_WRITE));
480
481 symtab->define_in_output_data(input_objects->target(), "_DYNAMIC", NULL,
482 this->dynamic_section_, 0, 0,
483 elfcpp::STT_OBJECT, elfcpp::STB_LOCAL,
484 elfcpp::STV_HIDDEN, 0, false, false);
485
486 this->dynamic_data_ = new Output_data_dynamic(&this->dynpool_);
487
488 this->dynamic_section_->add_output_section_data(this->dynamic_data_);
489 }
490
491 // For each output section whose name can be represented as C symbol,
492 // define __start and __stop symbols for the section. This is a GNU
493 // extension.
494
495 void
496 Layout::define_section_symbols(Symbol_table* symtab, const Target* target)
497 {
498 for (Section_list::const_iterator p = this->section_list_.begin();
499 p != this->section_list_.end();
500 ++p)
501 {
502 const char* const name = (*p)->name();
503 if (name[strspn(name,
504 ("0123456789"
505 "ABCDEFGHIJKLMNOPWRSTUVWXYZ"
506 "abcdefghijklmnopqrstuvwxyz"
507 "_"))]
508 == '\0')
509 {
510 const std::string name_string(name);
511 const std::string start_name("__start_" + name_string);
512 const std::string stop_name("__stop_" + name_string);
513
514 symtab->define_in_output_data(target,
515 start_name.c_str(),
516 NULL, // version
517 *p,
518 0, // value
519 0, // symsize
520 elfcpp::STT_NOTYPE,
521 elfcpp::STB_GLOBAL,
522 elfcpp::STV_DEFAULT,
523 0, // nonvis
524 false, // offset_is_from_end
525 false); // only_if_ref
526
527 symtab->define_in_output_data(target,
528 stop_name.c_str(),
529 NULL, // version
530 *p,
531 0, // value
532 0, // symsize
533 elfcpp::STT_NOTYPE,
534 elfcpp::STB_GLOBAL,
535 elfcpp::STV_DEFAULT,
536 0, // nonvis
537 true, // offset_is_from_end
538 false); // only_if_ref
539 }
540 }
541 }
542
543 // Find the first read-only PT_LOAD segment, creating one if
544 // necessary.
545
546 Output_segment*
547 Layout::find_first_load_seg()
548 {
549 for (Segment_list::const_iterator p = this->segment_list_.begin();
550 p != this->segment_list_.end();
551 ++p)
552 {
553 if ((*p)->type() == elfcpp::PT_LOAD
554 && ((*p)->flags() & elfcpp::PF_R) != 0
555 && ((*p)->flags() & elfcpp::PF_W) == 0)
556 return *p;
557 }
558
559 Output_segment* load_seg = new Output_segment(elfcpp::PT_LOAD, elfcpp::PF_R);
560 this->segment_list_.push_back(load_seg);
561 return load_seg;
562 }
563
564 // Finalize the layout. When this is called, we have created all the
565 // output sections and all the output segments which are based on
566 // input sections. We have several things to do, and we have to do
567 // them in the right order, so that we get the right results correctly
568 // and efficiently.
569
570 // 1) Finalize the list of output segments and create the segment
571 // table header.
572
573 // 2) Finalize the dynamic symbol table and associated sections.
574
575 // 3) Determine the final file offset of all the output segments.
576
577 // 4) Determine the final file offset of all the SHF_ALLOC output
578 // sections.
579
580 // 5) Create the symbol table sections and the section name table
581 // section.
582
583 // 6) Finalize the symbol table: set symbol values to their final
584 // value and make a final determination of which symbols are going
585 // into the output symbol table.
586
587 // 7) Create the section table header.
588
589 // 8) Determine the final file offset of all the output sections which
590 // are not SHF_ALLOC, including the section table header.
591
592 // 9) Finalize the ELF file header.
593
594 // This function returns the size of the output file.
595
596 off_t
597 Layout::finalize(const Input_objects* input_objects, Symbol_table* symtab)
598 {
599 Target* const target = input_objects->target();
600
601 target->finalize_sections(this);
602
603 this->create_gold_note();
604 this->create_executable_stack_info(target);
605
606 Output_segment* phdr_seg = NULL;
607 if (!parameters->doing_static_link())
608 {
609 // There was a dynamic object in the link. We need to create
610 // some information for the dynamic linker.
611
612 // Create the PT_PHDR segment which will hold the program
613 // headers.
614 phdr_seg = new Output_segment(elfcpp::PT_PHDR, elfcpp::PF_R);
615 this->segment_list_.push_back(phdr_seg);
616
617 // Create the dynamic symbol table, including the hash table.
618 Output_section* dynstr;
619 std::vector<Symbol*> dynamic_symbols;
620 unsigned int local_dynamic_count;
621 Versions versions;
622 this->create_dynamic_symtab(target, symtab, &dynstr,
623 &local_dynamic_count, &dynamic_symbols,
624 &versions);
625
626 // Create the .interp section to hold the name of the
627 // interpreter, and put it in a PT_INTERP segment.
628 if (!parameters->output_is_shared())
629 this->create_interp(target);
630
631 // Finish the .dynamic section to hold the dynamic data, and put
632 // it in a PT_DYNAMIC segment.
633 this->finish_dynamic_section(input_objects, symtab);
634
635 // We should have added everything we need to the dynamic string
636 // table.
637 this->dynpool_.set_string_offsets();
638
639 // Create the version sections. We can't do this until the
640 // dynamic string table is complete.
641 this->create_version_sections(&versions, symtab, local_dynamic_count,
642 dynamic_symbols, dynstr);
643 }
644
645 // FIXME: Handle PT_GNU_STACK.
646
647 Output_segment* load_seg = this->find_first_load_seg();
648
649 // Lay out the segment headers.
650 Output_segment_headers* segment_headers;
651 segment_headers = new Output_segment_headers(this->segment_list_);
652 load_seg->add_initial_output_data(segment_headers);
653 this->special_output_list_.push_back(segment_headers);
654 if (phdr_seg != NULL)
655 phdr_seg->add_initial_output_data(segment_headers);
656
657 // Lay out the file header.
658 Output_file_header* file_header;
659 file_header = new Output_file_header(target, symtab, segment_headers);
660 load_seg->add_initial_output_data(file_header);
661 this->special_output_list_.push_back(file_header);
662
663 // We set the output section indexes in set_segment_offsets and
664 // set_section_offsets.
665 unsigned int shndx = 1;
666
667 // Set the file offsets of all the segments, and all the sections
668 // they contain.
669 off_t off = this->set_segment_offsets(target, load_seg, &shndx);
670
671 // Set the file offsets of all the data sections not associated with
672 // segments. This makes sure that debug sections have their offsets
673 // before symbols are finalized.
674 off = this->set_section_offsets(off, true);
675
676 // Create the symbol table sections.
677 this->create_symtab_sections(input_objects, symtab, &off);
678
679 // Create the .shstrtab section.
680 Output_section* shstrtab_section = this->create_shstrtab();
681
682 // Set the file offsets of all the non-data sections not associated with
683 // segments.
684 off = this->set_section_offsets(off, false);
685
686 // Now that all sections have been created, set the section indexes.
687 shndx = this->set_section_indexes(shndx);
688
689 // Create the section table header.
690 Output_section_headers* oshdrs = this->create_shdrs(&off);
691
692 file_header->set_section_info(oshdrs, shstrtab_section);
693
694 // Now we know exactly where everything goes in the output file.
695 Output_data::layout_complete();
696
697 this->output_file_size_ = off;
698
699 return off;
700 }
701
702 // Create a .note section for an executable or shared library. This
703 // records the version of gold used to create the binary.
704
705 void
706 Layout::create_gold_note()
707 {
708 if (parameters->output_is_object())
709 return;
710
711 // Authorities all agree that the values in a .note field should
712 // be aligned on 4-byte boundaries for 32-bit binaries. However,
713 // they differ on what the alignment is for 64-bit binaries.
714 // The GABI says unambiguously they take 8-byte alignment:
715 // http://sco.com/developers/gabi/latest/ch5.pheader.html#note_section
716 // Other documentation says alignment should always be 4 bytes:
717 // http://www.netbsd.org/docs/kernel/elf-notes.html#note-format
718 // GNU ld and GNU readelf both support the latter (at least as of
719 // version 2.16.91), and glibc always generates the latter for
720 // .note.ABI-tag (as of version 1.6), so that's the one we go with
721 // here.
722 #ifdef GABI_FORMAT_FOR_DOTNOTE_SECTION // This is not defined by default.
723 const int size = parameters->get_size();
724 #else
725 const int size = 32;
726 #endif
727
728 // The contents of the .note section.
729 const char* name = "GNU";
730 std::string desc(std::string("gold ") + gold::get_version_string());
731 size_t namesz = strlen(name) + 1;
732 size_t aligned_namesz = align_address(namesz, size / 8);
733 size_t descsz = desc.length() + 1;
734 size_t aligned_descsz = align_address(descsz, size / 8);
735 const int note_type = 4;
736
737 size_t notesz = 3 * (size / 8) + aligned_namesz + aligned_descsz;
738
739 unsigned char buffer[128];
740 gold_assert(sizeof buffer >= notesz);
741 memset(buffer, 0, notesz);
742
743 bool is_big_endian = parameters->is_big_endian();
744
745 if (size == 32)
746 {
747 if (!is_big_endian)
748 {
749 elfcpp::Swap<32, false>::writeval(buffer, namesz);
750 elfcpp::Swap<32, false>::writeval(buffer + 4, descsz);
751 elfcpp::Swap<32, false>::writeval(buffer + 8, note_type);
752 }
753 else
754 {
755 elfcpp::Swap<32, true>::writeval(buffer, namesz);
756 elfcpp::Swap<32, true>::writeval(buffer + 4, descsz);
757 elfcpp::Swap<32, true>::writeval(buffer + 8, note_type);
758 }
759 }
760 else if (size == 64)
761 {
762 if (!is_big_endian)
763 {
764 elfcpp::Swap<64, false>::writeval(buffer, namesz);
765 elfcpp::Swap<64, false>::writeval(buffer + 8, descsz);
766 elfcpp::Swap<64, false>::writeval(buffer + 16, note_type);
767 }
768 else
769 {
770 elfcpp::Swap<64, true>::writeval(buffer, namesz);
771 elfcpp::Swap<64, true>::writeval(buffer + 8, descsz);
772 elfcpp::Swap<64, true>::writeval(buffer + 16, note_type);
773 }
774 }
775 else
776 gold_unreachable();
777
778 memcpy(buffer + 3 * (size / 8), name, namesz);
779 memcpy(buffer + 3 * (size / 8) + aligned_namesz, desc.data(), descsz);
780
781 const char* note_name = this->namepool_.add(".note", false, NULL);
782 Output_section* os = this->make_output_section(note_name,
783 elfcpp::SHT_NOTE,
784 0);
785 Output_section_data* posd = new Output_data_const(buffer, notesz,
786 size / 8);
787 os->add_output_section_data(posd);
788 }
789
790 // Record whether the stack should be executable. This can be set
791 // from the command line using the -z execstack or -z noexecstack
792 // options. Otherwise, if any input file has a .note.GNU-stack
793 // section with the SHF_EXECINSTR flag set, the stack should be
794 // executable. Otherwise, if at least one input file a
795 // .note.GNU-stack section, and some input file has no .note.GNU-stack
796 // section, we use the target default for whether the stack should be
797 // executable. Otherwise, we don't generate a stack note. When
798 // generating a object file, we create a .note.GNU-stack section with
799 // the appropriate marking. When generating an executable or shared
800 // library, we create a PT_GNU_STACK segment.
801
802 void
803 Layout::create_executable_stack_info(const Target* target)
804 {
805 bool is_stack_executable;
806 if (this->options_.is_execstack_set())
807 is_stack_executable = this->options_.is_stack_executable();
808 else if (!this->input_with_gnu_stack_note_)
809 return;
810 else
811 {
812 if (this->input_requires_executable_stack_)
813 is_stack_executable = true;
814 else if (this->input_without_gnu_stack_note_)
815 is_stack_executable = target->is_default_stack_executable();
816 else
817 is_stack_executable = false;
818 }
819
820 if (parameters->output_is_object())
821 {
822 const char* name = this->namepool_.add(".note.GNU-stack", false, NULL);
823 elfcpp::Elf_Xword flags = 0;
824 if (is_stack_executable)
825 flags |= elfcpp::SHF_EXECINSTR;
826 this->make_output_section(name, elfcpp::SHT_PROGBITS, flags);
827 }
828 else
829 {
830 int flags = elfcpp::PF_R | elfcpp::PF_W;
831 if (is_stack_executable)
832 flags |= elfcpp::PF_X;
833 Output_segment* oseg = new Output_segment(elfcpp::PT_GNU_STACK, flags);
834 this->segment_list_.push_back(oseg);
835 }
836 }
837
838 // Return whether SEG1 should be before SEG2 in the output file. This
839 // is based entirely on the segment type and flags. When this is
840 // called the segment addresses has normally not yet been set.
841
842 bool
843 Layout::segment_precedes(const Output_segment* seg1,
844 const Output_segment* seg2)
845 {
846 elfcpp::Elf_Word type1 = seg1->type();
847 elfcpp::Elf_Word type2 = seg2->type();
848
849 // The single PT_PHDR segment is required to precede any loadable
850 // segment. We simply make it always first.
851 if (type1 == elfcpp::PT_PHDR)
852 {
853 gold_assert(type2 != elfcpp::PT_PHDR);
854 return true;
855 }
856 if (type2 == elfcpp::PT_PHDR)
857 return false;
858
859 // The single PT_INTERP segment is required to precede any loadable
860 // segment. We simply make it always second.
861 if (type1 == elfcpp::PT_INTERP)
862 {
863 gold_assert(type2 != elfcpp::PT_INTERP);
864 return true;
865 }
866 if (type2 == elfcpp::PT_INTERP)
867 return false;
868
869 // We then put PT_LOAD segments before any other segments.
870 if (type1 == elfcpp::PT_LOAD && type2 != elfcpp::PT_LOAD)
871 return true;
872 if (type2 == elfcpp::PT_LOAD && type1 != elfcpp::PT_LOAD)
873 return false;
874
875 // We put the PT_TLS segment last, because that is where the dynamic
876 // linker expects to find it (this is just for efficiency; other
877 // positions would also work correctly).
878 if (type1 == elfcpp::PT_TLS && type2 != elfcpp::PT_TLS)
879 return false;
880 if (type2 == elfcpp::PT_TLS && type1 != elfcpp::PT_TLS)
881 return true;
882
883 const elfcpp::Elf_Word flags1 = seg1->flags();
884 const elfcpp::Elf_Word flags2 = seg2->flags();
885
886 // The order of non-PT_LOAD segments is unimportant. We simply sort
887 // by the numeric segment type and flags values. There should not
888 // be more than one segment with the same type and flags.
889 if (type1 != elfcpp::PT_LOAD)
890 {
891 if (type1 != type2)
892 return type1 < type2;
893 gold_assert(flags1 != flags2);
894 return flags1 < flags2;
895 }
896
897 // We sort PT_LOAD segments based on the flags. Readonly segments
898 // come before writable segments. Then executable segments come
899 // before non-executable segments. Then the unlikely case of a
900 // non-readable segment comes before the normal case of a readable
901 // segment. If there are multiple segments with the same type and
902 // flags, we require that the address be set, and we sort by
903 // virtual address and then physical address.
904 if ((flags1 & elfcpp::PF_W) != (flags2 & elfcpp::PF_W))
905 return (flags1 & elfcpp::PF_W) == 0;
906 if ((flags1 & elfcpp::PF_X) != (flags2 & elfcpp::PF_X))
907 return (flags1 & elfcpp::PF_X) != 0;
908 if ((flags1 & elfcpp::PF_R) != (flags2 & elfcpp::PF_R))
909 return (flags1 & elfcpp::PF_R) == 0;
910
911 uint64_t vaddr1 = seg1->vaddr();
912 uint64_t vaddr2 = seg2->vaddr();
913 if (vaddr1 != vaddr2)
914 return vaddr1 < vaddr2;
915
916 uint64_t paddr1 = seg1->paddr();
917 uint64_t paddr2 = seg2->paddr();
918 gold_assert(paddr1 != paddr2);
919 return paddr1 < paddr2;
920 }
921
922 // Set the file offsets of all the segments, and all the sections they
923 // contain. They have all been created. LOAD_SEG must be be laid out
924 // first. Return the offset of the data to follow.
925
926 off_t
927 Layout::set_segment_offsets(const Target* target, Output_segment* load_seg,
928 unsigned int *pshndx)
929 {
930 // Sort them into the final order.
931 std::sort(this->segment_list_.begin(), this->segment_list_.end(),
932 Layout::Compare_segments());
933
934 // Find the PT_LOAD segments, and set their addresses and offsets
935 // and their section's addresses and offsets.
936 uint64_t addr;
937 if (options_.user_set_text_segment_address())
938 addr = options_.text_segment_address();
939 else
940 addr = target->default_text_segment_address();
941 off_t off = 0;
942 bool was_readonly = false;
943 for (Segment_list::iterator p = this->segment_list_.begin();
944 p != this->segment_list_.end();
945 ++p)
946 {
947 if ((*p)->type() == elfcpp::PT_LOAD)
948 {
949 if (load_seg != NULL && load_seg != *p)
950 gold_unreachable();
951 load_seg = NULL;
952
953 // If the last segment was readonly, and this one is not,
954 // then skip the address forward one page, maintaining the
955 // same position within the page. This lets us store both
956 // segments overlapping on a single page in the file, but
957 // the loader will put them on different pages in memory.
958
959 uint64_t orig_addr = addr;
960 uint64_t orig_off = off;
961
962 uint64_t aligned_addr = addr;
963 uint64_t abi_pagesize = target->abi_pagesize();
964
965 // FIXME: This should depend on the -n and -N options.
966 (*p)->set_minimum_addralign(target->common_pagesize());
967
968 if (was_readonly && ((*p)->flags() & elfcpp::PF_W) != 0)
969 {
970 uint64_t align = (*p)->addralign();
971
972 addr = align_address(addr, align);
973 aligned_addr = addr;
974 if ((addr & (abi_pagesize - 1)) != 0)
975 addr = addr + abi_pagesize;
976 }
977
978 unsigned int shndx_hold = *pshndx;
979 off = orig_off + ((addr - orig_addr) & (abi_pagesize - 1));
980 uint64_t new_addr = (*p)->set_section_addresses(addr, &off, pshndx);
981
982 // Now that we know the size of this segment, we may be able
983 // to save a page in memory, at the cost of wasting some
984 // file space, by instead aligning to the start of a new
985 // page. Here we use the real machine page size rather than
986 // the ABI mandated page size.
987
988 if (aligned_addr != addr)
989 {
990 uint64_t common_pagesize = target->common_pagesize();
991 uint64_t first_off = (common_pagesize
992 - (aligned_addr
993 & (common_pagesize - 1)));
994 uint64_t last_off = new_addr & (common_pagesize - 1);
995 if (first_off > 0
996 && last_off > 0
997 && ((aligned_addr & ~ (common_pagesize - 1))
998 != (new_addr & ~ (common_pagesize - 1)))
999 && first_off + last_off <= common_pagesize)
1000 {
1001 *pshndx = shndx_hold;
1002 addr = align_address(aligned_addr, common_pagesize);
1003 off = orig_off + ((addr - orig_addr) & (abi_pagesize - 1));
1004 new_addr = (*p)->set_section_addresses(addr, &off, pshndx);
1005 }
1006 }
1007
1008 addr = new_addr;
1009
1010 if (((*p)->flags() & elfcpp::PF_W) == 0)
1011 was_readonly = true;
1012 }
1013 }
1014
1015 // Handle the non-PT_LOAD segments, setting their offsets from their
1016 // section's offsets.
1017 for (Segment_list::iterator p = this->segment_list_.begin();
1018 p != this->segment_list_.end();
1019 ++p)
1020 {
1021 if ((*p)->type() != elfcpp::PT_LOAD)
1022 (*p)->set_offset();
1023 }
1024
1025 return off;
1026 }
1027
1028 // Set the file offset of all the sections not associated with a
1029 // segment.
1030
1031 off_t
1032 Layout::set_section_offsets(off_t off,
1033 bool do_bits_sections)
1034 {
1035 for (Section_list::iterator p = this->unattached_section_list_.begin();
1036 p != this->unattached_section_list_.end();
1037 ++p)
1038 {
1039 bool is_bits_section = ((*p)->type() == elfcpp::SHT_PROGBITS
1040 || (*p)->type() == elfcpp::SHT_NOBITS);
1041 if (is_bits_section != do_bits_sections)
1042 continue;
1043 if ((*p)->offset() != -1)
1044 continue;
1045 off = align_address(off, (*p)->addralign());
1046 (*p)->set_address(0, off);
1047 off += (*p)->data_size();
1048 }
1049 return off;
1050 }
1051
1052 // Set the section indexes of all the sections not associated with a
1053 // segment.
1054
1055 unsigned int
1056 Layout::set_section_indexes(unsigned int shndx)
1057 {
1058 for (Section_list::iterator p = this->unattached_section_list_.begin();
1059 p != this->unattached_section_list_.end();
1060 ++p)
1061 {
1062 (*p)->set_out_shndx(shndx);
1063 ++shndx;
1064 }
1065 return shndx;
1066 }
1067
1068 // Create the symbol table sections. Here we also set the final
1069 // values of the symbols. At this point all the loadable sections are
1070 // fully laid out.
1071
1072 void
1073 Layout::create_symtab_sections(const Input_objects* input_objects,
1074 Symbol_table* symtab,
1075 off_t* poff)
1076 {
1077 int symsize;
1078 unsigned int align;
1079 if (parameters->get_size() == 32)
1080 {
1081 symsize = elfcpp::Elf_sizes<32>::sym_size;
1082 align = 4;
1083 }
1084 else if (parameters->get_size() == 64)
1085 {
1086 symsize = elfcpp::Elf_sizes<64>::sym_size;
1087 align = 8;
1088 }
1089 else
1090 gold_unreachable();
1091
1092 off_t off = *poff;
1093 off = align_address(off, align);
1094 off_t startoff = off;
1095
1096 // Save space for the dummy symbol at the start of the section. We
1097 // never bother to write this out--it will just be left as zero.
1098 off += symsize;
1099 unsigned int local_symbol_index = 1;
1100
1101 // Add STT_SECTION symbols for each Output section which needs one.
1102 for (Section_list::iterator p = this->section_list_.begin();
1103 p != this->section_list_.end();
1104 ++p)
1105 {
1106 if (!(*p)->needs_symtab_index())
1107 (*p)->set_symtab_index(-1U);
1108 else
1109 {
1110 (*p)->set_symtab_index(local_symbol_index);
1111 ++local_symbol_index;
1112 off += symsize;
1113 }
1114 }
1115
1116 for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
1117 p != input_objects->relobj_end();
1118 ++p)
1119 {
1120 Task_lock_obj<Object> tlo(**p);
1121 unsigned int index = (*p)->finalize_local_symbols(local_symbol_index,
1122 off,
1123 &this->sympool_);
1124 off += (index - local_symbol_index) * symsize;
1125 local_symbol_index = index;
1126 }
1127
1128 unsigned int local_symcount = local_symbol_index;
1129 gold_assert(local_symcount * symsize == off - startoff);
1130
1131 off_t dynoff;
1132 size_t dyn_global_index;
1133 size_t dyncount;
1134 if (this->dynsym_section_ == NULL)
1135 {
1136 dynoff = 0;
1137 dyn_global_index = 0;
1138 dyncount = 0;
1139 }
1140 else
1141 {
1142 dyn_global_index = this->dynsym_section_->info();
1143 off_t locsize = dyn_global_index * this->dynsym_section_->entsize();
1144 dynoff = this->dynsym_section_->offset() + locsize;
1145 dyncount = (this->dynsym_section_->data_size() - locsize) / symsize;
1146 gold_assert(static_cast<off_t>(dyncount * symsize)
1147 == this->dynsym_section_->data_size() - locsize);
1148 }
1149
1150 off = symtab->finalize(local_symcount, off, dynoff, dyn_global_index,
1151 dyncount, &this->sympool_);
1152
1153 if (!parameters->strip_all())
1154 {
1155 this->sympool_.set_string_offsets();
1156
1157 const char* symtab_name = this->namepool_.add(".symtab", false, NULL);
1158 Output_section* osymtab = this->make_output_section(symtab_name,
1159 elfcpp::SHT_SYMTAB,
1160 0);
1161 this->symtab_section_ = osymtab;
1162
1163 Output_section_data* pos = new Output_data_space(off - startoff,
1164 align);
1165 osymtab->add_output_section_data(pos);
1166
1167 const char* strtab_name = this->namepool_.add(".strtab", false, NULL);
1168 Output_section* ostrtab = this->make_output_section(strtab_name,
1169 elfcpp::SHT_STRTAB,
1170 0);
1171
1172 Output_section_data* pstr = new Output_data_strtab(&this->sympool_);
1173 ostrtab->add_output_section_data(pstr);
1174
1175 osymtab->set_address(0, startoff);
1176 osymtab->set_link_section(ostrtab);
1177 osymtab->set_info(local_symcount);
1178 osymtab->set_entsize(symsize);
1179
1180 *poff = off;
1181 }
1182 }
1183
1184 // Create the .shstrtab section, which holds the names of the
1185 // sections. At the time this is called, we have created all the
1186 // output sections except .shstrtab itself.
1187
1188 Output_section*
1189 Layout::create_shstrtab()
1190 {
1191 // FIXME: We don't need to create a .shstrtab section if we are
1192 // stripping everything.
1193
1194 const char* name = this->namepool_.add(".shstrtab", false, NULL);
1195
1196 this->namepool_.set_string_offsets();
1197
1198 Output_section* os = this->make_output_section(name, elfcpp::SHT_STRTAB, 0);
1199
1200 Output_section_data* posd = new Output_data_strtab(&this->namepool_);
1201 os->add_output_section_data(posd);
1202
1203 return os;
1204 }
1205
1206 // Create the section headers. SIZE is 32 or 64. OFF is the file
1207 // offset.
1208
1209 Output_section_headers*
1210 Layout::create_shdrs(off_t* poff)
1211 {
1212 Output_section_headers* oshdrs;
1213 oshdrs = new Output_section_headers(this,
1214 &this->segment_list_,
1215 &this->unattached_section_list_,
1216 &this->namepool_);
1217 off_t off = align_address(*poff, oshdrs->addralign());
1218 oshdrs->set_address(0, off);
1219 off += oshdrs->data_size();
1220 *poff = off;
1221 this->special_output_list_.push_back(oshdrs);
1222 return oshdrs;
1223 }
1224
1225 // Create the dynamic symbol table.
1226
1227 void
1228 Layout::create_dynamic_symtab(const Target* target, Symbol_table* symtab,
1229 Output_section **pdynstr,
1230 unsigned int* plocal_dynamic_count,
1231 std::vector<Symbol*>* pdynamic_symbols,
1232 Versions* pversions)
1233 {
1234 // Count all the symbols in the dynamic symbol table, and set the
1235 // dynamic symbol indexes.
1236
1237 // Skip symbol 0, which is always all zeroes.
1238 unsigned int index = 1;
1239
1240 // Add STT_SECTION symbols for each Output section which needs one.
1241 for (Section_list::iterator p = this->section_list_.begin();
1242 p != this->section_list_.end();
1243 ++p)
1244 {
1245 if (!(*p)->needs_dynsym_index())
1246 (*p)->set_dynsym_index(-1U);
1247 else
1248 {
1249 (*p)->set_dynsym_index(index);
1250 ++index;
1251 }
1252 }
1253
1254 // FIXME: Some targets apparently require local symbols in the
1255 // dynamic symbol table. Here is where we will have to count them,
1256 // and set the dynamic symbol indexes, and add the names to
1257 // this->dynpool_.
1258
1259 unsigned int local_symcount = index;
1260 *plocal_dynamic_count = local_symcount;
1261
1262 // FIXME: We have to tell set_dynsym_indexes whether the
1263 // -E/--export-dynamic option was used.
1264 index = symtab->set_dynsym_indexes(target, index, pdynamic_symbols,
1265 &this->dynpool_, pversions);
1266
1267 int symsize;
1268 unsigned int align;
1269 const int size = parameters->get_size();
1270 if (size == 32)
1271 {
1272 symsize = elfcpp::Elf_sizes<32>::sym_size;
1273 align = 4;
1274 }
1275 else if (size == 64)
1276 {
1277 symsize = elfcpp::Elf_sizes<64>::sym_size;
1278 align = 8;
1279 }
1280 else
1281 gold_unreachable();
1282
1283 // Create the dynamic symbol table section.
1284
1285 const char* dynsym_name = this->namepool_.add(".dynsym", false, NULL);
1286 Output_section* dynsym = this->make_output_section(dynsym_name,
1287 elfcpp::SHT_DYNSYM,
1288 elfcpp::SHF_ALLOC);
1289
1290 Output_section_data* odata = new Output_data_space(index * symsize,
1291 align);
1292 dynsym->add_output_section_data(odata);
1293
1294 dynsym->set_info(local_symcount);
1295 dynsym->set_entsize(symsize);
1296 dynsym->set_addralign(align);
1297
1298 this->dynsym_section_ = dynsym;
1299
1300 Output_data_dynamic* const odyn = this->dynamic_data_;
1301 odyn->add_section_address(elfcpp::DT_SYMTAB, dynsym);
1302 odyn->add_constant(elfcpp::DT_SYMENT, symsize);
1303
1304 // Create the dynamic string table section.
1305
1306 const char* dynstr_name = this->namepool_.add(".dynstr", false, NULL);
1307 Output_section* dynstr = this->make_output_section(dynstr_name,
1308 elfcpp::SHT_STRTAB,
1309 elfcpp::SHF_ALLOC);
1310
1311 Output_section_data* strdata = new Output_data_strtab(&this->dynpool_);
1312 dynstr->add_output_section_data(strdata);
1313
1314 dynsym->set_link_section(dynstr);
1315 this->dynamic_section_->set_link_section(dynstr);
1316
1317 odyn->add_section_address(elfcpp::DT_STRTAB, dynstr);
1318 odyn->add_section_size(elfcpp::DT_STRSZ, dynstr);
1319
1320 *pdynstr = dynstr;
1321
1322 // Create the hash tables.
1323
1324 // FIXME: We need an option to create a GNU hash table.
1325
1326 unsigned char* phash;
1327 unsigned int hashlen;
1328 Dynobj::create_elf_hash_table(*pdynamic_symbols, local_symcount,
1329 &phash, &hashlen);
1330
1331 const char* hash_name = this->namepool_.add(".hash", false, NULL);
1332 Output_section* hashsec = this->make_output_section(hash_name,
1333 elfcpp::SHT_HASH,
1334 elfcpp::SHF_ALLOC);
1335
1336 Output_section_data* hashdata = new Output_data_const_buffer(phash,
1337 hashlen,
1338 align);
1339 hashsec->add_output_section_data(hashdata);
1340
1341 hashsec->set_link_section(dynsym);
1342 hashsec->set_entsize(4);
1343
1344 odyn->add_section_address(elfcpp::DT_HASH, hashsec);
1345 }
1346
1347 // Create the version sections.
1348
1349 void
1350 Layout::create_version_sections(const Versions* versions,
1351 const Symbol_table* symtab,
1352 unsigned int local_symcount,
1353 const std::vector<Symbol*>& dynamic_symbols,
1354 const Output_section* dynstr)
1355 {
1356 if (!versions->any_defs() && !versions->any_needs())
1357 return;
1358
1359 if (parameters->get_size() == 32)
1360 {
1361 if (parameters->is_big_endian())
1362 {
1363 #ifdef HAVE_TARGET_32_BIG
1364 this->sized_create_version_sections
1365 SELECT_SIZE_ENDIAN_NAME(32, true)(
1366 versions, symtab, local_symcount, dynamic_symbols, dynstr
1367 SELECT_SIZE_ENDIAN(32, true));
1368 #else
1369 gold_unreachable();
1370 #endif
1371 }
1372 else
1373 {
1374 #ifdef HAVE_TARGET_32_LITTLE
1375 this->sized_create_version_sections
1376 SELECT_SIZE_ENDIAN_NAME(32, false)(
1377 versions, symtab, local_symcount, dynamic_symbols, dynstr
1378 SELECT_SIZE_ENDIAN(32, false));
1379 #else
1380 gold_unreachable();
1381 #endif
1382 }
1383 }
1384 else if (parameters->get_size() == 64)
1385 {
1386 if (parameters->is_big_endian())
1387 {
1388 #ifdef HAVE_TARGET_64_BIG
1389 this->sized_create_version_sections
1390 SELECT_SIZE_ENDIAN_NAME(64, true)(
1391 versions, symtab, local_symcount, dynamic_symbols, dynstr
1392 SELECT_SIZE_ENDIAN(64, true));
1393 #else
1394 gold_unreachable();
1395 #endif
1396 }
1397 else
1398 {
1399 #ifdef HAVE_TARGET_64_LITTLE
1400 this->sized_create_version_sections
1401 SELECT_SIZE_ENDIAN_NAME(64, false)(
1402 versions, symtab, local_symcount, dynamic_symbols, dynstr
1403 SELECT_SIZE_ENDIAN(64, false));
1404 #else
1405 gold_unreachable();
1406 #endif
1407 }
1408 }
1409 else
1410 gold_unreachable();
1411 }
1412
1413 // Create the version sections, sized version.
1414
1415 template<int size, bool big_endian>
1416 void
1417 Layout::sized_create_version_sections(
1418 const Versions* versions,
1419 const Symbol_table* symtab,
1420 unsigned int local_symcount,
1421 const std::vector<Symbol*>& dynamic_symbols,
1422 const Output_section* dynstr
1423 ACCEPT_SIZE_ENDIAN)
1424 {
1425 const char* vname = this->namepool_.add(".gnu.version", false, NULL);
1426 Output_section* vsec = this->make_output_section(vname,
1427 elfcpp::SHT_GNU_versym,
1428 elfcpp::SHF_ALLOC);
1429
1430 unsigned char* vbuf;
1431 unsigned int vsize;
1432 versions->symbol_section_contents SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
1433 symtab, &this->dynpool_, local_symcount, dynamic_symbols, &vbuf, &vsize
1434 SELECT_SIZE_ENDIAN(size, big_endian));
1435
1436 Output_section_data* vdata = new Output_data_const_buffer(vbuf, vsize, 2);
1437
1438 vsec->add_output_section_data(vdata);
1439 vsec->set_entsize(2);
1440 vsec->set_link_section(this->dynsym_section_);
1441
1442 Output_data_dynamic* const odyn = this->dynamic_data_;
1443 odyn->add_section_address(elfcpp::DT_VERSYM, vsec);
1444
1445 if (versions->any_defs())
1446 {
1447 const char* vdname = this->namepool_.add(".gnu.version_d", false, NULL);
1448 Output_section *vdsec;
1449 vdsec = this->make_output_section(vdname, elfcpp::SHT_GNU_verdef,
1450 elfcpp::SHF_ALLOC);
1451
1452 unsigned char* vdbuf;
1453 unsigned int vdsize;
1454 unsigned int vdentries;
1455 versions->def_section_contents SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
1456 &this->dynpool_, &vdbuf, &vdsize, &vdentries
1457 SELECT_SIZE_ENDIAN(size, big_endian));
1458
1459 Output_section_data* vddata = new Output_data_const_buffer(vdbuf,
1460 vdsize,
1461 4);
1462
1463 vdsec->add_output_section_data(vddata);
1464 vdsec->set_link_section(dynstr);
1465 vdsec->set_info(vdentries);
1466
1467 odyn->add_section_address(elfcpp::DT_VERDEF, vdsec);
1468 odyn->add_constant(elfcpp::DT_VERDEFNUM, vdentries);
1469 }
1470
1471 if (versions->any_needs())
1472 {
1473 const char* vnname = this->namepool_.add(".gnu.version_r", false, NULL);
1474 Output_section* vnsec;
1475 vnsec = this->make_output_section(vnname, elfcpp::SHT_GNU_verneed,
1476 elfcpp::SHF_ALLOC);
1477
1478 unsigned char* vnbuf;
1479 unsigned int vnsize;
1480 unsigned int vnentries;
1481 versions->need_section_contents SELECT_SIZE_ENDIAN_NAME(size, big_endian)
1482 (&this->dynpool_, &vnbuf, &vnsize, &vnentries
1483 SELECT_SIZE_ENDIAN(size, big_endian));
1484
1485 Output_section_data* vndata = new Output_data_const_buffer(vnbuf,
1486 vnsize,
1487 4);
1488
1489 vnsec->add_output_section_data(vndata);
1490 vnsec->set_link_section(dynstr);
1491 vnsec->set_info(vnentries);
1492
1493 odyn->add_section_address(elfcpp::DT_VERNEED, vnsec);
1494 odyn->add_constant(elfcpp::DT_VERNEEDNUM, vnentries);
1495 }
1496 }
1497
1498 // Create the .interp section and PT_INTERP segment.
1499
1500 void
1501 Layout::create_interp(const Target* target)
1502 {
1503 const char* interp = this->options_.dynamic_linker();
1504 if (interp == NULL)
1505 {
1506 interp = target->dynamic_linker();
1507 gold_assert(interp != NULL);
1508 }
1509
1510 size_t len = strlen(interp) + 1;
1511
1512 Output_section_data* odata = new Output_data_const(interp, len, 1);
1513
1514 const char* interp_name = this->namepool_.add(".interp", false, NULL);
1515 Output_section* osec = this->make_output_section(interp_name,
1516 elfcpp::SHT_PROGBITS,
1517 elfcpp::SHF_ALLOC);
1518 osec->add_output_section_data(odata);
1519
1520 Output_segment* oseg = new Output_segment(elfcpp::PT_INTERP, elfcpp::PF_R);
1521 this->segment_list_.push_back(oseg);
1522 oseg->add_initial_output_section(osec, elfcpp::PF_R);
1523 }
1524
1525 // Finish the .dynamic section and PT_DYNAMIC segment.
1526
1527 void
1528 Layout::finish_dynamic_section(const Input_objects* input_objects,
1529 const Symbol_table* symtab)
1530 {
1531 Output_segment* oseg = new Output_segment(elfcpp::PT_DYNAMIC,
1532 elfcpp::PF_R | elfcpp::PF_W);
1533 this->segment_list_.push_back(oseg);
1534 oseg->add_initial_output_section(this->dynamic_section_,
1535 elfcpp::PF_R | elfcpp::PF_W);
1536
1537 Output_data_dynamic* const odyn = this->dynamic_data_;
1538
1539 for (Input_objects::Dynobj_iterator p = input_objects->dynobj_begin();
1540 p != input_objects->dynobj_end();
1541 ++p)
1542 {
1543 // FIXME: Handle --as-needed.
1544 odyn->add_string(elfcpp::DT_NEEDED, (*p)->soname());
1545 }
1546
1547 // FIXME: Support --init and --fini.
1548 Symbol* sym = symtab->lookup("_init");
1549 if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj())
1550 odyn->add_symbol(elfcpp::DT_INIT, sym);
1551
1552 sym = symtab->lookup("_fini");
1553 if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj())
1554 odyn->add_symbol(elfcpp::DT_FINI, sym);
1555
1556 // FIXME: Support DT_INIT_ARRAY and DT_FINI_ARRAY.
1557
1558 // Add a DT_RPATH entry if needed.
1559 const General_options::Dir_list& rpath(this->options_.rpath());
1560 if (!rpath.empty())
1561 {
1562 std::string rpath_val;
1563 for (General_options::Dir_list::const_iterator p = rpath.begin();
1564 p != rpath.end();
1565 ++p)
1566 {
1567 if (rpath_val.empty())
1568 rpath_val = p->name();
1569 else
1570 {
1571 // Eliminate duplicates.
1572 General_options::Dir_list::const_iterator q;
1573 for (q = rpath.begin(); q != p; ++q)
1574 if (q->name() == p->name())
1575 break;
1576 if (q == p)
1577 {
1578 rpath_val += ':';
1579 rpath_val += p->name();
1580 }
1581 }
1582 }
1583
1584 odyn->add_string(elfcpp::DT_RPATH, rpath_val);
1585 }
1586
1587 // Add a DT_FLAGS entry. We add it even if no flags are set so that
1588 // post-link tools can easily modify these flags if desired.
1589 unsigned int flags = 0;
1590 if (this->have_textrel_)
1591 flags |= elfcpp::DF_TEXTREL;
1592 odyn->add_constant(elfcpp::DT_FLAGS, flags);
1593 }
1594
1595 // The mapping of .gnu.linkonce section names to real section names.
1596
1597 #define MAPPING_INIT(f, t) { f, sizeof(f) - 1, t, sizeof(t) - 1 }
1598 const Layout::Linkonce_mapping Layout::linkonce_mapping[] =
1599 {
1600 MAPPING_INIT("d.rel.ro", ".data.rel.ro"), // Must be before "d".
1601 MAPPING_INIT("t", ".text"),
1602 MAPPING_INIT("r", ".rodata"),
1603 MAPPING_INIT("d", ".data"),
1604 MAPPING_INIT("b", ".bss"),
1605 MAPPING_INIT("s", ".sdata"),
1606 MAPPING_INIT("sb", ".sbss"),
1607 MAPPING_INIT("s2", ".sdata2"),
1608 MAPPING_INIT("sb2", ".sbss2"),
1609 MAPPING_INIT("wi", ".debug_info"),
1610 MAPPING_INIT("td", ".tdata"),
1611 MAPPING_INIT("tb", ".tbss"),
1612 MAPPING_INIT("lr", ".lrodata"),
1613 MAPPING_INIT("l", ".ldata"),
1614 MAPPING_INIT("lb", ".lbss"),
1615 };
1616 #undef MAPPING_INIT
1617
1618 const int Layout::linkonce_mapping_count =
1619 sizeof(Layout::linkonce_mapping) / sizeof(Layout::linkonce_mapping[0]);
1620
1621 // Return the name of the output section to use for a .gnu.linkonce
1622 // section. This is based on the default ELF linker script of the old
1623 // GNU linker. For example, we map a name like ".gnu.linkonce.t.foo"
1624 // to ".text". Set *PLEN to the length of the name. *PLEN is
1625 // initialized to the length of NAME.
1626
1627 const char*
1628 Layout::linkonce_output_name(const char* name, size_t *plen)
1629 {
1630 const char* s = name + sizeof(".gnu.linkonce") - 1;
1631 if (*s != '.')
1632 return name;
1633 ++s;
1634 const Linkonce_mapping* plm = linkonce_mapping;
1635 for (int i = 0; i < linkonce_mapping_count; ++i, ++plm)
1636 {
1637 if (strncmp(s, plm->from, plm->fromlen) == 0 && s[plm->fromlen] == '.')
1638 {
1639 *plen = plm->tolen;
1640 return plm->to;
1641 }
1642 }
1643 return name;
1644 }
1645
1646 // Choose the output section name to use given an input section name.
1647 // Set *PLEN to the length of the name. *PLEN is initialized to the
1648 // length of NAME.
1649
1650 const char*
1651 Layout::output_section_name(const char* name, size_t* plen)
1652 {
1653 if (Layout::is_linkonce(name))
1654 {
1655 // .gnu.linkonce sections are laid out as though they were named
1656 // for the sections are placed into.
1657 return Layout::linkonce_output_name(name, plen);
1658 }
1659
1660 // gcc 4.3 generates the following sorts of section names when it
1661 // needs a section name specific to a function:
1662 // .text.FN
1663 // .rodata.FN
1664 // .sdata2.FN
1665 // .data.FN
1666 // .data.rel.FN
1667 // .data.rel.local.FN
1668 // .data.rel.ro.FN
1669 // .data.rel.ro.local.FN
1670 // .sdata.FN
1671 // .bss.FN
1672 // .sbss.FN
1673 // .tdata.FN
1674 // .tbss.FN
1675
1676 // The GNU linker maps all of those to the part before the .FN,
1677 // except that .data.rel.local.FN is mapped to .data, and
1678 // .data.rel.ro.local.FN is mapped to .data.rel.ro. The sections
1679 // beginning with .data.rel.ro.local are grouped together.
1680
1681 // For an anonymous namespace, the string FN can contain a '.'.
1682
1683 // Also of interest: .rodata.strN.N, .rodata.cstN, both of which the
1684 // GNU linker maps to .rodata.
1685
1686 // The .data.rel.ro sections enable a security feature triggered by
1687 // the -z relro option. Section which need to be relocated at
1688 // program startup time but which may be readonly after startup are
1689 // grouped into .data.rel.ro. They are then put into a PT_GNU_RELRO
1690 // segment. The dynamic linker will make that segment writable,
1691 // perform relocations, and then make it read-only. FIXME: We do
1692 // not yet implement this optimization.
1693
1694 // It is hard to handle this in a principled way.
1695
1696 // These are the rules we follow:
1697
1698 // If the section name has no initial '.', or no dot other than an
1699 // initial '.', we use the name unchanged (i.e., "mysection" and
1700 // ".text" are unchanged).
1701
1702 // If the name starts with ".data.rel.ro" we use ".data.rel.ro".
1703
1704 // Otherwise, we drop the second '.' and everything that comes after
1705 // it (i.e., ".text.XXX" becomes ".text").
1706
1707 const char* s = name;
1708 if (*s != '.')
1709 return name;
1710 ++s;
1711 const char* sdot = strchr(s, '.');
1712 if (sdot == NULL)
1713 return name;
1714
1715 const char* const data_rel_ro = ".data.rel.ro";
1716 if (strncmp(name, data_rel_ro, strlen(data_rel_ro)) == 0)
1717 {
1718 *plen = strlen(data_rel_ro);
1719 return data_rel_ro;
1720 }
1721
1722 *plen = sdot - name;
1723 return name;
1724 }
1725
1726 // Record the signature of a comdat section, and return whether to
1727 // include it in the link. If GROUP is true, this is a regular
1728 // section group. If GROUP is false, this is a group signature
1729 // derived from the name of a linkonce section. We want linkonce
1730 // signatures and group signatures to block each other, but we don't
1731 // want a linkonce signature to block another linkonce signature.
1732
1733 bool
1734 Layout::add_comdat(const char* signature, bool group)
1735 {
1736 std::string sig(signature);
1737 std::pair<Signatures::iterator, bool> ins(
1738 this->signatures_.insert(std::make_pair(sig, group)));
1739
1740 if (ins.second)
1741 {
1742 // This is the first time we've seen this signature.
1743 return true;
1744 }
1745
1746 if (ins.first->second)
1747 {
1748 // We've already seen a real section group with this signature.
1749 return false;
1750 }
1751 else if (group)
1752 {
1753 // This is a real section group, and we've already seen a
1754 // linkonce section with this signature. Record that we've seen
1755 // a section group, and don't include this section group.
1756 ins.first->second = true;
1757 return false;
1758 }
1759 else
1760 {
1761 // We've already seen a linkonce section and this is a linkonce
1762 // section. These don't block each other--this may be the same
1763 // symbol name with different section types.
1764 return true;
1765 }
1766 }
1767
1768 // Write out the Output_sections. Most won't have anything to write,
1769 // since most of the data will come from input sections which are
1770 // handled elsewhere. But some Output_sections do have Output_data.
1771
1772 void
1773 Layout::write_output_sections(Output_file* of) const
1774 {
1775 for (Section_list::const_iterator p = this->section_list_.begin();
1776 p != this->section_list_.end();
1777 ++p)
1778 {
1779 if (!(*p)->after_input_sections())
1780 (*p)->write(of);
1781 }
1782 }
1783
1784 // Write out data not associated with a section or the symbol table.
1785
1786 void
1787 Layout::write_data(const Symbol_table* symtab, Output_file* of) const
1788 {
1789 if (!parameters->strip_all())
1790 {
1791 const Output_section* symtab_section = this->symtab_section_;
1792 for (Section_list::const_iterator p = this->section_list_.begin();
1793 p != this->section_list_.end();
1794 ++p)
1795 {
1796 if ((*p)->needs_symtab_index())
1797 {
1798 gold_assert(symtab_section != NULL);
1799 unsigned int index = (*p)->symtab_index();
1800 gold_assert(index > 0 && index != -1U);
1801 off_t off = (symtab_section->offset()
1802 + index * symtab_section->entsize());
1803 symtab->write_section_symbol(*p, of, off);
1804 }
1805 }
1806 }
1807
1808 const Output_section* dynsym_section = this->dynsym_section_;
1809 for (Section_list::const_iterator p = this->section_list_.begin();
1810 p != this->section_list_.end();
1811 ++p)
1812 {
1813 if ((*p)->needs_dynsym_index())
1814 {
1815 gold_assert(dynsym_section != NULL);
1816 unsigned int index = (*p)->dynsym_index();
1817 gold_assert(index > 0 && index != -1U);
1818 off_t off = (dynsym_section->offset()
1819 + index * dynsym_section->entsize());
1820 symtab->write_section_symbol(*p, of, off);
1821 }
1822 }
1823
1824 // Write out the Output_data which are not in an Output_section.
1825 for (Data_list::const_iterator p = this->special_output_list_.begin();
1826 p != this->special_output_list_.end();
1827 ++p)
1828 (*p)->write(of);
1829 }
1830
1831 // Write out the Output_sections which can only be written after the
1832 // input sections are complete.
1833
1834 void
1835 Layout::write_sections_after_input_sections(Output_file* of) const
1836 {
1837 for (Section_list::const_iterator p = this->section_list_.begin();
1838 p != this->section_list_.end();
1839 ++p)
1840 {
1841 if ((*p)->after_input_sections())
1842 (*p)->write(of);
1843 }
1844 }
1845
1846 // Write_sections_task methods.
1847
1848 // We can always run this task.
1849
1850 Task::Is_runnable_type
1851 Write_sections_task::is_runnable(Workqueue*)
1852 {
1853 return IS_RUNNABLE;
1854 }
1855
1856 // We need to unlock both OUTPUT_SECTIONS_BLOCKER and FINAL_BLOCKER
1857 // when finished.
1858
1859 class Write_sections_task::Write_sections_locker : public Task_locker
1860 {
1861 public:
1862 Write_sections_locker(Task_token& output_sections_blocker,
1863 Task_token& final_blocker,
1864 Workqueue* workqueue)
1865 : output_sections_block_(output_sections_blocker, workqueue),
1866 final_block_(final_blocker, workqueue)
1867 { }
1868
1869 private:
1870 Task_block_token output_sections_block_;
1871 Task_block_token final_block_;
1872 };
1873
1874 Task_locker*
1875 Write_sections_task::locks(Workqueue* workqueue)
1876 {
1877 return new Write_sections_locker(*this->output_sections_blocker_,
1878 *this->final_blocker_,
1879 workqueue);
1880 }
1881
1882 // Run the task--write out the data.
1883
1884 void
1885 Write_sections_task::run(Workqueue*)
1886 {
1887 this->layout_->write_output_sections(this->of_);
1888 }
1889
1890 // Write_data_task methods.
1891
1892 // We can always run this task.
1893
1894 Task::Is_runnable_type
1895 Write_data_task::is_runnable(Workqueue*)
1896 {
1897 return IS_RUNNABLE;
1898 }
1899
1900 // We need to unlock FINAL_BLOCKER when finished.
1901
1902 Task_locker*
1903 Write_data_task::locks(Workqueue* workqueue)
1904 {
1905 return new Task_locker_block(*this->final_blocker_, workqueue);
1906 }
1907
1908 // Run the task--write out the data.
1909
1910 void
1911 Write_data_task::run(Workqueue*)
1912 {
1913 this->layout_->write_data(this->symtab_, this->of_);
1914 }
1915
1916 // Write_symbols_task methods.
1917
1918 // We can always run this task.
1919
1920 Task::Is_runnable_type
1921 Write_symbols_task::is_runnable(Workqueue*)
1922 {
1923 return IS_RUNNABLE;
1924 }
1925
1926 // We need to unlock FINAL_BLOCKER when finished.
1927
1928 Task_locker*
1929 Write_symbols_task::locks(Workqueue* workqueue)
1930 {
1931 return new Task_locker_block(*this->final_blocker_, workqueue);
1932 }
1933
1934 // Run the task--write out the symbols.
1935
1936 void
1937 Write_symbols_task::run(Workqueue*)
1938 {
1939 this->symtab_->write_globals(this->input_objects_, this->sympool_,
1940 this->dynpool_, this->of_);
1941 }
1942
1943 // Write_after_input_sections_task methods.
1944
1945 // We can only run this task after the input sections have completed.
1946
1947 Task::Is_runnable_type
1948 Write_after_input_sections_task::is_runnable(Workqueue*)
1949 {
1950 if (this->input_sections_blocker_->is_blocked())
1951 return IS_BLOCKED;
1952 return IS_RUNNABLE;
1953 }
1954
1955 // We need to unlock FINAL_BLOCKER when finished.
1956
1957 Task_locker*
1958 Write_after_input_sections_task::locks(Workqueue* workqueue)
1959 {
1960 return new Task_locker_block(*this->final_blocker_, workqueue);
1961 }
1962
1963 // Run the task.
1964
1965 void
1966 Write_after_input_sections_task::run(Workqueue*)
1967 {
1968 this->layout_->write_sections_after_input_sections(this->of_);
1969 }
1970
1971 // Close_task_runner methods.
1972
1973 // Run the task--close the file.
1974
1975 void
1976 Close_task_runner::run(Workqueue*)
1977 {
1978 this->of_->close();
1979 }
1980
1981 // Instantiate the templates we need. We could use the configure
1982 // script to restrict this to only the ones for implemented targets.
1983
1984 #ifdef HAVE_TARGET_32_LITTLE
1985 template
1986 Output_section*
1987 Layout::layout<32, false>(Sized_relobj<32, false>* object, unsigned int shndx,
1988 const char* name,
1989 const elfcpp::Shdr<32, false>& shdr,
1990 unsigned int, unsigned int, off_t*);
1991 #endif
1992
1993 #ifdef HAVE_TARGET_32_BIG
1994 template
1995 Output_section*
1996 Layout::layout<32, true>(Sized_relobj<32, true>* object, unsigned int shndx,
1997 const char* name,
1998 const elfcpp::Shdr<32, true>& shdr,
1999 unsigned int, unsigned int, off_t*);
2000 #endif
2001
2002 #ifdef HAVE_TARGET_64_LITTLE
2003 template
2004 Output_section*
2005 Layout::layout<64, false>(Sized_relobj<64, false>* object, unsigned int shndx,
2006 const char* name,
2007 const elfcpp::Shdr<64, false>& shdr,
2008 unsigned int, unsigned int, off_t*);
2009 #endif
2010
2011 #ifdef HAVE_TARGET_64_BIG
2012 template
2013 Output_section*
2014 Layout::layout<64, true>(Sized_relobj<64, true>* object, unsigned int shndx,
2015 const char* name,
2016 const elfcpp::Shdr<64, true>& shdr,
2017 unsigned int, unsigned int, off_t*);
2018 #endif
2019
2020 #ifdef HAVE_TARGET_32_LITTLE
2021 template
2022 Output_section*
2023 Layout::layout_eh_frame<32, false>(Sized_relobj<32, false>* object,
2024 const unsigned char* symbols,
2025 off_t symbols_size,
2026 const unsigned char* symbol_names,
2027 off_t symbol_names_size,
2028 unsigned int shndx,
2029 const elfcpp::Shdr<32, false>& shdr,
2030 unsigned int reloc_shndx,
2031 unsigned int reloc_type,
2032 off_t* off);
2033 #endif
2034
2035 #ifdef HAVE_TARGET_32_BIG
2036 template
2037 Output_section*
2038 Layout::layout_eh_frame<32, true>(Sized_relobj<32, true>* object,
2039 const unsigned char* symbols,
2040 off_t symbols_size,
2041 const unsigned char* symbol_names,
2042 off_t symbol_names_size,
2043 unsigned int shndx,
2044 const elfcpp::Shdr<32, true>& shdr,
2045 unsigned int reloc_shndx,
2046 unsigned int reloc_type,
2047 off_t* off);
2048 #endif
2049
2050 #ifdef HAVE_TARGET_64_LITTLE
2051 template
2052 Output_section*
2053 Layout::layout_eh_frame<64, false>(Sized_relobj<64, false>* object,
2054 const unsigned char* symbols,
2055 off_t symbols_size,
2056 const unsigned char* symbol_names,
2057 off_t symbol_names_size,
2058 unsigned int shndx,
2059 const elfcpp::Shdr<64, false>& shdr,
2060 unsigned int reloc_shndx,
2061 unsigned int reloc_type,
2062 off_t* off);
2063 #endif
2064
2065 #ifdef HAVE_TARGET_64_BIG
2066 template
2067 Output_section*
2068 Layout::layout_eh_frame<64, true>(Sized_relobj<64, true>* object,
2069 const unsigned char* symbols,
2070 off_t symbols_size,
2071 const unsigned char* symbol_names,
2072 off_t symbol_names_size,
2073 unsigned int shndx,
2074 const elfcpp::Shdr<64, true>& shdr,
2075 unsigned int reloc_shndx,
2076 unsigned int reloc_type,
2077 off_t* off);
2078 #endif
2079
2080 } // End namespace gold.