Skip to content

Commit b91f466

Browse files
committed
Define symtab in elf raw view
1 parent fd4f452 commit b91f466

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

view/elf/elfview.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2170,8 +2170,7 @@ bool ElfView::Init()
21702170
DefineAutoSymbol(new Symbol(DataSymbol, "__elf_dynamic_table", adjustedVirtualAddr, NoBinding));
21712171
}
21722172

2173-
// Add types for the dynamic symbol table
2174-
if (m_auxSymbolTable.size)
2173+
if (m_auxSymbolTable.size || m_symbolTableSection.offset)
21752174
{
21762175
StructureBuilder symTableBuilder;
21772176
if (m_elf32)
@@ -2196,9 +2195,25 @@ bool ElfView::Init()
21962195
Ref<Type> symTableType = Type::StructureType(symTableStruct);
21972196
QualifiedName symTableName = m_elf32 ? string("Elf32_Sym") : string("Elf64_Sym");
21982197
const string symTableTypeId = Type::GenerateAutoTypeId("elf", symTableName);
2199-
QualifiedName symTableTypeName = DefineType(symTableTypeId, symTableName, symTableType);
2200-
DefineDataVariable(m_auxSymbolTable.offset, Type::ArrayType(Type::NamedType(this, symTableTypeName), m_auxSymbolTable.size / m_auxSymbolTableEntrySize));
2201-
DefineAutoSymbol(new Symbol(DataSymbol, "__elf_symbol_table", m_auxSymbolTable.offset, NoBinding));
2198+
2199+
// Add types for the dynamic symbol table
2200+
if (m_auxSymbolTable.size)
2201+
{
2202+
auto defineAuxSymTableForView = [&](Ref<BinaryView> view) {
2203+
QualifiedName symTableTypeName = view->DefineType(symTableTypeId, symTableName, symTableType);
2204+
view->DefineDataVariable(m_auxSymbolTable.offset, Type::ArrayType(Type::NamedType(this, symTableTypeName), m_auxSymbolTable.size / m_auxSymbolTableEntrySize));
2205+
view->DefineAutoSymbol(new Symbol(DataSymbol, "__elf_symbol_table", m_auxSymbolTable.offset, NoBinding));
2206+
};
2207+
defineAuxSymTableForView(this);
2208+
defineAuxSymTableForView(GetParentView());
2209+
}
2210+
2211+
if (m_symbolTableSection.offset)
2212+
{
2213+
QualifiedName symTableTypeName = GetParentView()->DefineType(symTableTypeId, symTableName, symTableType);
2214+
GetParentView()->DefineDataVariable(m_symbolTableSection.offset, Type::ArrayType(Type::NamedType(this, symTableTypeName), m_symbolTableSection.size / m_auxSymbolTableEntrySize));
2215+
GetParentView()->DefineAutoSymbol(new Symbol(DataSymbol, "__elf_symbol_table", m_symbolTableSection.offset, NoBinding));
2216+
}
22022217
}
22032218

22042219
// In 32-bit mips with .got, add .extern symbol "RTL_Resolve"

0 commit comments

Comments
 (0)