* elf-bfd.h (struct elf_obj_tdata): Move find_line_info, local_stubs,
[binutils-gdb.git] / gold / gdb-index.cc
index 66669888487d1900b7a5be1a648fc1ef892392d4..d3c9d612c158a1528786b7acffb34d67eb04b13d 100644 (file)
@@ -864,11 +864,12 @@ Gdb_index_info_reader::read_pubnames_and_pubtypes(Dwarf_die* die)
                                             &pubnames_shndx);
   if (pubnames_offset != -1)
     {
-      if (this->gdb_index_->pubnames_read(pubnames_shndx, pubnames_offset))
+      if (this->gdb_index_->pubnames_read(this->object(), pubnames_shndx,
+                                          pubnames_offset))
        ret = true;
       else
        {
-         Dwarf_pubnames_table pubnames(false);
+         Dwarf_pubnames_table pubnames(this, false);
          if (!pubnames.read_section(this->object(), pubnames_shndx))
            return false;
          if (!pubnames.read_header(pubnames_offset))
@@ -890,11 +891,12 @@ Gdb_index_info_reader::read_pubnames_and_pubtypes(Dwarf_die* die)
                                             &pubtypes_shndx);
   if (pubtypes_offset != -1)
     {
-      if (this->gdb_index_->pubtypes_read(pubtypes_shndx, pubtypes_offset))
+      if (this->gdb_index_->pubtypes_read(this->object(),
+                                          pubtypes_shndx, pubtypes_offset))
        ret = true;
       else
        {
-         Dwarf_pubnames_table pubtypes(true);
+         Dwarf_pubnames_table pubtypes(this, true);
          if (!pubtypes.read_section(this->object(), pubtypes_shndx))
            return false;
          if (!pubtypes.read_header(pubtypes_offset))
@@ -961,8 +963,10 @@ Gdb_index::Gdb_index(Output_section* gdb_index_section)
     symtab_offset_(0),
     cu_pool_offset_(0),
     stringpool_offset_(0),
+    pubnames_object_(NULL),
     pubnames_shndx_(0),
     pubnames_offset_(0),
+    pubtypes_object_(NULL),
     pubtypes_shndx_(0),
     pubtypes_offset_(0)
 {
@@ -1034,10 +1038,12 @@ Gdb_index::add_symbol(int cu_index, const char* sym_name)
 // OFFSET in section SHNDX
 
 bool
-Gdb_index::pubnames_read(unsigned int shndx, off_t offset)
+Gdb_index::pubnames_read(const Relobj* object, unsigned int shndx, off_t offset)
 {
-  bool ret = (this->pubnames_shndx_ == shndx
+  bool ret = (this->pubnames_object_ == object
+              && this->pubnames_shndx_ == shndx
              && this->pubnames_offset_ == offset);
+  this->pubnames_object_ = object;
   this->pubnames_shndx_ = shndx;
   this->pubnames_offset_ = offset;
   return ret;
@@ -1047,10 +1053,12 @@ Gdb_index::pubnames_read(unsigned int shndx, off_t offset)
 // OFFSET in section SHNDX
 
 bool
-Gdb_index::pubtypes_read(unsigned int shndx, off_t offset)
+Gdb_index::pubtypes_read(const Relobj* object, unsigned int shndx, off_t offset)
 {
-  bool ret = (this->pubtypes_shndx_ == shndx
+  bool ret = (this->pubtypes_object_ == object
+              && this->pubtypes_shndx_ == shndx
              && this->pubtypes_offset_ == offset);
+  this->pubtypes_object_ = object;
   this->pubtypes_shndx_ = shndx;
   this->pubtypes_offset_ = offset;
   return ret;