diff options
author | Tim Northover <Tim.Northover@arm.com> | 2012-12-17 17:59:32 +0000 |
---|---|---|
committer | Tim Northover <Tim.Northover@arm.com> | 2012-12-17 17:59:32 +0000 |
commit | 5edabc131a091a82b15a8166aa3d4d6c9bd8d85f (patch) | |
tree | 71d74c21b361d3200a8a7b45ad2fe8035cea51bc /llvm | |
parent | 926758ba4500e95eb2c40708b165090c66d8f199 (diff) | |
download | bcm5719-llvm-5edabc131a091a82b15a8166aa3d4d6c9bd8d85f.tar.gz bcm5719-llvm-5edabc131a091a82b15a8166aa3d4d6c9bd8d85f.zip |
Teach MachO which sections contain code
llvm-svn: 170349
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/Object/MachOFormat.h | 4 | ||||
-rw-r--r-- | llvm/lib/MC/MCParser/DarwinAsmParser.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/Object/MachOObjectFile.cpp | 4 | ||||
-rw-r--r-- | llvm/test/Object/Inputs/macho-text-sections.macho-x86_64 | bin | 0 -> 268 bytes | |||
-rw-r--r-- | llvm/test/Object/X86/macho-text-sections.test | 3 |
5 files changed, 10 insertions, 3 deletions
diff --git a/llvm/include/llvm/Object/MachOFormat.h b/llvm/include/llvm/Object/MachOFormat.h index c0f700d3c87..a17d58dae23 100644 --- a/llvm/include/llvm/Object/MachOFormat.h +++ b/llvm/include/llvm/Object/MachOFormat.h @@ -237,6 +237,10 @@ namespace macho { /// @name Section Data /// @{ + enum SectionFlags { + SF_PureInstructions = 0x80000000 + }; + struct Section { char Name[16]; char SegmentName[16]; diff --git a/llvm/lib/MC/MCParser/DarwinAsmParser.cpp b/llvm/lib/MC/MCParser/DarwinAsmParser.cpp index 20c949dbdaa..7b042df292e 100644 --- a/llvm/lib/MC/MCParser/DarwinAsmParser.cpp +++ b/llvm/lib/MC/MCParser/DarwinAsmParser.cpp @@ -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() diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp index a38fac78aae..40f5390a96f 100644 --- a/llvm/lib/Object/MachOObjectFile.cpp +++ b/llvm/lib/Object/MachOObjectFile.cpp @@ -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; } diff --git a/llvm/test/Object/Inputs/macho-text-sections.macho-x86_64 b/llvm/test/Object/Inputs/macho-text-sections.macho-x86_64 Binary files differnew file mode 100644 index 00000000000..cce203ba0d8 --- /dev/null +++ b/llvm/test/Object/Inputs/macho-text-sections.macho-x86_64 diff --git a/llvm/test/Object/X86/macho-text-sections.test b/llvm/test/Object/X86/macho-text-sections.test new file mode 100644 index 00000000000..1b697dcadad --- /dev/null +++ b/llvm/test/Object/X86/macho-text-sections.test @@ -0,0 +1,3 @@ +RUN: llvm-objdump -disassemble %p/../Inputs/macho-text-sections.macho-x86_64 | FileCheck %s + +CHECK: Disassembly of section __notext,__notext |