Skip to content

Commit

Permalink
Fix THUMB function detection when function name is not prefixed.
Browse files Browse the repository at this point in the history
Differential Revision: http://reviews.llvm.org/D10062

llvm-svn: 238433
  • Loading branch information
bit-hack committed May 28, 2015
1 parent e2b355d commit 5f2d0c3
Showing 1 changed file with 18 additions and 11 deletions.
29 changes: 18 additions & 11 deletions lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
Expand Up @@ -1915,18 +1915,25 @@ ObjectFileELF::ParseSymbols (Symtab *symtab,

if (arch.GetMachine() == llvm::Triple::arm)
{
// THUMB functions have the lower bit of their address set. Fixup
// the actual address and mark the symbol as THUMB.
if (symbol_type == eSymbolTypeCode && symbol.st_value & 1)
if (symbol_type == eSymbolTypeCode)
{
// Substracting 1 from the address effectively unsets
// the low order bit, which results in the address
// actually pointing to the beginning of the symbol.
// This delta will be used below in conjuction with
// symbol.st_value to produce the final symbol_value
// that we store in the symtab.
symbol_value_offset = -1;
additional_flags = ARM_ELF_SYM_IS_THUMB;
if (symbol.st_value & 1)
{
// Subtracting 1 from the address effectively unsets
// the low order bit, which results in the address
// actually pointing to the beginning of the symbol.
// This delta will be used below in conjunction with
// symbol.st_value to produce the final symbol_value
// that we store in the symtab.
symbol_value_offset = -1;
additional_flags = ARM_ELF_SYM_IS_THUMB;
m_address_class_map[symbol.st_value^1] = eAddressClassCodeAlternateISA;
}
else
{
// This address is ARM
m_address_class_map[symbol.st_value] = eAddressClassCode;
}
}
}
}
Expand Down

0 comments on commit 5f2d0c3

Please sign in to comment.