summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2016-04-21 23:00:17 +0000
committerTim Northover <tnorthover@apple.com>2016-04-21 23:00:17 +0000
commitc52c74efdf43f35c7d1b9dcda309218b50573677 (patch)
tree2530d8ed9847b13cac124e335677b6ba1d8bd9dd
parent89dd1dd2782de71d56c512e44b9dfda2f7b95351 (diff)
downloadbcm5719-llvm-c52c74efdf43f35c7d1b9dcda309218b50573677.tar.gz
bcm5719-llvm-c52c74efdf43f35c7d1b9dcda309218b50573677.zip
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
-rw-r--r--llvm/include/llvm/MC/MCAsmBackend.h6
-rw-r--r--llvm/lib/MC/MCAsmBackend.cpp2
-rw-r--r--llvm/lib/MC/MCMachOStreamer.cpp4
-rw-r--r--llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackendDarwin.h1
-rw-r--r--llvm/test/MC/MachO/AArch64/data-in-code.s49
-rw-r--r--llvm/test/MC/MachO/x86-data-in-code.ll107
-rw-r--r--llvm/test/MC/MachO/x86-data-in-code.s47
7 files changed, 97 insertions, 119 deletions
diff --git a/llvm/include/llvm/MC/MCAsmBackend.h b/llvm/include/llvm/MC/MCAsmBackend.h
index af0d366d400..40ff8e341cf 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 281bba27a0e..b868b9d4889 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 7f0bfbd9a65..45a497240b4 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<DataRegionData> &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 23e5005bd91..09dc0173ade 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 00000000000..cf7d860a622
--- /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: <stdin>
+// 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 b8d3a185cbd..00000000000
--- 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 00000000000..e7b2406e5d0
--- /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: }
OpenPOWER on IntegriCloud