forked from OSchip/llvm-project
[lldb] Update the check for Linux or FreeBSD in SymbolFileDWARF::FindFunctions
This diff 1. Adds a comment to ObjectFileELF.cpp about the current approach to determining the OS. 2. Replaces the check in SymbolFileDWARF.cpp with a more robust one. Test plan: Built (on Linux) a test binary linked to a c++ shared library which contains just an implementation of a function TestFunction, the library (the binary itself) doesn't contain ELF notes and EI_OSABI is set to System V. Checked in lldb that now "p TestFunction()" works fine (and doesn't work without this patch). Differential revision: https://reviews.llvm.org/D27380 llvm-svn: 288687
This commit is contained in:
parent
44da9decb5
commit
a08ba42f1a
|
@ -1513,8 +1513,14 @@ size_t ObjectFileELF::GetSectionHeaderInfo(SectionHeaderColl §ion_headers,
|
|||
const uint32_t sub_type = subTypeFromElfHeader(header);
|
||||
arch_spec.SetArchitecture(eArchTypeELF, header.e_machine, sub_type,
|
||||
header.e_ident[EI_OSABI]);
|
||||
//
|
||||
// Validate if it is ok to remove GetOsFromOSABI
|
||||
|
||||
// Validate if it is ok to remove GetOsFromOSABI.
|
||||
// Note, that now the OS is determined based on EI_OSABI flag and
|
||||
// the info extracted from ELF notes (see RefineModuleDetailsFromNote).
|
||||
// However in some cases that still might be not enough: for example
|
||||
// a shared library might not have any notes at all
|
||||
// and have EI_OSABI flag set to System V,
|
||||
// as result the OS will be set to UnknownOS.
|
||||
GetOsFromOSABI(header.e_ident[EI_OSABI], ostype);
|
||||
spec_ostype = arch_spec.GetTriple().getOS();
|
||||
assert(spec_ostype == ostype);
|
||||
|
|
|
@ -2586,8 +2586,7 @@ SymbolFileDWARF::FindFunctions(const ConstString &name,
|
|||
if (sc_list.GetSize() == original_size) {
|
||||
ArchSpec arch;
|
||||
if (!parent_decl_ctx && GetObjectFile()->GetArchitecture(arch) &&
|
||||
(arch.GetTriple().isOSFreeBSD() || arch.GetTriple().isOSLinux() ||
|
||||
arch.GetMachine() == llvm::Triple::hexagon)) {
|
||||
arch.GetTriple().isOSBinFormatELF()) {
|
||||
SymbolContextList temp_sc_list;
|
||||
FindFunctions(name, m_function_basename_index, include_inlines,
|
||||
temp_sc_list);
|
||||
|
|
Loading…
Reference in New Issue