* readsyms.cc (Read_symbols::do_read_symbols): Use get_view rather
authorIan Lance Taylor <ian@airs.com>
Wed, 23 Apr 2008 17:29:04 +0000 (17:29 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 23 Apr 2008 17:29:04 +0000 (17:29 +0000)
than read for file header.
* archive.cc (Archive::include_member): Likewise.

gold/ChangeLog
gold/archive.cc
gold/readsyms.cc

index bd4b9d27102086853e2fbf3d4f26128bf06673a3..3c4cbda9b26f801de14ef93439454ce7db0c771b 100644 (file)
@@ -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.
index 25708ee4b6e0008974a066b4c506e260d7e0768a..be623b511d776038e4ba9e2dbda79285769afbbe 100644 (file)
@@ -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))
     {
index d0bf2644a4662c94fbbbd3c076d801db900a272c..18b91b42b79ed52b2b681e52100d18c6073be619 100644 (file)
@@ -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(),
This page took 0.042604 seconds and 4 git commands to generate.