Teach MachO which sections contain code

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170349 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Tim Northover 2012-12-17 17:59:32 +00:00
parent 2dfa3eb566
commit 1c2b2f9c56
5 changed files with 10 additions and 3 deletions

View File

@ -237,6 +237,10 @@ namespace macho {
/// @name Section Data
/// @{
enum SectionFlags {
SF_PureInstructions = 0x80000000
};
struct Section {
char Name[16];
char SegmentName[16];

View File

@ -314,7 +314,7 @@ bool DarwinAsmParser::ParseSectionSwitch(const char *Segment,
Lex();
// FIXME: Arch specific.
bool isText = StringRef(Segment) == "__TEXT"; // FIXME: Hack.
bool isText = TAA & MCSectionMachO::S_ATTR_PURE_INSTRUCTIONS;
getStreamer().SwitchSection(getContext().getMachOSection(
Segment, Section, TAA, StubSize,
isText ? SectionKind::getText()

View File

@ -559,11 +559,11 @@ error_code MachOObjectFile::isSectionText(DataRefImpl DRI,
if (is64BitLoadCommand(MachOObj.get(), DRI)) {
InMemoryStruct<macho::Section64> Sect;
getSection64(DRI, Sect);
Result = !strcmp(Sect->Name, "__text");
Result = Sect->Flags & macho::SF_PureInstructions;
} else {
InMemoryStruct<macho::Section> Sect;
getSection(DRI, Sect);
Result = !strcmp(Sect->Name, "__text");
Result = Sect->Flags & macho::SF_PureInstructions;
}
return object_error::success;
}

Binary file not shown.

View File

@ -0,0 +1,3 @@
RUN: llvm-objdump -disassemble %p/../Inputs/macho-text-sections.macho-x86_64 | FileCheck %s
CHECK: Disassembly of section __notext,__notext