2012-09-10 Sterling Augustine <saugustine@google.com>

* gdb-index.cc (Gdb_index::pubnames_read): New parameter.
	(Gdb_index::pubtypes_read): New parameter.
	(Gdb_index_info_reader::read_pubnames_and_pubtypes): Add parameters
	to calls.
	* gdb-index.h (Gdb_index): New fields pubnames_object_ and
	pubtypes_object_.
This commit is contained in:
Sterling Augustine 2012-09-10 19:16:33 +00:00
parent 09be558e10
commit c891b3f924
3 changed files with 33 additions and 14 deletions

View File

@ -1,3 +1,12 @@
2012-09-10 Sterling Augustine <saugustine@google.com>
* gdb-index.cc (Gdb_index::pubnames_read): New parameter.
(Gdb_index::pubtypes_read): New parameter.
(Gdb_index_info_reader::read_pubnames_and_pubtypes): Add parameters
to calls.
* gdb-index.h (Gdb_index): New fields pubnames_object_ and
pubtypes_object_.
2012-09-09 Alan Modra <amodra@gmail.com> 2012-09-09 Alan Modra <amodra@gmail.com>
* target.h (Target::gc_mark_symbol, do_gc_mark_symbol): New functions. * target.h (Target::gc_mark_symbol, do_gc_mark_symbol): New functions.

View File

@ -864,7 +864,8 @@ Gdb_index_info_reader::read_pubnames_and_pubtypes(Dwarf_die* die)
&pubnames_shndx); &pubnames_shndx);
if (pubnames_offset != -1) 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; ret = true;
else else
{ {
@ -890,7 +891,8 @@ Gdb_index_info_reader::read_pubnames_and_pubtypes(Dwarf_die* die)
&pubtypes_shndx); &pubtypes_shndx);
if (pubtypes_offset != -1) 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; ret = true;
else else
{ {
@ -961,8 +963,10 @@ Gdb_index::Gdb_index(Output_section* gdb_index_section)
symtab_offset_(0), symtab_offset_(0),
cu_pool_offset_(0), cu_pool_offset_(0),
stringpool_offset_(0), stringpool_offset_(0),
pubnames_object_(NULL),
pubnames_shndx_(0), pubnames_shndx_(0),
pubnames_offset_(0), pubnames_offset_(0),
pubtypes_object_(NULL),
pubtypes_shndx_(0), pubtypes_shndx_(0),
pubtypes_offset_(0) pubtypes_offset_(0)
{ {
@ -1034,10 +1038,12 @@ Gdb_index::add_symbol(int cu_index, const char* sym_name)
// OFFSET in section SHNDX // OFFSET in section SHNDX
bool 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_offset_ == offset);
this->pubnames_object_ = object;
this->pubnames_shndx_ = shndx; this->pubnames_shndx_ = shndx;
this->pubnames_offset_ = offset; this->pubnames_offset_ = offset;
return ret; return ret;
@ -1047,10 +1053,12 @@ Gdb_index::pubnames_read(unsigned int shndx, off_t offset)
// OFFSET in section SHNDX // OFFSET in section SHNDX
bool 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_offset_ == offset);
this->pubtypes_object_ = object;
this->pubtypes_shndx_ = shndx; this->pubtypes_shndx_ = shndx;
this->pubtypes_offset_ = offset; this->pubtypes_offset_ = offset;
return ret; return ret;

View File

@ -91,15 +91,15 @@ class Gdb_index : public Output_section_data
void void
add_symbol(int cu_index, const char* sym_name); add_symbol(int cu_index, const char* sym_name);
// Return TRUE if we have already processed the pubnames set at // Return TRUE if we have already processed the pubnames set for
// OFFSET in section SHNDX // OBJECT at OFFSET in section SHNDX
bool bool
pubnames_read(unsigned int shndx, off_t offset); pubnames_read(const Relobj* object, unsigned int shndx, off_t offset);
// Return TRUE if we have already processed the pubtypes set at // Return TRUE if we have already processed the pubtypes set for
// OFFSET in section SHNDX // OBJECT at OFFSET in section SHNDX
bool bool
pubtypes_read(unsigned int shndx, off_t offset); pubtypes_read(const Relobj* object, unsigned int shndx, off_t offset);
// Print usage statistics. // Print usage statistics.
static void static void
@ -200,10 +200,12 @@ class Gdb_index : public Output_section_data
off_t symtab_offset_; off_t symtab_offset_;
off_t cu_pool_offset_; off_t cu_pool_offset_;
off_t stringpool_offset_; off_t stringpool_offset_;
// Section index and offset of last read pubnames section. // Object, section index and offset of last read pubnames section.
const Relobj* pubnames_object_;
unsigned int pubnames_shndx_; unsigned int pubnames_shndx_;
off_t pubnames_offset_; off_t pubnames_offset_;
// Section index and offset of last read pubtypes section. // Object, section index and offset of last read pubtypes section.
const Relobj* pubtypes_object_;
unsigned int pubtypes_shndx_; unsigned int pubtypes_shndx_;
off_t pubtypes_offset_; off_t pubtypes_offset_;
}; };