20 #ifndef KERNEL_LINKER_SYMBOLTABLE_H 21 #define KERNEL_LINKER_SYMBOLTABLE_H 23 #include "pedigree/kernel/compiler.h" 24 #include "pedigree/kernel/process/Mutex.h" 25 #include "pedigree/kernel/processor/types.h" 26 #include "pedigree/kernel/utilities/HashTable.h" 27 #include "pedigree/kernel/utilities/SharedPointer.h" 28 #include "pedigree/kernel/utilities/String.h" 29 #include "pedigree/kernel/utilities/StringView.h" 30 #include "pedigree/kernel/utilities/Tree.h" 31 #include "pedigree/kernel/utilities/utility.h" 88 size_t numGlobal,
size_t numWeak,
Elf *localElf,
size_t numLocal);
93 size_t numGlobal,
size_t numWeak,
Elf *localElf,
size_t numLocal);
95 void eraseByElf(
Elf *pParent);
121 Symbol() : m_pParent(0), m_Binding(Global), m_Value(0)
125 : m_pParent(pP), m_Binding(b), m_Value(v)
129 Elf *getParent()
const 137 uintptr_t getValue()
const 160 parentedSymbolTree_t m_LocalSymbols;
161 parentedSymbolTree_t m_GlobalSymbols;
162 parentedSymbolTree_t m_WeakSymbols;
164 Elf *m_pOriginatingElf;
uintptr_t EXPORTED_PUBLIC lookup(const HashedStringView &name, Elf *pElf, Policy policy=LocalFirst, Binding *pBinding=0)
void preallocateAdditional(size_t numGlobal, size_t numWeak, Elf *localElf, size_t numLocal)
symbolTree_t * getOrInsertTree(Elf *, Binding table=Local)
void insert(const String &name, Binding binding, Elf *pParent, uintptr_t value)
void insertShared(const String &name, SharedPointer< Symbol > &symbol)
void copyTable(Elf *pNewElf, const SymbolTable &newSymtab)
void insertMultiple(SymbolTable *pOther, const String &name, Binding binding, Elf *pParent, uintptr_t value)
SharedPointer< Symbol > doInsert(const String &name, Binding binding, Elf *pParent, uintptr_t value)
void preallocate(size_t numGlobal, size_t numWeak, Elf *localElf, size_t numLocal)
SymbolTable & operator=(const SymbolTable &)