[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:
Alexander Shaposhnikov
2016-12-05 18:42:21 +00:00
parent 44da9decb5
commit a08ba42f1a
2 changed files with 9 additions and 4 deletions

View File

@@ -1513,8 +1513,14 @@ size_t ObjectFileELF::GetSectionHeaderInfo(SectionHeaderColl &section_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);