* target.h (Target::gc_mark_symbol, do_gc_mark_symbol): New functions.
[external/binutils.git] / gold / gold.cc
1 // gold.cc -- main linker functions
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 <cstdlib>
27 #include <cstdio>
28 #include <cstring>
29 #include <unistd.h>
30 #include <algorithm>
31 #include "libiberty.h"
32
33 #include "options.h"
34 #include "target-select.h"
35 #include "debug.h"
36 #include "workqueue.h"
37 #include "dirsearch.h"
38 #include "readsyms.h"
39 #include "symtab.h"
40 #include "common.h"
41 #include "object.h"
42 #include "layout.h"
43 #include "reloc.h"
44 #include "defstd.h"
45 #include "plugin.h"
46 #include "gc.h"
47 #include "icf.h"
48 #include "incremental.h"
49 #include "timer.h"
50
51 namespace gold
52 {
53
54 class Object;
55
56 const char* program_name;
57
58 static Task*
59 process_incremental_input(Incremental_binary*, unsigned int, Input_objects*,
60                           Symbol_table*, Layout*, Dirsearch*, Mapfile*,
61                           Task_token*, Task_token*);
62
63 void
64 gold_exit(Exit_status status)
65 {
66   if (parameters != NULL
67       && parameters->options_valid()
68       && parameters->options().has_plugins())
69     parameters->options().plugins()->cleanup();
70   if (status != GOLD_OK && parameters != NULL && parameters->options_valid())
71     unlink_if_ordinary(parameters->options().output_file_name());
72   exit(status);
73 }
74
75 void
76 gold_nomem()
77 {
78   // We are out of memory, so try hard to print a reasonable message.
79   // Note that we don't try to translate this message, since the
80   // translation process itself will require memory.
81
82   // LEN only exists to avoid a pointless warning when write is
83   // declared with warn_use_result, as when compiling with
84   // -D_USE_FORTIFY on GNU/Linux.  Casting to void does not appear to
85   // work, at least not with gcc 4.3.0.
86
87   ssize_t len = write(2, program_name, strlen(program_name));
88   if (len >= 0)
89     {
90       const char* const s = ": out of memory\n";
91       len = write(2, s, strlen(s));
92     }
93   gold_exit(GOLD_ERR);
94 }
95
96 // Handle an unreachable case.
97
98 void
99 do_gold_unreachable(const char* filename, int lineno, const char* function)
100 {
101   fprintf(stderr, _("%s: internal error in %s, at %s:%d\n"),
102           program_name, function, filename, lineno);
103   gold_exit(GOLD_ERR);
104 }
105
106 // This class arranges to run the functions done in the middle of the
107 // link.  It is just a closure.
108
109 class Middle_runner : public Task_function_runner
110 {
111  public:
112   Middle_runner(const General_options& options,
113                 const Input_objects* input_objects,
114                 Symbol_table* symtab,
115                 Layout* layout, Mapfile* mapfile)
116     : options_(options), input_objects_(input_objects), symtab_(symtab),
117       layout_(layout), mapfile_(mapfile)
118   { }
119
120   void
121   run(Workqueue*, const Task*);
122
123  private:
124   const General_options& options_;
125   const Input_objects* input_objects_;
126   Symbol_table* symtab_;
127   Layout* layout_;
128   Mapfile* mapfile_;
129 };
130
131 void
132 Middle_runner::run(Workqueue* workqueue, const Task* task)
133 {
134   queue_middle_tasks(this->options_, task, this->input_objects_, this->symtab_,
135                      this->layout_, workqueue, this->mapfile_);
136 }
137
138 // This class arranges the tasks to process the relocs for garbage collection.
139
140 class Gc_runner : public Task_function_runner
141 {
142   public:
143    Gc_runner(const General_options& options,
144              const Input_objects* input_objects,
145              Symbol_table* symtab,
146              Layout* layout, Mapfile* mapfile)
147     : options_(options), input_objects_(input_objects), symtab_(symtab),
148       layout_(layout), mapfile_(mapfile)
149    { }
150
151   void
152   run(Workqueue*, const Task*);
153
154  private:
155   const General_options& options_;
156   const Input_objects* input_objects_;
157   Symbol_table* symtab_;
158   Layout* layout_;
159   Mapfile* mapfile_;
160 };
161
162 void
163 Gc_runner::run(Workqueue* workqueue, const Task* task)
164 {
165   queue_middle_gc_tasks(this->options_, task, this->input_objects_,
166                         this->symtab_, this->layout_, workqueue,
167                         this->mapfile_);
168 }
169
170 // Queue up the initial set of tasks for this link job.
171
172 void
173 queue_initial_tasks(const General_options& options,
174                     Dirsearch& search_path,
175                     const Command_line& cmdline,
176                     Workqueue* workqueue, Input_objects* input_objects,
177                     Symbol_table* symtab, Layout* layout, Mapfile* mapfile)
178 {
179   if (cmdline.begin() == cmdline.end())
180     {
181       bool is_ok = false;
182       if (options.printed_version())
183         is_ok = true;
184       if (options.print_output_format())
185         {
186           print_output_format();
187           is_ok = true;
188         }
189       if (is_ok)
190         gold_exit(GOLD_OK);
191       gold_fatal(_("no input files"));
192     }
193
194   int thread_count = options.thread_count_initial();
195   if (thread_count == 0)
196     thread_count = cmdline.number_of_input_files();
197   workqueue->set_thread_count(thread_count);
198
199   // For incremental links, the base output file.
200   Incremental_binary* ibase = NULL;
201
202   if (parameters->incremental_update())
203     {
204       Output_file* of = new Output_file(options.output_file_name());
205       if (of->open_base_file(options.incremental_base(), true))
206         {
207           ibase = open_incremental_binary(of);
208           if (ibase != NULL
209               && ibase->check_inputs(cmdline, layout->incremental_inputs()))
210             ibase->init_layout(layout);
211           else
212             {
213               delete ibase;
214               ibase = NULL;
215               of->close();
216             }
217         }
218       if (ibase == NULL)
219         {
220           if (set_parameters_incremental_full())
221             gold_info(_("linking with --incremental-full"));
222           else
223             gold_fallback(_("restart link with --incremental-full"));
224         }
225     }
226
227   // Read the input files.  We have to add the symbols to the symbol
228   // table in order.  We do this by creating a separate blocker for
229   // each input file.  We associate the blocker with the following
230   // input file, to give us a convenient place to delete it.
231   Task_token* this_blocker = NULL;
232   if (ibase == NULL)
233     {
234       // Normal link.  Queue a Read_symbols task for each input file
235       // on the command line.
236       for (Command_line::const_iterator p = cmdline.begin();
237            p != cmdline.end();
238            ++p)
239         {
240           Task_token* next_blocker = new Task_token(true);
241           next_blocker->add_blocker();
242           workqueue->queue(new Read_symbols(input_objects, symtab, layout,
243                                             &search_path, 0, mapfile, &*p, NULL,
244                                             NULL, this_blocker, next_blocker));
245           this_blocker = next_blocker;
246         }
247     }
248   else
249     {
250       // Incremental update link.  Process the list of input files
251       // stored in the base file, and queue a task for each file:
252       // a Read_symbols task for a changed file, and an Add_symbols task
253       // for an unchanged file.  We need to mark all the space used by
254       // unchanged files before we can start any tasks running.
255       unsigned int input_file_count = ibase->input_file_count();
256       std::vector<Task*> tasks;
257       tasks.reserve(input_file_count);
258       for (unsigned int i = 0; i < input_file_count; ++i)
259         {
260           Task_token* next_blocker = new Task_token(true);
261           next_blocker->add_blocker();
262           Task* t = process_incremental_input(ibase, i, input_objects, symtab,
263                                               layout, &search_path, mapfile,
264                                               this_blocker, next_blocker);
265           tasks.push_back(t);
266           this_blocker = next_blocker;
267         }
268       // Now we can queue the tasks.
269       for (unsigned int i = 0; i < tasks.size(); i++)
270         workqueue->queue(tasks[i]);
271     }
272
273   if (options.has_plugins())
274     {
275       Task_token* next_blocker = new Task_token(true);
276       next_blocker->add_blocker();
277       workqueue->queue(new Plugin_hook(options, input_objects, symtab, layout,
278                                        &search_path, mapfile, this_blocker,
279                                        next_blocker));
280       this_blocker = next_blocker;
281     }
282
283   if (options.relocatable()
284       && (options.gc_sections() || options.icf_enabled()))
285     gold_error(_("cannot mix -r with --gc-sections or --icf"));
286
287   if (options.gc_sections() || options.icf_enabled())
288     {
289       workqueue->queue(new Task_function(new Gc_runner(options,
290                                                        input_objects,
291                                                        symtab,
292                                                        layout,
293                                                        mapfile),
294                                          this_blocker,
295                                          "Task_function Gc_runner"));
296     }
297   else
298     {
299       workqueue->queue(new Task_function(new Middle_runner(options,
300                                                            input_objects,
301                                                            symtab,
302                                                            layout,
303                                                            mapfile),
304                                          this_blocker,
305                                          "Task_function Middle_runner"));
306     }
307 }
308
309 // Process an incremental input file: if it is unchanged from the previous
310 // link, return a task to add its symbols from the base file's incremental
311 // info; if it has changed, return a normal Read_symbols task.  We create a
312 // task for every input file, if only to report the file for rebuilding the
313 // incremental info.
314
315 static Task*
316 process_incremental_input(Incremental_binary* ibase,
317                           unsigned int input_file_index,
318                           Input_objects* input_objects,
319                           Symbol_table* symtab,
320                           Layout* layout,
321                           Dirsearch* search_path,
322                           Mapfile* mapfile,
323                           Task_token* this_blocker,
324                           Task_token* next_blocker)
325 {
326   const Incremental_binary::Input_reader* input_reader =
327       ibase->get_input_reader(input_file_index);
328   Incremental_input_type input_type = input_reader->type();
329
330   // Get the input argument corresponding to this input file, matching on
331   // the argument serial number.  If the input file cannot be matched
332   // to an existing input argument, synthesize a new one.
333   const Input_argument* input_argument =
334       ibase->get_input_argument(input_file_index);
335   if (input_argument == NULL)
336     {
337       Input_file_argument file(input_reader->filename(),
338                                Input_file_argument::INPUT_FILE_TYPE_FILE,
339                                "", false, parameters->options());
340       Input_argument* arg = new Input_argument(file);
341       arg->set_script_info(ibase->get_script_info(input_file_index));
342       input_argument = arg;
343     }
344
345   gold_debug(DEBUG_INCREMENTAL, "Incremental object: %s, type %d",
346              input_reader->filename(), input_type);
347
348   if (input_type == INCREMENTAL_INPUT_SCRIPT)
349     {
350       // Incremental_binary::check_inputs should have cancelled the
351       // incremental update if the script has changed.
352       gold_assert(!ibase->file_has_changed(input_file_index));
353       return new Check_script(layout, ibase, input_file_index, input_reader,
354                               this_blocker, next_blocker);
355     }
356
357   if (input_type == INCREMENTAL_INPUT_ARCHIVE)
358     {
359       Incremental_library* lib = ibase->get_library(input_file_index);
360       gold_assert(lib != NULL);
361       if (lib->filename() == "/group/"
362           || !ibase->file_has_changed(input_file_index))
363         {
364           // Queue a task to check that no references have been added to any
365           // of the library's unused symbols.
366           return new Check_library(symtab, layout, ibase, input_file_index,
367                                    input_reader, this_blocker, next_blocker);
368         }
369       else
370         {
371           // Queue a Read_symbols task to process the archive normally.
372           return new Read_symbols(input_objects, symtab, layout, search_path,
373                                   0, mapfile, input_argument, NULL, NULL,
374                                   this_blocker, next_blocker);
375         }
376     }
377
378   if (input_type == INCREMENTAL_INPUT_ARCHIVE_MEMBER)
379     {
380       // For archive members, check the timestamp of the containing archive.
381       Incremental_library* lib = ibase->get_library(input_file_index);
382       gold_assert(lib != NULL);
383       // Process members of a --start-lib/--end-lib group as normal objects.
384       if (lib->filename() != "/group/")
385         {
386           if (ibase->file_has_changed(lib->input_file_index()))
387             {
388               return new Read_member(input_objects, symtab, layout, mapfile,
389                                      input_reader, this_blocker, next_blocker);
390             }
391           else
392             {
393               // The previous contributions from this file will be kept.
394               // Mark the pieces of output sections contributed by this
395               // object.
396               ibase->reserve_layout(input_file_index);
397               Object* obj = make_sized_incremental_object(ibase,
398                                                           input_file_index,
399                                                           input_type,
400                                                           input_reader);
401               return new Add_symbols(input_objects, symtab, layout,
402                                      search_path, 0, mapfile, input_argument,
403                                      obj, lib, NULL, this_blocker,
404                                      next_blocker);
405             }
406         }
407     }
408
409   // Normal object file or shared library.  Check if the file has changed
410   // since the last incremental link.
411   if (ibase->file_has_changed(input_file_index))
412     {
413       return new Read_symbols(input_objects, symtab, layout, search_path, 0,
414                               mapfile, input_argument, NULL, NULL,
415                               this_blocker, next_blocker);
416     }
417   else
418     {
419       // The previous contributions from this file will be kept.
420       // Mark the pieces of output sections contributed by this object.
421       ibase->reserve_layout(input_file_index);
422       Object* obj = make_sized_incremental_object(ibase,
423                                                   input_file_index,
424                                                   input_type,
425                                                   input_reader);
426       return new Add_symbols(input_objects, symtab, layout, search_path, 0,
427                              mapfile, input_argument, obj, NULL, NULL,
428                              this_blocker, next_blocker);
429     }
430 }
431
432 // Queue up a set of tasks to be done before queueing the middle set
433 // of tasks.  This is only necessary when garbage collection
434 // (--gc-sections) of unused sections is desired.  The relocs are read
435 // and processed here early to determine the garbage sections before the
436 // relocs can be scanned in later tasks.
437
438 void
439 queue_middle_gc_tasks(const General_options& options,
440                       const Task* ,
441                       const Input_objects* input_objects,
442                       Symbol_table* symtab,
443                       Layout* layout,
444                       Workqueue* workqueue,
445                       Mapfile* mapfile)
446 {
447   // Read_relocs for all the objects must be done and processed to find
448   // unused sections before any scanning of the relocs can take place.
449   Task_token* this_blocker = NULL;
450   for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
451        p != input_objects->relobj_end();
452        ++p)
453     {
454       Task_token* next_blocker = new Task_token(true);
455       next_blocker->add_blocker();
456       workqueue->queue(new Read_relocs(symtab, layout, *p, this_blocker,
457                                        next_blocker));
458       this_blocker = next_blocker;
459     }
460
461   // If we are given only archives in input, we have no regular
462   // objects and THIS_BLOCKER is NULL here.  Create a dummy
463   // blocker here so that we can run the middle tasks immediately.
464   if (this_blocker == NULL)
465     {
466       gold_assert(input_objects->number_of_relobjs() == 0);
467       this_blocker = new Task_token(true);
468     }
469
470   workqueue->queue(new Task_function(new Middle_runner(options,
471                                                        input_objects,
472                                                        symtab,
473                                                        layout,
474                                                        mapfile),
475                                      this_blocker,
476                                      "Task_function Middle_runner"));
477 }
478
479 // Queue up the middle set of tasks.  These are the tasks which run
480 // after all the input objects have been found and all the symbols
481 // have been read, but before we lay out the output file.
482
483 void
484 queue_middle_tasks(const General_options& options,
485                    const Task* task,
486                    const Input_objects* input_objects,
487                    Symbol_table* symtab,
488                    Layout* layout,
489                    Workqueue* workqueue,
490                    Mapfile* mapfile)
491 {
492   Timer* timer = parameters->timer();
493   if (timer != NULL)
494     timer->stamp(0);
495
496   // Add any symbols named with -u options to the symbol table.
497   symtab->add_undefined_symbols_from_command_line(layout);
498
499   // If garbage collection was chosen, relocs have been read and processed
500   // at this point by pre_middle_tasks.  Layout can then be done for all
501   // objects.
502   if (parameters->options().gc_sections())
503     {
504       // Find the start symbol if any.
505       Symbol* start_sym = symtab->lookup(parameters->entry());
506       if (start_sym != NULL)
507         symtab->gc_mark_symbol(start_sym);
508       // Symbols named with -u should not be considered garbage.
509       symtab->gc_mark_undef_symbols(layout);
510       gold_assert(symtab->gc() != NULL);
511       // Do a transitive closure on all references to determine the worklist.
512       symtab->gc()->do_transitive_closure();
513     }
514
515   // If identical code folding (--icf) is chosen it makes sense to do it
516   // only after garbage collection (--gc-sections) as we do not want to
517   // be folding sections that will be garbage.
518   if (parameters->options().icf_enabled())
519     {
520       symtab->icf()->find_identical_sections(input_objects, symtab);
521     }
522
523   // Call Object::layout for the second time to determine the
524   // output_sections for all referenced input sections.  When
525   // --gc-sections or --icf is turned on, or when certain input
526   // sections have to be mapped to unique segments, Object::layout
527   // is called twice.  It is called the first time when symbols
528   // are added.
529   if (parameters->options().gc_sections()
530       || parameters->options().icf_enabled()
531       || layout->is_unique_segment_for_sections_specified())
532     {
533       for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
534            p != input_objects->relobj_end();
535            ++p)
536         {
537           Task_lock_obj<Object> tlo(task, *p);
538           (*p)->layout(symtab, layout, NULL);
539         }
540     }
541
542   // Layout deferred objects due to plugins.
543   if (parameters->options().has_plugins())
544     {
545       Plugin_manager* plugins = parameters->options().plugins();
546       gold_assert(plugins != NULL);
547       plugins->layout_deferred_objects();
548     }
549
550   /* If plugins have specified a section order, re-arrange input sections
551      according to a specified section order.  If --section-ordering-file is
552      also specified, do not do anything here.  */
553   if (parameters->options().has_plugins()
554       && layout->is_section_ordering_specified()
555       && !parameters->options().section_ordering_file ())
556     {
557       for (Layout::Section_list::const_iterator p
558              = layout->section_list().begin();
559            p != layout->section_list().end();
560            ++p)
561         (*p)->update_section_layout(layout->get_section_order_map());
562     }
563
564   if (parameters->options().gc_sections()
565       || parameters->options().icf_enabled())
566     {
567       for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
568            p != input_objects->relobj_end();
569            ++p)
570         {
571           // Update the value of output_section stored in rd.
572           Read_relocs_data* rd = (*p)->get_relocs_data();
573           for (Read_relocs_data::Relocs_list::iterator q = rd->relocs.begin();
574                q != rd->relocs.end();
575                ++q)
576             {
577               q->output_section = (*p)->output_section(q->data_shndx);
578               q->needs_special_offset_handling =
579                       (*p)->is_output_section_offset_invalid(q->data_shndx);
580             }
581         }
582     }
583
584   // We have to support the case of not seeing any input objects, and
585   // generate an empty file.  Existing builds depend on being able to
586   // pass an empty archive to the linker and get an empty object file
587   // out.  In order to do this we need to use a default target.
588   if (input_objects->number_of_input_objects() == 0
589       && layout->incremental_base() == NULL)
590     parameters_force_valid_target();
591
592   int thread_count = options.thread_count_middle();
593   if (thread_count == 0)
594     thread_count = std::max(2, input_objects->number_of_input_objects());
595   workqueue->set_thread_count(thread_count);
596
597   // Now we have seen all the input files.
598   const bool doing_static_link =
599     (!input_objects->any_dynamic()
600      && !parameters->options().output_is_position_independent());
601   set_parameters_doing_static_link(doing_static_link);
602   if (!doing_static_link && options.is_static())
603     {
604       // We print out just the first .so we see; there may be others.
605       gold_assert(input_objects->dynobj_begin() != input_objects->dynobj_end());
606       gold_error(_("cannot mix -static with dynamic object %s"),
607                  (*input_objects->dynobj_begin())->name().c_str());
608     }
609   if (!doing_static_link && parameters->options().relocatable())
610     gold_fatal(_("cannot mix -r with dynamic object %s"),
611                (*input_objects->dynobj_begin())->name().c_str());
612   if (!doing_static_link
613       && options.oformat_enum() != General_options::OBJECT_FORMAT_ELF)
614     gold_fatal(_("cannot use non-ELF output format with dynamic object %s"),
615                (*input_objects->dynobj_begin())->name().c_str());
616
617   if (parameters->options().relocatable())
618     {
619       Input_objects::Relobj_iterator p = input_objects->relobj_begin();
620       if (p != input_objects->relobj_end())
621         {
622           bool uses_split_stack = (*p)->uses_split_stack();
623           for (++p; p != input_objects->relobj_end(); ++p)
624             {
625               if ((*p)->uses_split_stack() != uses_split_stack)
626                 gold_fatal(_("cannot mix split-stack '%s' and "
627                              "non-split-stack '%s' when using -r"),
628                            (*input_objects->relobj_begin())->name().c_str(),
629                            (*p)->name().c_str());
630             }
631         }
632     }
633
634   // For incremental updates, record the existing GOT and PLT entries,
635   // and the COPY relocations.
636   if (parameters->incremental_update())
637     {
638       Incremental_binary* ibase = layout->incremental_base();
639       ibase->process_got_plt(symtab, layout);
640       ibase->emit_copy_relocs(symtab);
641     }
642
643   if (is_debugging_enabled(DEBUG_SCRIPT))
644     layout->script_options()->print(stderr);
645
646   // For each dynamic object, record whether we've seen all the
647   // dynamic objects that it depends upon.
648   input_objects->check_dynamic_dependencies();
649
650   // See if any of the input definitions violate the One Definition Rule.
651   // TODO: if this is too slow, do this as a task, rather than inline.
652   symtab->detect_odr_violations(task, options.output_file_name());
653
654   // Do the --no-undefined-version check.
655   if (!parameters->options().undefined_version())
656     {
657       Script_options* so = layout->script_options();
658       so->version_script_info()->check_unmatched_names(symtab);
659     }
660
661   // Create any automatic note sections.
662   layout->create_notes();
663
664   // Create any output sections required by any linker script.
665   layout->create_script_sections();
666
667   // Define some sections and symbols needed for a dynamic link.  This
668   // handles some cases we want to see before we read the relocs.
669   layout->create_initial_dynamic_sections(symtab);
670
671   // Define symbols from any linker scripts.
672   layout->define_script_symbols(symtab);
673
674   // TODO(csilvers): figure out a more principled way to get the target
675   Target* target = const_cast<Target*>(&parameters->target());
676
677   // Attach sections to segments.
678   layout->attach_sections_to_segments(target);
679
680   if (!parameters->options().relocatable())
681     {
682       // Predefine standard symbols.
683       define_standard_symbols(symtab, layout);
684
685       // Define __start and __stop symbols for output sections where
686       // appropriate.
687       layout->define_section_symbols(symtab);
688
689       // Define target-specific symbols.
690       target->define_standard_symbols(symtab, layout);
691     }
692
693   // Make sure we have symbols for any required group signatures.
694   layout->define_group_signatures(symtab);
695
696   Task_token* this_blocker = NULL;
697
698   // Allocate common symbols.  We use a blocker to run this before the
699   // Scan_relocs tasks, because it writes to the symbol table just as
700   // they do.
701   if (parameters->options().define_common())
702     {
703       this_blocker = new Task_token(true);
704       this_blocker->add_blocker();
705       workqueue->queue(new Allocate_commons_task(symtab, layout, mapfile,
706                                                  this_blocker));
707     }
708
709   // If doing garbage collection, the relocations have already been read.
710   // Otherwise, read and scan the relocations.
711   if (parameters->options().gc_sections()
712       || parameters->options().icf_enabled())
713     {
714       for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
715            p != input_objects->relobj_end();
716            ++p)
717         {
718           Task_token* next_blocker = new Task_token(true);
719           next_blocker->add_blocker();
720           workqueue->queue(new Scan_relocs(symtab, layout, *p,
721                                            (*p)->get_relocs_data(),
722                                            this_blocker, next_blocker));
723           this_blocker = next_blocker;
724         }
725     }
726   else
727     {
728       // Read the relocations of the input files.  We do this to find
729       // which symbols are used by relocations which require a GOT and/or
730       // a PLT entry, or a COPY reloc.  When we implement garbage
731       // collection we will do it here by reading the relocations in a
732       // breadth first search by references.
733       //
734       // We could also read the relocations during the first pass, and
735       // mark symbols at that time.  That is how the old GNU linker works.
736       // Doing that is more complex, since we may later decide to discard
737       // some of the sections, and thus change our minds about the types
738       // of references made to the symbols.
739       for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
740            p != input_objects->relobj_end();
741            ++p)
742         {
743           Task_token* next_blocker = new Task_token(true);
744           next_blocker->add_blocker();
745           workqueue->queue(new Read_relocs(symtab, layout, *p, this_blocker,
746                                            next_blocker));
747           this_blocker = next_blocker;
748         }
749     }
750
751   if (this_blocker == NULL)
752     {
753       if (input_objects->number_of_relobjs() == 0)
754         {
755           // If we are given only archives in input, we have no regular
756           // objects and THIS_BLOCKER is NULL here.  Create a dummy
757           // blocker here so that we can run the layout task immediately.
758           this_blocker = new Task_token(true);
759         }
760       else
761         {
762           // If we failed to open any input files, it's possible for
763           // THIS_BLOCKER to be NULL here.  There's no real point in
764           // continuing if that happens.
765           gold_assert(parameters->errors()->error_count() > 0);
766           gold_exit(GOLD_ERR);
767         }
768     }
769
770   // When all those tasks are complete, we can start laying out the
771   // output file.
772   workqueue->queue(new Task_function(new Layout_task_runner(options,
773                                                             input_objects,
774                                                             symtab,
775                                                             target,
776                                                             layout,
777                                                             mapfile),
778                                      this_blocker,
779                                      "Task_function Layout_task_runner"));
780 }
781
782 // Queue up the final set of tasks.  This is called at the end of
783 // Layout_task.
784
785 void
786 queue_final_tasks(const General_options& options,
787                   const Input_objects* input_objects,
788                   const Symbol_table* symtab,
789                   Layout* layout,
790                   Workqueue* workqueue,
791                   Output_file* of)
792 {
793   Timer* timer = parameters->timer();
794   if (timer != NULL)
795     timer->stamp(1);
796
797   int thread_count = options.thread_count_final();
798   if (thread_count == 0)
799     thread_count = std::max(2, input_objects->number_of_input_objects());
800   workqueue->set_thread_count(thread_count);
801
802   bool any_postprocessing_sections = layout->any_postprocessing_sections();
803
804   // Use a blocker to wait until all the input sections have been
805   // written out.
806   Task_token* input_sections_blocker = NULL;
807   if (!any_postprocessing_sections)
808     {
809       input_sections_blocker = new Task_token(true);
810       input_sections_blocker->add_blockers(input_objects->number_of_relobjs());
811     }
812
813   // Use a blocker to block any objects which have to wait for the
814   // output sections to complete before they can apply relocations.
815   Task_token* output_sections_blocker = new Task_token(true);
816   output_sections_blocker->add_blocker();
817
818   // Use a blocker to block the final cleanup task.
819   Task_token* final_blocker = new Task_token(true);
820   // Write_symbols_task, Write_sections_task, Write_data_task,
821   // Relocate_tasks.
822   final_blocker->add_blockers(3);
823   final_blocker->add_blockers(input_objects->number_of_relobjs());
824   if (!any_postprocessing_sections)
825     final_blocker->add_blocker();
826
827   // Queue a task to write out the symbol table.
828   workqueue->queue(new Write_symbols_task(layout,
829                                           symtab,
830                                           input_objects,
831                                           layout->sympool(),
832                                           layout->dynpool(),
833                                           of,
834                                           final_blocker));
835
836   // Queue a task to write out the output sections.
837   workqueue->queue(new Write_sections_task(layout, of, output_sections_blocker,
838                                            final_blocker));
839
840   // Queue a task to write out everything else.
841   workqueue->queue(new Write_data_task(layout, symtab, of, final_blocker));
842
843   // Queue a task for each input object to relocate the sections and
844   // write out the local symbols.
845   for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
846        p != input_objects->relobj_end();
847        ++p)
848     workqueue->queue(new Relocate_task(symtab, layout, *p, of,
849                                        input_sections_blocker,
850                                        output_sections_blocker,
851                                        final_blocker));
852
853   // Queue a task to write out the output sections which depend on
854   // input sections.  If there are any sections which require
855   // postprocessing, then we need to do this last, since it may resize
856   // the output file.
857   if (!any_postprocessing_sections)
858     {
859       Task* t = new Write_after_input_sections_task(layout, of,
860                                                     input_sections_blocker,
861                                                     final_blocker);
862       workqueue->queue(t);
863     }
864   else
865     {
866       Task_token* new_final_blocker = new Task_token(true);
867       new_final_blocker->add_blocker();
868       Task* t = new Write_after_input_sections_task(layout, of,
869                                                     final_blocker,
870                                                     new_final_blocker);
871       workqueue->queue(t);
872       final_blocker = new_final_blocker;
873     }
874
875   // Queue a task to close the output file.  This will be blocked by
876   // FINAL_BLOCKER.
877   workqueue->queue(new Task_function(new Close_task_runner(&options, layout,
878                                                            of),
879                                      final_blocker,
880                                      "Task_function Close_task_runner"));
881 }
882
883 } // End namespace gold.