From Craig Silverstein: don't get confused if the same file name
occurs in an archive.
This commit is contained in:
parent
4e9d858638
commit
cec9d2f362
2 changed files with 14 additions and 6 deletions
|
@ -40,7 +40,15 @@ Output_merge_base::Merge_key_less::operator()(const Merge_key& mk1,
|
|||
// matter. We want to get consistent results across links so we
|
||||
// don't use pointer comparison.
|
||||
if (mk1.object != mk2.object)
|
||||
return mk1.object->name() < mk2.object->name();
|
||||
{
|
||||
// Two different object files can have the same name: if foo.a
|
||||
// includes both bar/qux.o and baz/qux.o, then both end up with
|
||||
// the name foo.a(qux.o). But it's impossible for two different
|
||||
// object files to have both the same name and the same offset.
|
||||
if (mk1.object->offset() != mk2.object->offset())
|
||||
return mk1.object->offset() < mk2.object->offset();
|
||||
return mk1.object->name() < mk2.object->name();
|
||||
}
|
||||
if (mk1.shndx != mk2.shndx)
|
||||
return mk1.shndx < mk2.shndx;
|
||||
return mk1.offset < mk2.offset;
|
||||
|
|
|
@ -130,6 +130,11 @@ class Object
|
|||
name() const
|
||||
{ return this->name_; }
|
||||
|
||||
// Get the offset into the file.
|
||||
off_t
|
||||
offset() const
|
||||
{ return this->offset_; }
|
||||
|
||||
// Return whether this is a dynamic object.
|
||||
bool
|
||||
is_dynamic() const
|
||||
|
@ -277,11 +282,6 @@ class Object
|
|||
input_file() const
|
||||
{ return this->input_file_; }
|
||||
|
||||
// Get the offset into the file.
|
||||
off_t
|
||||
offset() const
|
||||
{ return this->offset_; }
|
||||
|
||||
// Get a view into the underlying file.
|
||||
const unsigned char*
|
||||
get_view(off_t start, off_t size, bool cache)
|
||||
|
|
Loading…
Reference in a new issue