Make sure we detect symbols in the new __DATA_DIRTY and __DATA_CONST segments and classify them correctly.

<rdar://problem/20942073>

llvm-svn: 243344
This commit is contained in:
Greg Clayton 2015-07-27 23:21:05 +00:00
parent 4746c2fcdb
commit a381e10518
2 changed files with 26 additions and 2 deletions

View File

@ -1027,6 +1027,20 @@ ObjectFileMachO::GetSegmentNameDATA()
return g_segment_name_DATA; return g_segment_name_DATA;
} }
const ConstString &
ObjectFileMachO::GetSegmentNameDATA_DIRTY()
{
static ConstString g_segment_name ("__DATA_DIRTY");
return g_segment_name;
}
const ConstString &
ObjectFileMachO::GetSegmentNameDATA_CONST()
{
static ConstString g_segment_name ("__DATA_CONST");
return g_segment_name;
}
const ConstString & const ConstString &
ObjectFileMachO::GetSegmentNameOBJC() ObjectFileMachO::GetSegmentNameOBJC()
{ {
@ -2442,10 +2456,14 @@ ObjectFileMachO::ParseSymtab ()
const ConstString &g_segment_name_TEXT = GetSegmentNameTEXT(); const ConstString &g_segment_name_TEXT = GetSegmentNameTEXT();
const ConstString &g_segment_name_DATA = GetSegmentNameDATA(); const ConstString &g_segment_name_DATA = GetSegmentNameDATA();
const ConstString &g_segment_name_DATA_DIRTY = GetSegmentNameDATA_DIRTY();
const ConstString &g_segment_name_DATA_CONST = GetSegmentNameDATA_CONST();
const ConstString &g_segment_name_OBJC = GetSegmentNameOBJC(); const ConstString &g_segment_name_OBJC = GetSegmentNameOBJC();
const ConstString &g_section_name_eh_frame = GetSectionNameEHFrame(); const ConstString &g_section_name_eh_frame = GetSectionNameEHFrame();
SectionSP text_section_sp(section_list->FindSectionByName(g_segment_name_TEXT)); SectionSP text_section_sp(section_list->FindSectionByName(g_segment_name_TEXT));
SectionSP data_section_sp(section_list->FindSectionByName(g_segment_name_DATA)); SectionSP data_section_sp(section_list->FindSectionByName(g_segment_name_DATA));
SectionSP data_dirty_section_sp(section_list->FindSectionByName(g_segment_name_DATA_DIRTY));
SectionSP data_const_section_sp(section_list->FindSectionByName(g_segment_name_DATA_CONST));
SectionSP objc_section_sp(section_list->FindSectionByName(g_segment_name_OBJC)); SectionSP objc_section_sp(section_list->FindSectionByName(g_segment_name_OBJC));
SectionSP eh_frame_section_sp; SectionSP eh_frame_section_sp;
if (text_section_sp.get()) if (text_section_sp.get())
@ -3298,7 +3316,9 @@ ObjectFileMachO::ParseSymtab ()
else else
type = eSymbolTypeCode; type = eSymbolTypeCode;
} }
else if (symbol_section->IsDescendant(data_section_sp.get())) else if (symbol_section->IsDescendant(data_section_sp.get()) ||
symbol_section->IsDescendant(data_dirty_section_sp.get()) ||
symbol_section->IsDescendant(data_const_section_sp.get()))
{ {
if (symbol_sect_name && ::strstr (symbol_sect_name, "__objc") == symbol_sect_name) if (symbol_sect_name && ::strstr (symbol_sect_name, "__objc") == symbol_sect_name)
{ {
@ -4148,7 +4168,9 @@ ObjectFileMachO::ParseSymtab ()
type = eSymbolTypeCode; type = eSymbolTypeCode;
} }
else else
if (symbol_section->IsDescendant(data_section_sp.get())) if (symbol_section->IsDescendant(data_section_sp.get()) ||
symbol_section->IsDescendant(data_dirty_section_sp.get()) ||
symbol_section->IsDescendant(data_const_section_sp.get()))
{ {
if (symbol_sect_name && ::strstr (symbol_sect_name, "__objc") == symbol_sect_name) if (symbol_sect_name && ::strstr (symbol_sect_name, "__objc") == symbol_sect_name)
{ {

View File

@ -223,6 +223,8 @@ protected:
llvm::MachO::mach_header m_header; llvm::MachO::mach_header m_header;
static const lldb_private::ConstString &GetSegmentNameTEXT(); static const lldb_private::ConstString &GetSegmentNameTEXT();
static const lldb_private::ConstString &GetSegmentNameDATA(); static const lldb_private::ConstString &GetSegmentNameDATA();
static const lldb_private::ConstString &GetSegmentNameDATA_DIRTY();
static const lldb_private::ConstString &GetSegmentNameDATA_CONST();
static const lldb_private::ConstString &GetSegmentNameOBJC(); static const lldb_private::ConstString &GetSegmentNameOBJC();
static const lldb_private::ConstString &GetSegmentNameLINKEDIT(); static const lldb_private::ConstString &GetSegmentNameLINKEDIT();
static const lldb_private::ConstString &GetSectionNameEHFrame(); static const lldb_private::ConstString &GetSectionNameEHFrame();