* gas/elf/elf.exp (groupautob): Don't run on xtensa.
[deliverable/binutils-gdb.git] / gold / archive.cc
index 8c34d5524b5814d9e86326fbb076ff70539926f4..541a49456a51a672fef7a2df0db95930b3ee5976 100644 (file)
@@ -566,7 +566,7 @@ Archive::get_elf_object_for_member(off_t off, bool* punconfigured)
       return NULL;
     }
 
-  Object *obj = make_elf_object((std::string(this->input_file_->filename())
+  Objectobj = make_elf_object((std::string(this->input_file_->filename())
                                 + "(" + member_name + ")"),
                                input_file, memoff, ehdr, read_size,
                                punconfigured);
@@ -844,9 +844,9 @@ Archive::include_member(Symbol_table* symtab, Layout* layout,
   std::map<off_t, Archive_member>::const_iterator p = this->members_.find(off);
   if (p != this->members_.end())
     {
-      Object *obj = p->second.obj_;
+      Objectobj = p->second.obj_;
 
-      Read_symbols_data *sd = p->second.sd_;
+      Read_symbols_datasd = p->second.sd_;
       if (mapfile != NULL)
         mapfile->report_include_archive_member(obj->name(), sym, why);
       if (input_objects->add_object(obj))
@@ -1031,7 +1031,7 @@ Lib_group::add_symbols(Symbol_table* symtab, Layout* layout,
       while (i < this->members_.size())
        {
          const Archive_member& member = this->members_[i];
-         Object *obj = member.obj_;
+         Objectobj = member.obj_;
          std::string why;
 
           // Skip files with no symbols. Plugin objects have
@@ -1057,7 +1057,14 @@ Lib_group::add_symbols(Symbol_table* symtab, Layout* layout,
           else
             {
               if (member.sd_ != NULL)
-                delete member.sd_;
+               {
+                 // The file must be locked in order to destroy the views
+                 // associated with it.
+                 gold_assert(obj != NULL);
+                 obj->lock(this->task_);
+                 delete member.sd_;
+                 obj->unlock(this->task_);
+               }
             }
 
          this->members_[i] = this->members_.back();
@@ -1096,10 +1103,10 @@ Lib_group::include_member(Symbol_table* symtab, Layout* layout,
        layout->incremental_inputs()->report_object(obj, NULL);
       obj->layout(symtab, layout, sd);
       obj->add_symbols(symtab, sd, layout);
-      // Unlock the file for the next task.
-      obj->unlock(this->task_);
     }
   delete sd;
+  // Unlock the file for the next task.
+  obj->unlock(this->task_);
 }
 
 // Print statistical information to stderr.  This is used for --stats.
@@ -1118,6 +1125,8 @@ Lib_group::print_stats()
 Task_token*
 Add_lib_group_symbols::is_runnable()
 {
+  if (this->readsyms_blocker_ != NULL && this->readsyms_blocker_->is_blocked())
+    return this->readsyms_blocker_;
   if (this->this_blocker_ != NULL && this->this_blocker_->is_blocked())
     return this->this_blocker_;
   return NULL;
This page took 0.023711 seconds and 4 git commands to generate.