forked from Imagelibrary/binutils-gdb
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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user