Even when stripping all symbols, we need to write out the dynamic
authorIan Lance Taylor <iant@google.com>
Thu, 7 Feb 2008 04:35:41 +0000 (04:35 +0000)
committerIan Lance Taylor <iant@google.com>
Thu, 7 Feb 2008 04:35:41 +0000 (04:35 +0000)
symbol table.

gold/gold.cc
gold/symtab.cc

index 4b52b570abca32b9889d41f966f95012ad271931..f067557cb249b2254ecbd34db2a6c33f5ef09dd2 100644 (file)
@@ -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();
index 85761fd2425d33256aae015bc655b105b13133b8..54ead069300431eeef743bf305e6c97c7809a022 100644 (file)
@@ -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);