This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [GOLD][PATCH] Support NOLOAD section type in scripts.
- From: Ian Lance Taylor <iant at google dot com>
- To: Doug Kwan (éæå) <dougkwan at google dot com>
- Cc: binutils <binutils at sourceware dot org>
- Date: Fri, 09 Apr 2010 07:46:28 -0700
- Subject: Re: [GOLD][PATCH] Support NOLOAD section type in scripts.
- References: <h2y498552561004090209u47689e2cq832d24678146a0bb@mail.gmail.com>
"Doug Kwan (éæå)" <dougkwan@google.com> writes:
> 2010-04-09 Doug Kwan <dougkwan@google.com>
>
> * layout.cc (Layout::choose_output_section): Handle script section
> types.
> (Layout::make_output_section_for_script): Add section type parameter.
> Handle script section types.
> * layout.h (Layout::make_output_section_for_script): Add section
> type parameter.
> * output.cc (Output_section::Output_section): Initialize data member
> is_noload_.
> (Output_section::do_reset_address_and_file_offset): Do not set address
> to 0 if section is a NOLOAD section.
> * output.h (Output_section::is_noload): New method.
> (Output_section::set_is_noload): Ditto.
> (Output_section::is_noload_): New data member.
> * script-c.h (Script_section_type): New enum type.
> (struct Parser_output_section_header): Add new file section_type.
> * script-sections.cc (Sections_element::output_section_name): Add
> parameter for returning script section type.
> (Output_section_definition::output_section_name): Ditto.
> (Output_section_definition::section_type)P; New method.
> (Output_section_definiton::script_section_type_name): Ditto.
> (Output_section_definition::script_section_type_): New data member.
> (Output_section_definition::Output_section_definition): Initialize
> data member Output_section_definition::script_section_type_.
> (Output_section_definition::create_sections): Pass script section type
> to Layout::make_output_section_for_script.
> (Output_section_definition::output_section_name): Return script
> section type to caller.
> (Output_section_definition::set_section_address): Do not advance
> dot value and load address if section type is NOLOAD. Set address
> of NOLOAD sections regardless of section flags.
> (Output_section_definition::print): Print section type if it is
> not SCRIPT_SECTION_TYPE_NONE.
> (Output_section_definition::section_type): New method.
> (Output_section_definition::script_section_type_name): Ditto.
> (Script_sections::output_section_name): Add new parameter
> PSECTION_TYPE for returning script section type. Pass it to
> section elements. Handle discard sections.
> (Sort_output_sections::operator()): Handle NOLOAD sections.
> * script-sections.h (Script_sections::Section_type): New enum type.
> (Script_sections::output_section_name): Add a new parameter for
> returning script section type.
> * script.cc (script_keyword_parsecodes): Add keywords COPY, DSECT,
> INFO and NOLOAD.
> * yyscript.y (union): Add new field SECTION_TYPE.
> (COPY, DSECT, INFO, NOLOAD): New tokens.
> (opt_address_and_section_type): Change type to output_section_header.
> (section_type): New non-terminal
> (section_header): Handle section type.
> (opt_address_and_section_type): Return section type value.
> + // If this is a NOLOAD section, key dot and load address unchanged.
> + if (this->output_section_->is_noload())
> + {
> + *dot_value = old_dot_value;
> + *load_address = old_load_address;
> + }
s/key/keep/
This is OK with that change.
Thanks for tackling this.
Ian