aboutsummaryrefslogtreecommitdiff
path: root/gold/readsyms.h
diff options
context:
space:
mode:
authorRafael Ávila de Espíndola <respindola@mozilla.com>2010-03-22 14:18:24 +0000
committerRafael Ávila de Espíndola <respindola@mozilla.com>2010-03-22 14:18:24 +0000
commitb0193076dad64abdb42ed0057ad668eaf3c17c7a (patch)
tree52ff18d9073b353700e411c07b9cf8ad4f7c50f5 /gold/readsyms.h
parentcff8d58ab4a99c8fdcc1572227f9957064b1aaa0 (diff)
downloadbinutils-b0193076dad64abdb42ed0057ad668eaf3c17c7a.zip
binutils-b0193076dad64abdb42ed0057ad668eaf3c17c7a.tar.gz
binutils-b0193076dad64abdb42ed0057ad668eaf3c17c7a.tar.bz2
2010-03-22 Rafael Espindola <espindola@google.com>
* archive.cc (Should_include): Move to archive.h. (should_include_member): Make it a member of Archive. (Lib_group): New. (Add_lib_group_symbols): New. * archive.h: Include options.h. (Archive_member): Moved from Archive. (Should_include): Moved from archive.cc. (Lib_group): New. (Add_lib_group_symbols): New. * dynobj.cc (do_should_include_member): New. * dynobj.h (do_should_include_member): New. * gold.cc (queue_initial_tasks): Update call to queue. * main.cc (main): Print lib group stats. * object.cc (do_should_include_member): New. * object.h: Include archive.h. (Object::should_include_member): New. (Object::do_should_include_member): New. (Sized_relobj::do_should_include_member): New. * options.cc (General_options::parse_start_lib): New. (General_options::parse_end_lib): New. (Input_arguments::add_file): Handle lib groups. (Input_arguments::start_group): Check we are not in a lib. (Input_arguments::start_lib): New. (Input_arguments::end_lib): New. * options.h (General_options): Add start_lib and end_lib. (Input_argument::lib_): New. (Input_argument::lib): New. (Input_argument::is_lib): New. (Input_file_lib): New. (Input_arguments::in_lib_): New. (Input_arguments::in_lib): New. (Input_arguments::start_lib): New. (Input_arguments::end_lib_): New. * plugin.cc (Pluginobj::get_symbol_resolution_info): Mark symbols in unused members as preempted. (Sized_pluginobj::do_should_include_member): New. * plugin.h (Sized_pluginobj::do_should_include_member): New. * readsyms.cc (Read_symbols::locks): If we are just reading a member, return the blocker. (Read_symbols::do_whole_lib_group): New. (Read_symbols::do_lib_group): New. (Read_symbols::do_read_symbols): Handle lib groups. (Read_symbols::get_name): Handle lib groups. * readsyms.h (Read_symbols): Add an archive member pointer. (Read_symbols::do_whole_lib_group): New. (Read_symbols::do_lib_group): New. (Read_symbols::member_): New. * script.cc (read_input_script): Update call to queue_soon.
Diffstat (limited to 'gold/readsyms.h')
-rw-r--r--gold/readsyms.h16
1 files changed, 13 insertions, 3 deletions
diff --git a/gold/readsyms.h b/gold/readsyms.h
index 4956a82..bc4f38f 100644
--- a/gold/readsyms.h
+++ b/gold/readsyms.h
@@ -58,12 +58,13 @@ class Read_symbols : public Task
Read_symbols(Input_objects* input_objects, Symbol_table* symtab,
Layout* layout, Dirsearch* dirpath, int dirindex,
Mapfile* mapfile, const Input_argument* input_argument,
- Input_group* input_group, Task_token* this_blocker,
- Task_token* next_blocker)
+ Input_group* input_group, Archive_member* member,
+ Task_token* this_blocker, Task_token* next_blocker)
: input_objects_(input_objects), symtab_(symtab), layout_(layout),
dirpath_(dirpath), dirindex_(dirindex), mapfile_(mapfile),
input_argument_(input_argument), input_group_(input_group),
- this_blocker_(this_blocker), next_blocker_(next_blocker)
+ member_(member), this_blocker_(this_blocker),
+ next_blocker_(next_blocker)
{ }
~Read_symbols();
@@ -99,6 +100,14 @@ class Read_symbols : public Task
void
do_group(Workqueue*);
+ // Handle --start-lib ... --end-lib
+ bool
+ do_lib_group(Workqueue*);
+
+ // Handle --whole-archive --start-lib ... --end-lib --no-whole-archive
+ bool
+ do_whole_lib_group(Workqueue*);
+
// Open and identify the file.
bool
do_read_symbols(Workqueue*);
@@ -111,6 +120,7 @@ class Read_symbols : public Task
Mapfile* mapfile_;
const Input_argument* input_argument_;
Input_group* input_group_;
+ Archive_member* member_;
Task_token* this_blocker_;
Task_token* next_blocker_;
};