diff options
author | Cary Coutant <ccoutant@google.com> | 2014-11-25 14:33:51 -0800 |
---|---|---|
committer | Cary Coutant <ccoutant@google.com> | 2014-11-25 14:33:51 -0800 |
commit | 43b64debe3577c6923ca9f16ec91451bb47f5f65 (patch) | |
tree | 0c80e597d31b882f7efe1f96cc6760553ac50187 /gold | |
parent | c924eb67e143722e4098d84c1cb91123a51c988f (diff) | |
download | gdb-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.
Diffstat (limited to 'gold')
-rw-r--r-- | gold/ChangeLog | 6 | ||||
-rw-r--r-- | gold/binary.cc | 15 | ||||
-rw-r--r-- | gold/binary.h | 3 |
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_; |