2009-10-30 Doug Kwan <dougkwan@google.com>

elfcpp/ChangeLog:
	* arm.h (EF_ARM_BE8, EF_ARM_EABIMASK, EF_ARM_EABI_UNKNOWN,
	EF_ARM_EABI_VER1, EF_ARM_EABI_VER2, EF_ARM_EABI_VER3,
	EF_ARM_EABI_VER4, EF_ARM_EABI_VER5): New enums for processor-specific
	flags.
	(arm_eabi_version): New inline function.
	* elfcpp.h: Add a comment about DT_ENCODING.

gold/ChangeLog:
	* arm.cc (Arm_relobj::processor_specific_flags): New method
	definition.
	(Arm_relobj::do_read_symbols): New method declaration.
	(Arm_relobj::processor_specific_flags_): New data member declaration.
	(Arm_dynobj): New class definition.
	(Target_arm::do_finalize_sections): Add input_objects parameter.
	(Target_arm::do_adjust_elf_header): New method declaration.
	(Target_arm::are_eabi_versions_compatible,
	(Target_arm::merge_processor_specific_flags): New method declaration.
	(Target_arm::do_make_elf_object): New overloaded method definitions
	and declaration.
	(Arm_relobj::do_read_symbols): New method definition.
	(Arm_dynobj::do_read_symbols): Ditto.
	(Target_arm::do_finalize_sections): Add input_objects parameters.
	Merge processor-specific flags from all input objects.
	(Target_arm::are_eabi_versions_compatible,
	Target_arm::merge_processor_specific_flags,
	Target_arm::do_adjust_elf_header, Target_arm::do_make_elf_object):
	New method definitions.
	* i386.cc (Target_i386::do_finalize_sections): Add unnamed
	Input_objects pointer type parameter.
	* layout.cc (Layout::finalize): Pass input objects to target's.
	finalize_sections function.
	* output.cc (Output_file_header::do_sized_write): Set ELF file
	header's processor-specific flags.
	* powerpc.cc (Target_powerpc::do_finalize_sections): Add unnamed
	Input_objects pointer type parameter.
	* sparc.cc (Target_sparc::do_finalize_sections): Same.
	* target.h (Input_objects): New forward class declaration.
	(Target::processor_specific_flags,
	Target::are_processor_specific_flags_sect): New method definitions.
	(Target::finalize_sections): Add input_objects parameter.
	(Target::Target): Initialize processor_specific_flags_ and
	are_processor_specific_flags_set_.
	(Target::do_finalize_sections): Add unnamed Input_objects pointer type
	parameter.
	(Target::set_processor_specific_flags): New method definition.
	(Target::processor_specific_flags_,
	Target::are_processor_specific_flags_set_): New data member
	declarations.
	* x86_64.cc (Target_x86_64::do_finalize_sections): Add unnamed
	Input_objects pointer type parameter.
This commit is contained in:
Doug Kwan
2009-10-30 18:49:59 +00:00
parent ebabffbd89
commit d5b40221bc
12 changed files with 391 additions and 19 deletions

View File

@@ -54,6 +54,7 @@ template<int size>
class Sized_symbol;
class Symbol_table;
class Output_section;
class Input_objects;
// The abstract class for target specific handling.
@@ -79,6 +80,16 @@ class Target
machine_code() const
{ return this->pti_->machine_code; }
// Processor specific flags to store in e_flags field of ELF header.
elfcpp::Elf_Word
processor_specific_flags() const
{ return this->processor_specific_flags_; }
// Whether processor specific flags are set at least once.
bool
are_processor_specific_flags_set() const
{ return this->are_processor_specific_flags_set_; }
// Whether this target has a specific make_symbol function.
bool
has_make_symbol() const
@@ -183,8 +194,8 @@ class Target
// This is called to tell the target to complete any sections it is
// handling. After this all sections must have their final size.
void
finalize_sections(Layout* layout)
{ return this->do_finalize_sections(layout); }
finalize_sections(Layout* layout, const Input_objects* input_objects)
{ return this->do_finalize_sections(layout, input_objects); }
// Return the value to use for a global symbol which needs a special
// value in the dynamic symbol table. This will only be called if
@@ -314,7 +325,8 @@ class Target
};
Target(const Target_info* pti)
: pti_(pti)
: pti_(pti), processor_specific_flags_(0),
are_processor_specific_flags_set_(false)
{ }
// Virtual function which may be implemented by the child class.
@@ -324,7 +336,7 @@ class Target
// Virtual function which may be implemented by the child class.
virtual void
do_finalize_sections(Layout*)
do_finalize_sections(Layout*, const Input_objects*)
{ }
// Virtual function which may be implemented by the child class.
@@ -364,6 +376,14 @@ class Target
// make_elf_object hooks. There are four versions of these for
// different address sizes and endianities.
// Set processor specific flags.
void
set_processor_specific_flags(elfcpp::Elf_Word flags)
{
this->processor_specific_flags_ = flags;
this->are_processor_specific_flags_set_ = true;
}
#ifdef HAVE_TARGET_32_LITTLE
// Virtual functions which may be overriden by the child class.
virtual Object*
@@ -433,6 +453,10 @@ class Target
// The target information.
const Target_info* pti_;
// Processor-specific flags.
elfcpp::Elf_Word processor_specific_flags_;
// Whether the processor-specific flags are set at least once.
bool are_processor_specific_flags_set_;
};
// The abstract class for a specific size and endianness of target.