From Craig Silverstein: Force .debug_str sections to be SHF_MERGE and
SHF_STRINGS.
This commit is contained in:
parent
b224e962a8
commit
44a43cf96f
|
@ -1113,13 +1113,20 @@ Output_section::add_input_section(Sized_relobj<size, big_endian>* object,
|
||||||
if (addralign > this->addralign_)
|
if (addralign > this->addralign_)
|
||||||
this->addralign_ = addralign;
|
this->addralign_ = addralign;
|
||||||
|
|
||||||
|
typename elfcpp::Elf_types<size>::Elf_WXword sh_flags = shdr.get_sh_flags();
|
||||||
|
|
||||||
|
// .debug_str is a mergeable string section, but is not always so
|
||||||
|
// marked by compilers. Mark manually here so we can optimize.
|
||||||
|
if (strcmp(secname, ".debug_str") == 0)
|
||||||
|
sh_flags |= (elfcpp::SHF_MERGE | elfcpp::SHF_STRINGS);
|
||||||
|
|
||||||
// If this is a SHF_MERGE section, we pass all the input sections to
|
// If this is a SHF_MERGE section, we pass all the input sections to
|
||||||
// a Output_data_merge. We don't try to handle relocations for such
|
// a Output_data_merge. We don't try to handle relocations for such
|
||||||
// a section.
|
// a section.
|
||||||
if ((shdr.get_sh_flags() & elfcpp::SHF_MERGE) != 0
|
if ((sh_flags & elfcpp::SHF_MERGE) != 0
|
||||||
&& reloc_shndx == 0)
|
&& reloc_shndx == 0)
|
||||||
{
|
{
|
||||||
if (this->add_merge_input_section(object, shndx, shdr.get_sh_flags(),
|
if (this->add_merge_input_section(object, shndx, sh_flags,
|
||||||
shdr.get_sh_entsize(),
|
shdr.get_sh_entsize(),
|
||||||
addralign))
|
addralign))
|
||||||
{
|
{
|
||||||
|
@ -1134,7 +1141,7 @@ Output_section::add_input_section(Sized_relobj<size, big_endian>* object,
|
||||||
addralign);
|
addralign);
|
||||||
|
|
||||||
if (aligned_offset_in_section > offset_in_section
|
if (aligned_offset_in_section > offset_in_section
|
||||||
&& (shdr.get_sh_flags() & elfcpp::SHF_EXECINSTR) != 0
|
&& (sh_flags & elfcpp::SHF_EXECINSTR) != 0
|
||||||
&& object->target()->has_code_fill())
|
&& object->target()->has_code_fill())
|
||||||
{
|
{
|
||||||
// We need to add some fill data. Using fill_list_ when
|
// We need to add some fill data. Using fill_list_ when
|
||||||
|
|
Loading…
Reference in New Issue