diff options
author | Doug Kwan <dougkwan@google.com> | 2009-10-30 18:49:59 +0000 |
---|---|---|
committer | Doug Kwan <dougkwan@google.com> | 2009-10-30 18:49:59 +0000 |
commit | d5b40221bcfffa99532547f0b94a852d834426aa (patch) | |
tree | ca58152d05c8faaa6ac2f3fca06eaeb4810b53c6 /gold/target.h | |
parent | ebabffbd89147c0f657eadb488f8a1df1c46e1a2 (diff) | |
download | gdb-d5b40221bcfffa99532547f0b94a852d834426aa.zip gdb-d5b40221bcfffa99532547f0b94a852d834426aa.tar.gz gdb-d5b40221bcfffa99532547f0b94a852d834426aa.tar.bz2 |
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.
Diffstat (limited to 'gold/target.h')
-rw-r--r-- | gold/target.h | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/gold/target.h b/gold/target.h index bbe06ad..e301b0b 100644 --- a/gold/target.h +++ b/gold/target.h @@ -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. |