Finished layout code.
[binutils.git] / gold / readsyms.h
blob46d73c887326ca131c9fd017752568194ce9ab78
1 // readsyms.h -- read input file symbols for gold -*- C++ -*-
3 #ifndef GOLD_READSYMS_H
4 #define GOLD_READSYMS_H
6 #include "workqueue.h"
7 #include "object.h"
9 namespace gold
12 class Input_objects;
13 class Symbol_table;
15 // This Task is responsible for reading the symbols from an input
16 // file. This also includes reading the relocations so that we can
17 // check for any that require a PLT and/or a GOT. After the data has
18 // been read, this queues up another task to actually add the symbols
19 // to the symbol table. The tasks are separated because the file
20 // reading can occur in parallel but adding the symbols must be done
21 // in the order of the input files.
23 class Read_symbols : public Task
25 public:
26 // DIRPATH is the list of directories to search for libraries.
27 // INPUT is the file to read. THIS_BLOCKER is used to prevent the
28 // associated Add_symbols task from running before the previous one
29 // has completed; it will be NULL for the first task. NEXT_BLOCKER
30 // is used to block the next input file from adding symbols.
31 Read_symbols(const General_options& options, Input_objects* input_objects,
32 Symbol_table* symtab, const Dirsearch& dirpath,
33 const Input_argument& input,
34 Task_token* this_blocker, Task_token* next_blocker)
35 : options_(options), input_objects_(input_objects), symtab_(symtab),
36 dirpath_(dirpath), input_(input), this_blocker_(this_blocker),
37 next_blocker_(next_blocker)
38 { }
40 ~Read_symbols();
42 // The standard Task methods.
44 Is_runnable_type
45 is_runnable(Workqueue*);
47 Task_locker*
48 locks(Workqueue*);
50 void
51 run(Workqueue*);
53 private:
54 const General_options& options_;
55 Input_objects* input_objects_;
56 Symbol_table* symtab_;
57 const Dirsearch& dirpath_;
58 const Input_argument& input_;
59 Task_token* this_blocker_;
60 Task_token* next_blocker_;
63 // This Task handles adding the symbols to the symbol table. These
64 // tasks must be run in the same order as the arguments appear on the
65 // command line.
67 class Add_symbols : public Task
69 public:
70 // THIS_BLOCKER is used to prevent this task from running before the
71 // one for the previous input file. NEXT_BLOCKER is used to prevent
72 // the next task from running.
73 Add_symbols(Symbol_table* symtab, Object* object, Read_symbols_data sd,
74 Task_token* this_blocker, Task_token* next_blocker)
75 : symtab_(symtab), object_(object), sd_(sd), this_blocker_(this_blocker),
76 next_blocker_(next_blocker)
77 { }
79 ~Add_symbols();
81 // The standard Task methods.
83 Is_runnable_type
84 is_runnable(Workqueue*);
86 Task_locker*
87 locks(Workqueue*);
89 void
90 run(Workqueue*);
92 private:
93 class Add_symbols_locker;
95 Symbol_table* symtab_;
96 Object* object_;
97 Read_symbols_data sd_;
98 Task_token* this_blocker_;
99 Task_token* next_blocker_;
102 } // end namespace gold
104 #endif // !defined(GOLD_READSYMS_H)