* readsyms.cc (Read_symbols::do_read_symbols): Use get_view rather
than read for file header. * archive.cc (Archive::include_member): Likewise.
This commit is contained in:
parent
6194aaaba7
commit
7ef7376804
3 changed files with 16 additions and 14 deletions
|
@ -1,3 +1,9 @@
|
|||
2008-04-23 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* readsyms.cc (Read_symbols::do_read_symbols): Use get_view rather
|
||||
than read for file header.
|
||||
* archive.cc (Archive::include_member): Likewise.
|
||||
|
||||
2008-04-23 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
* aclocal.m4: Regenerate.
|
||||
|
|
|
@ -464,9 +464,6 @@ Archive::include_member(Symbol_table* symtab, Layout* layout,
|
|||
memoff = 0;
|
||||
}
|
||||
|
||||
// Read enough of the file to pick up the entire ELF header.
|
||||
unsigned char ehdr_buf[elfcpp::Elf_sizes<64>::ehdr_size];
|
||||
|
||||
off_t filesize = input_file->file().filesize();
|
||||
int read_size = elfcpp::Elf_sizes<64>::ehdr_size;
|
||||
if (filesize - memoff < read_size)
|
||||
|
@ -479,14 +476,15 @@ Archive::include_member(Symbol_table* symtab, Layout* layout,
|
|||
return;
|
||||
}
|
||||
|
||||
input_file->file().read(memoff, read_size, ehdr_buf);
|
||||
const unsigned char* ehdr = input_file->file().get_view(memoff, 0, read_size,
|
||||
true, false);
|
||||
|
||||
static unsigned char elfmagic[4] =
|
||||
{
|
||||
elfcpp::ELFMAG0, elfcpp::ELFMAG1,
|
||||
elfcpp::ELFMAG2, elfcpp::ELFMAG3
|
||||
};
|
||||
if (memcmp(ehdr_buf, elfmagic, 4) != 0)
|
||||
if (memcmp(ehdr, elfmagic, 4) != 0)
|
||||
{
|
||||
gold_error(_("%s: member at %zu is not an ELF object"),
|
||||
this->name().c_str(), static_cast<size_t>(off));
|
||||
|
@ -495,8 +493,7 @@ Archive::include_member(Symbol_table* symtab, Layout* layout,
|
|||
|
||||
Object* obj = make_elf_object((std::string(this->input_file_->filename())
|
||||
+ "(" + n + ")"),
|
||||
input_file, memoff, ehdr_buf,
|
||||
read_size);
|
||||
input_file, memoff, ehdr, read_size);
|
||||
|
||||
if (input_objects->add_object(obj))
|
||||
{
|
||||
|
|
|
@ -152,13 +152,12 @@ Read_symbols::do_read_symbols(Workqueue* workqueue)
|
|||
return false;
|
||||
}
|
||||
|
||||
unsigned char ehdr_buf[elfcpp::Elf_sizes<64>::ehdr_size];
|
||||
|
||||
int read_size = elfcpp::Elf_sizes<64>::ehdr_size;
|
||||
if (filesize < read_size)
|
||||
read_size = filesize;
|
||||
|
||||
input_file->file().read(0, read_size, ehdr_buf);
|
||||
const unsigned char* ehdr = input_file->file().get_view(0, 0, read_size,
|
||||
true, false);
|
||||
|
||||
if (read_size >= 4)
|
||||
{
|
||||
|
@ -167,12 +166,12 @@ Read_symbols::do_read_symbols(Workqueue* workqueue)
|
|||
elfcpp::ELFMAG0, elfcpp::ELFMAG1,
|
||||
elfcpp::ELFMAG2, elfcpp::ELFMAG3
|
||||
};
|
||||
if (memcmp(ehdr_buf, elfmagic, 4) == 0)
|
||||
if (memcmp(ehdr, elfmagic, 4) == 0)
|
||||
{
|
||||
// This is an ELF object.
|
||||
|
||||
Object* obj = make_elf_object(input_file->filename(),
|
||||
input_file, 0, ehdr_buf, read_size);
|
||||
input_file, 0, ehdr, read_size);
|
||||
if (obj == NULL)
|
||||
return false;
|
||||
|
||||
|
@ -205,9 +204,9 @@ Read_symbols::do_read_symbols(Workqueue* workqueue)
|
|||
if (read_size >= Archive::sarmag)
|
||||
{
|
||||
bool is_thin_archive
|
||||
= memcmp(ehdr_buf, Archive::armagt, Archive::sarmag) == 0;
|
||||
= memcmp(ehdr, Archive::armagt, Archive::sarmag) == 0;
|
||||
if (is_thin_archive
|
||||
|| memcmp(ehdr_buf, Archive::armag, Archive::sarmag) == 0)
|
||||
|| memcmp(ehdr, Archive::armag, Archive::sarmag) == 0)
|
||||
{
|
||||
// This is an archive.
|
||||
Archive* arch = new Archive(this->input_argument_->file().name(),
|
||||
|
|
Loading…
Reference in a new issue