aboutsummaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2008-02-07 04:35:41 +0000
committerIan Lance Taylor <iant@google.com>2008-02-07 04:35:41 +0000
commit5fe2a0f55b19713f5cfb423687ce51291c62d8d8 (patch)
treed869434a9e4785e9de6b537dd5920c84255d5242 /gold
parent88dd47ac00ee5a932bca9abbd2245c429dfd8f5b (diff)
downloadgdb-5fe2a0f55b19713f5cfb423687ce51291c62d8d8.zip
gdb-5fe2a0f55b19713f5cfb423687ce51291c62d8d8.tar.gz
gdb-5fe2a0f55b19713f5cfb423687ce51291c62d8d8.tar.bz2
Even when stripping all symbols, we need to write out the dynamic
symbol table.
Diffstat (limited to 'gold')
-rw-r--r--gold/gold.cc17
-rw-r--r--gold/symtab.cc8
2 files changed, 13 insertions, 12 deletions
diff --git a/gold/gold.cc b/gold/gold.cc
index 4b52b57..f067557 100644
--- a/gold/gold.cc
+++ b/gold/gold.cc
@@ -307,16 +307,13 @@ queue_final_tasks(const General_options& options,
Task_token* final_blocker = new Task_token(true);
// Queue a task to write out the symbol table.
- if (!options.strip_all())
- {
- final_blocker->add_blocker();
- workqueue->queue(new Write_symbols_task(symtab,
- input_objects,
- layout->sympool(),
- layout->dynpool(),
- of,
- final_blocker));
- }
+ final_blocker->add_blocker();
+ workqueue->queue(new Write_symbols_task(symtab,
+ input_objects,
+ layout->sympool(),
+ layout->dynpool(),
+ of,
+ final_blocker));
// Queue a task to write out the output sections.
output_sections_blocker->add_blocker();
diff --git a/gold/symtab.cc b/gold/symtab.cc
index 85761fd..54ead06 100644
--- a/gold/symtab.cc
+++ b/gold/symtab.cc
@@ -1827,14 +1827,18 @@ Symbol_table::sized_write_globals(const Input_objects* input_objects,
const unsigned int output_count = this->output_count_;
const section_size_type oview_size = output_count * sym_size;
const unsigned int first_global_index = this->first_global_index_;
- unsigned char* const psyms = of->get_output_view(this->offset_, oview_size);
+ unsigned char* psyms;
+ if (this->offset_ == 0 || output_count == 0)
+ psyms = NULL;
+ else
+ psyms = of->get_output_view(this->offset_, oview_size);
const unsigned int dynamic_count = this->dynamic_count_;
const section_size_type dynamic_size = dynamic_count * sym_size;
const unsigned int first_dynamic_global_index =
this->first_dynamic_global_index_;
unsigned char* dynamic_view;
- if (this->dynamic_offset_ == 0)
+ if (this->dynamic_offset_ == 0 || dynamic_count == 0)
dynamic_view = NULL;
else
dynamic_view = of->get_output_view(this->dynamic_offset_, dynamic_size);