aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2014-11-25 14:33:51 -0800
committerCary Coutant <ccoutant@google.com>2014-11-25 14:33:51 -0800
commit43b64debe3577c6923ca9f16ec91451bb47f5f65 (patch)
tree0c80e597d31b882f7efe1f96cc6760553ac50187
parentc924eb67e143722e4098d84c1cb91123a51c988f (diff)
downloadgdb-43b64debe3577c6923ca9f16ec91451bb47f5f65.zip
gdb-43b64debe3577c6923ca9f16ec91451bb47f5f65.tar.gz
gdb-43b64debe3577c6923ca9f16ec91451bb47f5f65.tar.bz2
Add file size to ELF symbol labelling start of a binary file.
gold/ * binary.cc (Binary_to_elf::sized_convert): Add size to _start symbol. (Binary_to_elf::write_symbol): Add st_size parameter. * binary.h (Binary_to_elf::write_symbol): Add st_size parameter.
-rw-r--r--gold/ChangeLog6
-rw-r--r--gold/binary.cc15
-rw-r--r--gold/binary.h3
3 files changed, 16 insertions, 8 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index a447b42..9f3f529 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,11 @@
2014-11-25 Cary Coutant <ccoutant@google.com>
+ * binary.cc (Binary_to_elf::sized_convert): Add size to _start symbol.
+ (Binary_to_elf::write_symbol): Add st_size parameter.
+ * binary.h (Binary_to_elf::write_symbol): Add st_size parameter.
+
+2014-11-25 Cary Coutant <ccoutant@google.com>
+
PR gold/17639
* object.cc (Sized_relobj_file): Initialize is_deferred_layout_.
(Sized_relobj_file::do_layout): Handle deferred sections properly
diff --git a/gold/binary.cc b/gold/binary.cc
index 4dab52c..a933b2d 100644
--- a/gold/binary.cc
+++ b/gold/binary.cc
@@ -235,12 +235,12 @@ Binary_to_elf::sized_convert(const Task* task)
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,
+ 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());
@@ -343,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)
{
@@ -351,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);
diff --git a/gold/binary.h b/gold/binary.h
index 3ce84c2..a611e95 100644
--- a/gold/binary.h
+++ b/gold/binary.h
@@ -95,7 +95,8 @@ class Binary_to_elf
template<int size, bool big_endian>
void
write_symbol(const std::string&, const Stringpool_template<char>*,
- section_size_type, unsigned int, unsigned char**);
+ section_size_type, typename elfcpp::Elf_types<32>::Elf_WXword,
+ unsigned int, unsigned char**);
// The ELF machine code of the file to create.
elfcpp::EM elf_machine_;