diff options
Diffstat (limited to 'linkers/rld-symbols.h')
-rw-r--r-- | linkers/rld-symbols.h | 297 |
1 files changed, 0 insertions, 297 deletions
diff --git a/linkers/rld-symbols.h b/linkers/rld-symbols.h deleted file mode 100644 index 5405d2f..0000000 --- a/linkers/rld-symbols.h +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright (c) 2011, Chris Johns <chrisj@rtems.org> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -/** - * @file - * - * @ingroup rtems-ld - * - * @brief RTEMS Linker symbols manages the symbols from all the object files. - * - */ - -#if !defined (_RLD_SYMBOLS_H_) -#define _RLD_SYMBOLS_H_ - -#include <iostream> -#include <list> -#include <map> -#include <string> - -#include <rld-elf-types.h> - -namespace rld -{ - /** - * Forward declarations. - */ - namespace files - { - class object; - } - - namespace symbols - { - /** - * A symbol. - */ - class symbol - { - public: - /** - * Default constructor. No symbol has been defined. - */ - symbol (); - - /** - * Construct an exported symbol with a object file. - */ - symbol (int index, - const std::string& name, - files::object& object, - const elf::elf_sym& esym); - - /** - * Construct a symbol with no object file and an ELF index. - */ - symbol (int index, const std::string& name, const elf::elf_sym& esym); - - /** - * Construct a linker symbol that is internally created. - */ - symbol (const std::string& name, - const elf::elf_addr value = 0); - - /** - * Construct a linker symbol that is internally created. - */ - symbol (const char* name, - elf::elf_addr value = 0); - - /** - * The symbol's index in the symtab section of the ELF file. - */ - int index () const; - - /** - * The symbol's name. - */ - const std::string& name () const; - - /** - * The symbol's demangled name. - */ - const std::string& demangled () const; - - /** - * Is the symbol a C++ name ? - */ - bool is_cplusplus () const; - - /** - * The symbol's type. - */ - int type () const; - - /** - * The symbol's binding, ie local, weak, or global. - */ - int binding () const; - - /** - * The symbol's section index. - */ - int section_index () const; - - /** - * The value of the symbol. - */ - elf::elf_addr value () const; - - /** - * The data of the symbol. - */ - uint32_t info () const; - - /** - * The symbol's object file name. - */ - files::object* object () const; - - /** - * Set the symbol's object file name. Used when resolving unresolved - * symbols. - */ - void set_object (files::object& obj); - - /** - * The ELF symbol. - */ - const elf::elf_sym& esym () const; - - /** - * Return the number of references. - */ - int references () const { - return references_; - } - - /** - * Return the number of references. - */ - void referenced (); - - /** - * Less than operator for the map container. - */ - bool operator< (const symbol& rhs) const; - - /** - * Output to the a stream. - */ - void output (std::ostream& out) const; - - private: - - int index_; //< The symbol's index in the ELF file. - std::string name_; //< The name of the symbol. - std::string demangled_; //< If a C++ symbol the demangled name. - files::object* object_; //< The object file containing the symbol. - elf::elf_sym esym_; //< The ELF symbol. - int references_; //< The number of times if it referenced. - }; - - /** - * Container of symbols. A bucket of symbols. - */ - typedef std::list < symbol > bucket; - - /** - * References to symbols. Should always point to symbols held in a bucket. - */ - typedef std::list < symbol* > pointers; - - /** - * A symbols table is a map container of symbols. Should always point to - * symbols held in a bucket. - */ - typedef std::map < std::string, symbol* > symtab; - - /** - * A symbols contains a symbol table of externals and weak symbols. - */ - class table - { - public: - /** - * Construct a table. - */ - table (); - - /** - * Destruct a table. - */ - ~table (); - - /** - * Add an external symbol. - */ - void add_external (symbol& sym); - - /** - * Add a weak symbol. - */ - void add_weak (symbol& sym); - - /** - * Find an external symbol. - */ - symbol* find_external (const std::string& name); - - /** - * Find an weak symbol. - */ - symbol* find_weak (const std::string& name); - - /** - * Return the size of the symbols loaded. - */ - size_t size () const; - - /** - * Return the externals symbol table. - */ - const symtab& externals () const; - - /** - * Return the weaks symbol table. - */ - const symtab& weaks () const; - - private: - - /** - * Cannot copy a table. - */ - table (const table& orig); - - /** - * A table of external symbols. - */ - symtab _externals; - - /** - * A table of weak symbols. - */ - symtab _weaks; - }; - - /** - * Load a table from a buckey. - */ - void load (bucket& bucket_, table& table_); - - /** - * Load a table from a buckey. - */ - void load (bucket& bucket_, symtab& table_); - - /** - * Given a container of symbols return how many are referenced. - */ - size_t referenced (pointers& symbols); - - /** - * Output the symbol table. - */ - void output (std::ostream& out, const table& symbols); - - /** - * Output the symbol table. - */ - void output (std::ostream& out, const symtab& symbols); - } -} - -/** - * Output stream operator. - */ -static inline std::ostream& operator<< (std::ostream& out, - const rld::symbols::symbol& sym) { - sym.output (out); - return out; -} - -#endif |