From a9ae1a042689accbbb77b3ed6d735d24f7e64aad Mon Sep 17 00:00:00 2001 From: Tim Haines Date: Tue, 7 Nov 2023 12:53:53 -0600 Subject: [PATCH] Add Symtab::addModule It's private, so can only be used by friends- specifically Object. --- symtabAPI/h/Symtab.h | 1 + symtabAPI/src/Object-elf.C | 4 ++++ symtabAPI/src/Object-elf.h | 4 ++-- symtabAPI/src/Object.h | 2 ++ symtabAPI/src/Symtab.C | 4 +++- 5 files changed, 12 insertions(+), 3 deletions(-) diff --git a/symtabAPI/h/Symtab.h b/symtabAPI/h/Symtab.h index f9803108d8..0b2de1210a 100644 --- a/symtabAPI/h/Symtab.h +++ b/symtabAPI/h/Symtab.h @@ -441,6 +441,7 @@ class SYMTAB_EXPORT Symtab : public LookupInterface, private: void createDefaultModule(); + void addModule(Module *m); //bool buildFunctionLists(std::vector &raw_funcs); //void enterFunctionInTables(Symbol *func, bool wasSymtab); diff --git a/symtabAPI/src/Object-elf.C b/symtabAPI/src/Object-elf.C index 9c6a4f28e9..640c6f0298 100644 --- a/symtabAPI/src/Object-elf.C +++ b/symtabAPI/src/Object-elf.C @@ -3051,6 +3051,10 @@ ObjectType Object::objType() const { return obj_type_; } +void Object::addModule(SymtabAPI::Module* m) { + associated_symtab->addModule(m); +} + void Object::getModuleLanguageInfo(dyn_hash_map *mod_langs) { string working_module; string mod_string; diff --git a/symtabAPI/src/Object-elf.h b/symtabAPI/src/Object-elf.h index e552e08cdb..b7a06c86ff 100644 --- a/symtabAPI/src/Object-elf.h +++ b/symtabAPI/src/Object-elf.h @@ -53,7 +53,7 @@ #include "headers.h" #include "MappedFile.h" #include "IntervalTree.h" - +#include "Module.h" #include #include #include @@ -166,8 +166,8 @@ class Object : public AObject bool hasDwarfInfo() const { return dwarvenDebugInfo; } void getModuleLanguageInfo(dyn_hash_map *mod_langs); void parseFileLineInfo(); - void parseTypeInfo(); + void addModule(SymtabAPI::Module* m) override; bool needs_function_binding() const { return (plt_addr_ > 0); } bool get_func_binding_table(std::vector &fbt) const; diff --git a/symtabAPI/src/Object.h b/symtabAPI/src/Object.h index 4102c33cf3..be67a3e053 100644 --- a/symtabAPI/src/Object.h +++ b/symtabAPI/src/Object.h @@ -49,6 +49,7 @@ #include "Symbol.h" #include "Symtab.h" +#include "Module.h" #include "LineInformation.h" #include "common/src/headers.h" #include "common/src/MappedFile.h" @@ -140,6 +141,7 @@ class AObject { // Only implemented for ELF right now SYMTAB_EXPORT virtual void getSegmentsSymReader(std::vector &) {} SYMTAB_EXPORT virtual void rebase(Offset) {} + virtual void addModule(SymtabAPI::Module *) {} protected: SYMTAB_EXPORT virtual ~AObject(); // explicitly protected diff --git a/symtabAPI/src/Symtab.C b/symtabAPI/src/Symtab.C index 944278f99e..a5dc1449c4 100644 --- a/symtabAPI/src/Symtab.C +++ b/symtabAPI/src/Symtab.C @@ -792,7 +792,9 @@ void Symtab::createDefaultModule() { } } - +void Symtab::addModule(Module *m) { + impl->modules.insert(m); +} Module *Symtab::getOrCreateModule(const std::string &modName, const Offset modAddr)