1 // readsyms.h -- read input file symbols for gold -*- C++ -*-
3 #ifndef GOLD_READSYMS_H
4 #define GOLD_READSYMS_H
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
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
, Layout
* layout
, 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 layout_(layout
), dirpath_(dirpath
), input_(input
),
37 this_blocker_(this_blocker
), next_blocker_(next_blocker
)
42 // The standard Task methods.
45 is_runnable(Workqueue
*);
54 const General_options
& options_
;
55 Input_objects
* input_objects_
;
56 Symbol_table
* symtab_
;
58 const Dirsearch
& dirpath_
;
59 const Input_argument
& input_
;
60 Task_token
* this_blocker_
;
61 Task_token
* next_blocker_
;
64 // This Task handles adding the symbols to the symbol table. These
65 // tasks must be run in the same order as the arguments appear on the
68 class Add_symbols
: public Task
71 // THIS_BLOCKER is used to prevent this task from running before the
72 // one for the previous input file. NEXT_BLOCKER is used to prevent
73 // the next task from running.
74 Add_symbols(Symbol_table
* symtab
, Layout
* layout
, Object
* object
,
75 Read_symbols_data
* sd
, Task_token
* this_blocker
,
76 Task_token
* next_blocker
)
77 : symtab_(symtab
), layout_(layout
), object_(object
), sd_(sd
),
78 this_blocker_(this_blocker
), next_blocker_(next_blocker
)
83 // The standard Task methods.
86 is_runnable(Workqueue
*);
95 class Add_symbols_locker
;
97 Symbol_table
* symtab_
;
100 Read_symbols_data
* sd_
;
101 Task_token
* this_blocker_
;
102 Task_token
* next_blocker_
;
105 } // end namespace gold
107 #endif // !defined(GOLD_READSYMS_H)