From: Tim Northover Date: Thu, 21 Apr 2016 23:00:17 +0000 (+0000) Subject: MachO: enable .data_region directives everywhere X-Git-Tag: llvmorg-3.9.0-rc1~8385 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c52c74efdf43f35c7d1b9dcda309218b50573677;p=platform%2Fupstream%2Fllvm.git MachO: enable .data_region directives everywhere We'd disabled them on x86 because back in the early days some host tools couldn't handle the new load commands. This no longer holds: anyone capable of deploying Clang should be able to deploy its copies of ar/ranlib/etc. rdar://25254790 llvm-svn: 267075 --- diff --git a/llvm/include/llvm/MC/MCAsmBackend.h b/llvm/include/llvm/MC/MCAsmBackend.h index af0d366..40ff8e3 100644 --- a/llvm/include/llvm/MC/MCAsmBackend.h +++ b/llvm/include/llvm/MC/MCAsmBackend.h @@ -39,8 +39,6 @@ class MCAsmBackend { protected: // Can only create subclasses. MCAsmBackend(); - unsigned HasDataInCodeSupport : 1; - public: virtual ~MCAsmBackend(); @@ -58,10 +56,6 @@ public: "backend"); } - /// Check whether this target implements data-in-code markers. If not, data - /// region directives will be ignored. - bool hasDataInCodeSupport() const { return HasDataInCodeSupport; } - /// \name Target Fixup Interfaces /// @{ diff --git a/llvm/lib/MC/MCAsmBackend.cpp b/llvm/lib/MC/MCAsmBackend.cpp index 281bba2..b868b9d 100644 --- a/llvm/lib/MC/MCAsmBackend.cpp +++ b/llvm/lib/MC/MCAsmBackend.cpp @@ -12,7 +12,7 @@ #include "llvm/MC/MCFixupKindInfo.h" using namespace llvm; -MCAsmBackend::MCAsmBackend() : HasDataInCodeSupport(false) {} +MCAsmBackend::MCAsmBackend() {} MCAsmBackend::~MCAsmBackend() {} diff --git a/llvm/lib/MC/MCMachOStreamer.cpp b/llvm/lib/MC/MCMachOStreamer.cpp index 7f0bfbd9..45a4972 100644 --- a/llvm/lib/MC/MCMachOStreamer.cpp +++ b/llvm/lib/MC/MCMachOStreamer.cpp @@ -214,8 +214,6 @@ void MCMachOStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) { } void MCMachOStreamer::EmitDataRegion(DataRegionData::KindTy Kind) { - if (!getAssembler().getBackend().hasDataInCodeSupport()) - return; // Create a temporary label to mark the start of the data region. MCSymbol *Start = getContext().createTempSymbol(); EmitLabel(Start); @@ -226,8 +224,6 @@ void MCMachOStreamer::EmitDataRegion(DataRegionData::KindTy Kind) { } void MCMachOStreamer::EmitDataRegionEnd() { - if (!getAssembler().getBackend().hasDataInCodeSupport()) - return; std::vector &Regions = getAssembler().getDataRegions(); assert(!Regions.empty() && "Mismatched .end_data_region!"); DataRegionData &Data = Regions.back(); diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackendDarwin.h b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackendDarwin.h index 23e5005..09dc017 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackendDarwin.h +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackendDarwin.h @@ -21,7 +21,6 @@ public: ARMAsmBackendDarwin(const Target &T, const Triple &TT, const MCRegisterInfo &MRI, MachO::CPUSubTypeARM st) : ARMAsmBackend(T, TT, /* IsLittleEndian */ true), MRI(MRI), Subtype(st) { - HasDataInCodeSupport = true; } MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override { diff --git a/llvm/test/MC/MachO/AArch64/data-in-code.s b/llvm/test/MC/MachO/AArch64/data-in-code.s new file mode 100644 index 0000000..cf7d860 --- /dev/null +++ b/llvm/test/MC/MachO/AArch64/data-in-code.s @@ -0,0 +1,49 @@ +// RUN: llvm-mc -triple arm64-apple-darwin10 -filetype=obj -o - < %s | llvm-readobj --macho-data-in-code | FileCheck %s + .text +_foo: +.data_region + .long 10 +.end_data_region +.data_region jt32 + .long 1 +.end_data_region +.data_region jt16 + .short 2 +.end_data_region +.data_region jt8 + .byte 3 +.end_data_region + +// CHECK: File: +// CHECK: Format: Mach-O arm64 +// CHECK: Arch: aarch64 +// CHECK: AddressSize: 64bit +// CHECK: DataInCode { +// CHECK: Data size: 32 +// CHECK: Data entries [ +// CHECK: Entry { +// CHECK: Index: 0 +// CHECK: Offset: 0 +// CHECK: Length: 4 +// CHECK: Kind: 1 +// CHECK: } +// CHECK: Entry { +// CHECK: Index: 1 +// CHECK: Offset: 4 +// CHECK: Length: 4 +// CHECK: Kind: 4 +// CHECK: } +// CHECK: Entry { +// CHECK: Index: 2 +// CHECK: Offset: 8 +// CHECK: Length: 2 +// CHECK: Kind: 3 +// CHECK: } +// CHECK: Entry { +// CHECK: Index: 3 +// CHECK: Offset: 10 +// CHECK: Length: 1 +// CHECK: Kind: 2 +// CHECK: } +// CHECK: ] +// CHECK: } diff --git a/llvm/test/MC/MachO/x86-data-in-code.ll b/llvm/test/MC/MachO/x86-data-in-code.ll deleted file mode 100644 index b8d3a18..0000000 --- a/llvm/test/MC/MachO/x86-data-in-code.ll +++ /dev/null @@ -1,107 +0,0 @@ -; RUN: llc -O0 -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-readobj -macho-data-in-code | FileCheck %s - -; There should not be a data-in-code load command (type 0x29) for x86_64 -; jump tables, even though they are in the text section. -; CHECK-NOT: DataInCode { - -define void @foo(i32* %ptr) nounwind ssp { - %tmp = load i32, i32* %ptr, align 4 - switch i32 %tmp, label %default [ - i32 11, label %bb0 - i32 10, label %bb1 - i32 8, label %bb2 - i32 4, label %bb3 - i32 2, label %bb4 - i32 6, label %bb5 - i32 9, label %bb6 - i32 15, label %bb7 - i32 1, label %bb8 - i32 3, label %bb9 - i32 5, label %bb10 - i32 30, label %bb11 - i32 31, label %bb12 - i32 13, label %bb13 - i32 14, label %bb14 - i32 20, label %bb15 - i32 19, label %bb16 - i32 17, label %bb17 - i32 18, label %bb18 - i32 21, label %bb19 - i32 22, label %bb20 - i32 16, label %bb21 - i32 24, label %bb22 - i32 25, label %bb23 - i32 26, label %bb24 - i32 27, label %bb25 - i32 28, label %bb26 - i32 23, label %bb27 - i32 12, label %bb28 - ] - -default: - br label %exit -bb0: - br label %exit -bb1: - br label %exit -bb2: - br label %exit -bb3: - br label %exit -bb4: - br label %exit -bb5: - br label %exit -bb6: - br label %exit -bb7: - br label %exit -bb8: - br label %exit -bb9: - br label %exit -bb10: - br label %exit -bb11: - br label %exit -bb12: - br label %exit -bb13: - br label %exit -bb14: - br label %exit -bb15: - br label %exit -bb16: - br label %exit -bb17: - br label %exit -bb18: - br label %exit -bb19: - br label %exit -bb20: - br label %exit -bb21: - br label %exit -bb22: - br label %exit -bb23: - br label %exit -bb24: - br label %exit -bb25: - br label %exit -bb26: - br label %exit -bb27: - br label %exit -bb28: - br label %exit - - -exit: - - ret void -} - diff --git a/llvm/test/MC/MachO/x86-data-in-code.s b/llvm/test/MC/MachO/x86-data-in-code.s new file mode 100644 index 0000000..e7b2406 --- /dev/null +++ b/llvm/test/MC/MachO/x86-data-in-code.s @@ -0,0 +1,47 @@ +// RUN: llvm-mc -triple x86_64-apple-darwin10 -filetype=obj -o - < %s | llvm-readobj --macho-data-in-code | FileCheck %s +// RUN: llvm-mc -triple i686-apple-darwin10 -filetype=obj -o - < %s | llvm-readobj --macho-data-in-code | FileCheck %s + + .text +_foo: +.data_region + .long 10 +.end_data_region +.data_region jt32 + .long 1 +.end_data_region +.data_region jt16 + .short 2 +.end_data_region +.data_region jt8 + .byte 3 +.end_data_region + +// CHECK: DataInCode { +// CHECK: Data size: 32 +// CHECK: Data entries [ +// CHECK: Entry { +// CHECK: Index: 0 +// CHECK: Offset: 0 +// CHECK: Length: 4 +// CHECK: Kind: 1 +// CHECK: } +// CHECK: Entry { +// CHECK: Index: 1 +// CHECK: Offset: 4 +// CHECK: Length: 4 +// CHECK: Kind: 4 +// CHECK: } +// CHECK: Entry { +// CHECK: Index: 2 +// CHECK: Offset: 8 +// CHECK: Length: 2 +// CHECK: Kind: 3 +// CHECK: } +// CHECK: Entry { +// CHECK: Index: 3 +// CHECK: Offset: 10 +// CHECK: Length: 1 +// CHECK: Kind: 2 +// CHECK: } +// CHECK: ] +// CHECK: }