From 83e945296c9fd54c1cb5f28a3f41b5477418393d Mon Sep 17 00:00:00 2001 From: Brandon Miller Date: Wed, 27 May 2026 08:56:19 -0400 Subject: Apply symbols and types to TMS320C6x ELFs --- view/elf/elfview.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'view/elf/elfview.cpp') diff --git a/view/elf/elfview.cpp b/view/elf/elfview.cpp index abf860a2..c54663d4 100644 --- a/view/elf/elfview.cpp +++ b/view/elf/elfview.cpp @@ -1338,8 +1338,16 @@ bool ElfView::Init() DefineElfSymbol(FunctionSymbol, entry->name, entry->value, false, entry->binding); break; case ELF_STT_FUNC: - DefineElfSymbol(FunctionSymbol, entry->name, entry->value, false, entry->binding); - break; + { + auto symbolType = FunctionSymbol; + if (m_plat && m_plat->GetName() == "tms320c6x" && + (entry->name.find('$') != std::string::npos || entry->name == "LOOP")) { + // TMS320C6x ELFs use ELF_STT_FUNC *$* and LOOP symbols for labeling blocks + symbolType = LocalLabelSymbol; + } + DefineElfSymbol(symbolType, entry->name, entry->value, false, entry->binding); + break; + } case ELF_STT_TLS: /* - only create Binja symbols for .symtab (not .dynsym) symbols - ignore mapping symbols, all is assumed data @@ -2617,9 +2625,9 @@ void ElfView::DefineElfSymbol(BNSymbolType type, const string& incomingName, uin } } - if (!typeRef && m_arch && m_arch->GetName() == "hexagon") + if (!typeRef && m_arch && (m_arch->GetName() == "hexagon" || m_arch->GetName() == "tms320c6x")) { - // Apply platform types for statically linked Hexagon binaries + // Apply platform types for statically linked Hexagon and TMS320C6x binaries typeRef = GetDefaultPlatform()->GetFunctionByName(rawName); } -- cgit v1.3.1