Factor some methods that were in DynamicLoaderPOSIXDYLD.
Move some code that was in DynamicLoaderPOSIXDLYD into the base class DynamicLoader. In the case of UpdateLoadedSections(), the test to see whether a file is loadable (its address is zero) is not generally applicable so that test is changed to a more universally applicable check for the SHF_ALLOC flag on the section. Also make it explicit that the reading of the module_id in DynamicLoaderPOSIXDYLD::GetThreadLocalData() is using a hardcoded size (of module_id) of 4, which might not be appropriate on big-endian 64-bit systems, leaving a FIXME comment in place. llvm-svn: 200939
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#include "lldb/Core/Stream.h"
|
||||
#include "lldb/Symbol/DWARFCallFrameInfo.h"
|
||||
#include "lldb/Symbol/SymbolContext.h"
|
||||
#include "lldb/Target/SectionLoadList.h"
|
||||
#include "lldb/Target/Target.h"
|
||||
#include "lldb/Host/Host.h"
|
||||
|
||||
@@ -462,6 +463,38 @@ ObjectFileELF::IsExecutable() const
|
||||
return m_header.e_entry != 0;
|
||||
}
|
||||
|
||||
bool
|
||||
ObjectFileELF::SetLoadAddress(Target &target, addr_t base_addr)
|
||||
{
|
||||
bool changed = false;
|
||||
ModuleSP module_sp = GetModule();
|
||||
if (module_sp)
|
||||
{
|
||||
size_t num_loaded_sections = 0;
|
||||
SectionList *section_list = GetSectionList ();
|
||||
if (section_list)
|
||||
{
|
||||
const size_t num_sections = section_list->GetSize();
|
||||
size_t sect_idx = 0;
|
||||
for (sect_idx = 0; sect_idx < num_sections; ++sect_idx)
|
||||
{
|
||||
// Iterate through the object file sections to find all
|
||||
// of the sections that have SHF_ALLOC in their flag bits.
|
||||
SectionSP section_sp (section_list->GetSectionAtIndex (sect_idx));
|
||||
// if (section_sp && !section_sp->IsThreadSpecific())
|
||||
if (section_sp && section_sp->Test(SHF_ALLOC))
|
||||
{
|
||||
if (target.GetSectionLoadList().SetSectionLoadAddress (section_sp, section_sp->GetFileAddress() + base_addr))
|
||||
++num_loaded_sections;
|
||||
}
|
||||
}
|
||||
}
|
||||
changed = num_loaded_sections > 0;
|
||||
return num_loaded_sections > 0;
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
ByteOrder
|
||||
ObjectFileELF::GetByteOrder() const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user