Line 408... |
Line 408... |
incremental_inputs_(NULL),
|
incremental_inputs_(NULL),
|
record_output_section_data_from_script_(false),
|
record_output_section_data_from_script_(false),
|
script_output_section_data_list_(),
|
script_output_section_data_list_(),
|
segment_states_(NULL),
|
segment_states_(NULL),
|
relaxation_debug_check_(NULL),
|
relaxation_debug_check_(NULL),
|
|
section_order_map_(),
|
input_section_position_(),
|
input_section_position_(),
|
input_section_glob_(),
|
input_section_glob_(),
|
incremental_base_(NULL),
|
incremental_base_(NULL),
|
free_list_()
|
free_list_()
|
{
|
{
|
Line 896... |
Line 897... |
Layout::init_fixed_output_section(const char* name,
|
Layout::init_fixed_output_section(const char* name,
|
elfcpp::Shdr<size, big_endian>& shdr)
|
elfcpp::Shdr<size, big_endian>& shdr)
|
{
|
{
|
unsigned int sh_type = shdr.get_sh_type();
|
unsigned int sh_type = shdr.get_sh_type();
|
|
|
// We preserve the layout of PROGBITS, NOBITS, and NOTE sections.
|
// We preserve the layout of PROGBITS, NOBITS, INIT_ARRAY, FINI_ARRAY,
|
|
// PRE_INIT_ARRAY, and NOTE sections.
|
// All others will be created from scratch and reallocated.
|
// All others will be created from scratch and reallocated.
|
if (sh_type != elfcpp::SHT_PROGBITS
|
if (!can_incremental_update(sh_type))
|
&& sh_type != elfcpp::SHT_NOBITS
|
|
&& sh_type != elfcpp::SHT_NOTE)
|
|
return NULL;
|
return NULL;
|
|
|
typename elfcpp::Elf_types<size>::Elf_Addr sh_addr = shdr.get_sh_addr();
|
typename elfcpp::Elf_types<size>::Elf_Addr sh_addr = shdr.get_sh_addr();
|
typename elfcpp::Elf_types<size>::Elf_Off sh_offset = shdr.get_sh_offset();
|
typename elfcpp::Elf_types<size>::Elf_Off sh_offset = shdr.get_sh_offset();
|
typename elfcpp::Elf_types<size>::Elf_WXword sh_size = shdr.get_sh_size();
|
typename elfcpp::Elf_types<size>::Elf_WXword sh_size = shdr.get_sh_size();
|
Line 1440... |
Line 1440... |
&& order != ORDER_INIT
|
&& order != ORDER_INIT
|
&& order != ORDER_PLT
|
&& order != ORDER_PLT
|
&& order != ORDER_FINI
|
&& order != ORDER_FINI
|
&& order != ORDER_RELRO_LAST
|
&& order != ORDER_RELRO_LAST
|
&& order != ORDER_NON_RELRO_FIRST
|
&& order != ORDER_NON_RELRO_FIRST
|
|
&& strcmp(name, ".eh_frame") != 0
|
&& strcmp(name, ".ctors") != 0
|
&& strcmp(name, ".ctors") != 0
|
&& strcmp(name, ".dtors") != 0
|
&& strcmp(name, ".dtors") != 0
|
&& strcmp(name, ".jcr") != 0)
|
&& strcmp(name, ".jcr") != 0)
|
{
|
{
|
os->set_is_patch_space_allowed();
|
os->set_is_patch_space_allowed();
|
Line 2973... |
Line 2974... |
if ((flags1 & elfcpp::PF_R) != (flags2 & elfcpp::PF_R))
|
if ((flags1 & elfcpp::PF_R) != (flags2 & elfcpp::PF_R))
|
return (flags1 & elfcpp::PF_R) == 0;
|
return (flags1 & elfcpp::PF_R) == 0;
|
|
|
// We shouldn't get here--we shouldn't create segments which we
|
// We shouldn't get here--we shouldn't create segments which we
|
// can't distinguish. Unless of course we are using a weird linker
|
// can't distinguish. Unless of course we are using a weird linker
|
// script.
|
// script or overlapping --section-start options.
|
gold_assert(this->script_options_->saw_phdrs_clause());
|
gold_assert(this->script_options_->saw_phdrs_clause()
|
|
|| parameters->options().any_section_start());
|
return false;
|
return false;
|
}
|
}
|
|
|
// Increase OFF so that it is congruent to ADDR modulo ABI_PAGESIZE.
|
// Increase OFF so that it is congruent to ADDR modulo ABI_PAGESIZE.
|
|
|