mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:54:41 +08:00
elfcpp/:
* elfcpp.h (PN_XNUM): Define. gold/: * output.cc (Output_section_headers::do_sized_write): Write large segment count to sh_info field. (Output_file_header::do_sized_write): For large segment count, write PN_XNUM to e_phnum field.
This commit is contained in:
parent
2046a35d20
commit
5696ab0b73
@ -1,3 +1,7 @@
|
||||
2010-01-19 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* elfcpp.h (PN_XNUM): Define.
|
||||
|
||||
2009-12-14 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* elfcpp_file.h: Revert last patch.
|
||||
|
@ -302,6 +302,15 @@ enum EM
|
||||
// Old MN10200 objects used 0xdead (EM_MN10200 is correct).
|
||||
};
|
||||
|
||||
// A special value found in the Ehdr e_phnum field.
|
||||
|
||||
enum
|
||||
{
|
||||
// Number of program segments stored in sh_info field of first
|
||||
// section headre.
|
||||
PN_XNUM = 0xffff
|
||||
};
|
||||
|
||||
// Special section indices.
|
||||
|
||||
enum
|
||||
|
@ -1,3 +1,10 @@
|
||||
2010-01-19 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* output.cc (Output_section_headers::do_sized_write): Write large
|
||||
segment count to sh_info field.
|
||||
(Output_file_header::do_sized_write): For large segment count,
|
||||
write PN_XNUM to e_phnum field.
|
||||
|
||||
2010-01-15 Viktor Kutuzov <vkutuzov@accesssoftek.com>
|
||||
|
||||
* arm.cc (Arm_relocate_functions::thm_jump6): New function.
|
||||
|
@ -213,7 +213,9 @@ Output_section_headers::do_sized_write(Output_file* of)
|
||||
else
|
||||
oshdr.put_sh_link(shstrndx);
|
||||
|
||||
oshdr.put_sh_info(0);
|
||||
size_t segment_count = this->segment_list_->size();
|
||||
oshdr.put_sh_info(segment_count >= elfcpp::PN_XNUM ? segment_count : 0);
|
||||
|
||||
oshdr.put_sh_addralign(0);
|
||||
oshdr.put_sh_entsize(0);
|
||||
}
|
||||
@ -470,8 +472,11 @@ Output_file_header::do_sized_write(Output_file* of)
|
||||
else
|
||||
{
|
||||
oehdr.put_e_phentsize(elfcpp::Elf_sizes<size>::phdr_size);
|
||||
oehdr.put_e_phnum(this->segment_header_->data_size()
|
||||
/ elfcpp::Elf_sizes<size>::phdr_size);
|
||||
size_t phnum = (this->segment_header_->data_size()
|
||||
/ elfcpp::Elf_sizes<size>::phdr_size);
|
||||
if (phnum > elfcpp::PN_XNUM)
|
||||
phnum = elfcpp::PN_XNUM;
|
||||
oehdr.put_e_phnum(phnum);
|
||||
}
|
||||
|
||||
oehdr.put_e_shentsize(elfcpp::Elf_sizes<size>::shdr_size);
|
||||
|
Loading…
Reference in New Issue
Block a user