diff options
author | Ian Lance Taylor <ian@airs.com> | 2011-06-28 23:12:31 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 2011-06-28 23:12:31 +0000 |
commit | 03ef7571fc6524b38bfbb99ffdfa72418d03d02c (patch) | |
tree | db7978009cae555afe0e9bdb633d543f2e3c3664 /gold/target-select.h | |
parent | 200b2bb9e8930d9d47fa5f378cf595328ee9c9bc (diff) | |
download | gdb-03ef7571fc6524b38bfbb99ffdfa72418d03d02c.zip gdb-03ef7571fc6524b38bfbb99ffdfa72418d03d02c.tar.gz gdb-03ef7571fc6524b38bfbb99ffdfa72418d03d02c.tar.bz2 |
PR gold/12934
* target-select.cc (Target_selector::Target_selector): Add
emulation parameter. Change all callers.
(select_target_by_bfd_name): Rename from select_target_by_name.
Change all callers.
(select_target_by_emulation): New function.
(supported_emulation_names): New function.
* target-select.h (class Target_selector): Add emulation_ field.
Update declarations.
(Target_selector::recognize_by_bfd_name): Rename from
recognize_by_name. Change all callers.
(Target_selector::supported_bfd_names): Rename from
supported_names. Change all callers.
(Target_selector::recognize_by_emulation): New function.
(Target_selector::supported_emulations): New function.
(Target_selector::emulation): New function.
(Target_selector::do_recognize_by_bfd_name): Rename from
do_recognize_by_name. Change all callers.
(Target_selector::do_supported_bfd_names): Rename from
do_supported_names. Change all callers.
(Target_selector::do_recognize_by_emulation): New function.
(Target_selector::do_supported_emulations): New function.
(select_target_by_bfd_name): Change name in declaration.
(select_target_by_emulation): Declare.
(supported_emulation_names): Declare.
* parameters.cc (parameters_force_valid_target): Try to find
target based on emulation from -m option.
* options.h (class General_options): Change doc string for -m.
* options.cc (help): Print emulations.
(General_options::parse_V): Likewise.
* freebsd.h (Target_selector_freebsd::Target_selector_freebsd):
Add emulation parameter. Change all callers.
Diffstat (limited to 'gold/target-select.h')
-rw-r--r-- | gold/target-select.h | 78 |
1 files changed, 64 insertions, 14 deletions
diff --git a/gold/target-select.h b/gold/target-select.h index 4e2ea92..e16afd2 100644 --- a/gold/target-select.h +++ b/gold/target-select.h @@ -1,6 +1,6 @@ // target-select.h -- select a target for an object file -*- C++ -*- -// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. // Written by Ian Lance Taylor <iant@google.com>. // This file is part of gold. @@ -65,9 +65,10 @@ class Target_selector // or 64), and endianness. The machine number can be EM_NONE to // test for any machine number. BFD_NAME is the name of the target // used by the GNU linker, for backward compatibility; it may be - // NULL. + // NULL. EMULATION is the name of the emulation used by the GNU + // linker; it is similar to BFD_NAME. Target_selector(int machine, int size, bool is_big_endian, - const char* bfd_name); + const char* bfd_name, const char* emulation); virtual ~Target_selector() { } @@ -81,14 +82,26 @@ class Target_selector // If NAME matches the target, return a pointer to a target // structure. Target* - recognize_by_name(const char* name) - { return this->do_recognize_by_name(name); } + recognize_by_bfd_name(const char* name) + { return this->do_recognize_by_bfd_name(name); } - // Push all supported names onto the vector. This is only used for - // help output. + // Push all supported BFD names onto the vector. This is only used + // for help output. void - supported_names(std::vector<const char*>* names) - { this->do_supported_names(names); } + supported_bfd_names(std::vector<const char*>* names) + { this->do_supported_bfd_names(names); } + + // If NAME matches the target emulation, return a pointer to a + // target structure. + Target* + recognize_by_emulation(const char* name) + { return this->do_recognize_by_emulation(name); } + + // Push all supported emulations onto the vector. This is only used + // for help output. + void + supported_emulations(std::vector<const char*>* names) + { this->do_supported_emulations(names); } // Return the next Target_selector in the linked list. Target_selector* @@ -114,12 +127,19 @@ class Target_selector { return this->is_big_endian_; } // Return the BFD name. This may return NULL, in which case the - // do_recognize_by_name hook will be responsible for matching the - // BFD name. + // do_recognize_by_bfd_name hook will be responsible for matching + // the BFD name. const char* bfd_name() const { return this->bfd_name_; } + // Return the emulation. This may return NULL, in which case the + // do_recognize_by_emulation hook will be responsible for matching + // the emulation. + const char* + emulation() const + { return this->emulation_; } + protected: // Return an instance of the real target. This must be implemented // by the child class. @@ -141,19 +161,37 @@ class Target_selector // child class may implement a different version of this to // recognize more than one name. virtual Target* - do_recognize_by_name(const char*) + do_recognize_by_bfd_name(const char*) { return this->instantiate_target(); } // Return a list of supported BFD names. The child class may // implement a different version of this to handle more than one // name. virtual void - do_supported_names(std::vector<const char*>* names) + do_supported_bfd_names(std::vector<const char*>* names) { gold_assert(this->bfd_name_ != NULL); names->push_back(this->bfd_name_); } + // Recognize a target by emulation. When this is called we already + // know that the name matches (or that the emulation_ field is + // NULL). The child class may implement a different version of this + // to recognize more than one emulation. + virtual Target* + do_recognize_by_emulation(const char*) + { return this->instantiate_target(); } + + // Return a list of supported emulations. The child class may + // implement a different version of this to handle more than one + // emulation. + virtual void + do_supported_emulations(std::vector<const char*>* emulations) + { + gold_assert(this->emulation_ != NULL); + emulations->push_back(this->emulation_); + } + // Instantiate the target and return it. Target* instantiate_target(); @@ -173,6 +211,8 @@ class Target_selector const bool is_big_endian_; // BFD name of target, for compatibility. const char* const bfd_name_; + // GNU linker emulation for this target, for compatibility. + const char* const emulation_; // Next entry in list built at global constructor time. Target_selector* next_; // The singleton Target structure--this points to an instance of the @@ -191,7 +231,12 @@ select_target(int machine, int size, bool big_endian, int osabi, // Select a target using a BFD name. extern Target* -select_target_by_name(const char* name); +select_target_by_bfd_name(const char* name); + +// Select a target using a GNU linker emulation. + +extern Target* +select_target_by_emulation(const char* name); // Fill in a vector with the list of supported targets. This returns // a list of BFD names. @@ -199,6 +244,11 @@ select_target_by_name(const char* name); extern void supported_target_names(std::vector<const char*>*); +// Fill in a vector with the list of supported emulations. + +extern void +supported_emulation_names(std::vector<const char*>*); + } // End namespace gold. #endif // !defined(GOLD_TARGET_SELECT_H) |