[AArch64][PATCH 12/14] Support FP16 Adv.SIMD Scalar Pairwise instructions.
[deliverable/binutils-gdb.git] / gold / binary.cc
index f14df0dedf0e43c68dc4f24fe0d7cb8af39964e9..12ca296eb90670da8eb16cb9e85d9ca1cac3fe1e 100644 (file)
@@ -1,6 +1,6 @@
 // binary.cc -- binary input files for gold
 
-// Copyright 2008 Free Software Foundation, Inc.
+// Copyright (C) 2008-2015 Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of gold.
@@ -132,7 +132,11 @@ Binary_to_elf::sized_convert(const Task* task)
     }
 
   section_size_type filesize = convert_to_section_size_type(f.filesize());
-  const unsigned char* fileview = f.get_view(0, 0, filesize, false, false);
+  const unsigned char* fileview;
+  if (filesize == 0)
+    fileview = NULL;
+  else
+    fileview = f.get_view(0, 0, filesize, false, false);
 
   unsigned int align;
   if (size == 32)
@@ -223,17 +227,20 @@ Binary_to_elf::sized_convert(const Task* task)
                                               shstrtab.get_strtab_size(),
                                               0, 0, 1, 0, &pout);
 
-  memcpy(pout, fileview, filesize);
-  pout += filesize;
-  memset(pout, 0, aligned_filesize - filesize);
-  pout += aligned_filesize - filesize;
-
-  this->write_symbol<size, big_endian>("", &strtab, 0, 0, &pout);
-  this->write_symbol<size, big_endian>(start_symbol_name, &strtab, 0, 1,
-                                      &pout);
-  this->write_symbol<size, big_endian>(end_symbol_name, &strtab, filesize, 1,
-                                      &pout);
-  this->write_symbol<size, big_endian>(size_symbol_name, &strtab, filesize,
+  if (filesize > 0)
+    {
+      memcpy(pout, fileview, filesize);
+      pout += filesize;
+      memset(pout, 0, aligned_filesize - filesize);
+      pout += aligned_filesize - filesize;
+    }
+
+  this->write_symbol<size, big_endian>("", &strtab, 0, 0, 0, &pout);
+  this->write_symbol<size, big_endian>(start_symbol_name, &strtab, 0, filesize,
+                                      1, &pout);
+  this->write_symbol<size, big_endian>(end_symbol_name, &strtab, filesize, 0,
+                                      1, &pout);
+  this->write_symbol<size, big_endian>(size_symbol_name, &strtab, filesize, 0,
                                       elfcpp::SHN_ABS, &pout);
 
   strtab.write_to_buffer(pout, strtab.get_strtab_size());
@@ -336,6 +343,7 @@ Binary_to_elf::write_symbol(
     const std::string& name,
     const Stringpool* strtab,
     section_size_type value,
+    typename elfcpp::Elf_types<32>::Elf_WXword st_size,
     unsigned int shndx,
     unsigned char** ppout)
 {
@@ -344,7 +352,7 @@ Binary_to_elf::write_symbol(
   elfcpp::Sym_write<size, big_endian> osym(pout);
   osym.put_st_name(name.empty() ? 0 : strtab->get_offset(name.c_str()));
   osym.put_st_value(value);
-  osym.put_st_size(0);
+  osym.put_st_size(st_size);
   osym.put_st_info(name.empty() ? elfcpp::STB_LOCAL : elfcpp::STB_GLOBAL,
                   elfcpp::STT_NOTYPE);
   osym.put_st_other(elfcpp::STV_DEFAULT, 0);
This page took 0.023935 seconds and 4 git commands to generate.