mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-21 21:41:43 +00:00
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267075 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
12098d3b4a
commit
361618ec68
@ -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
|
||||
/// @{
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
#include "llvm/MC/MCFixupKindInfo.h"
|
||||
using namespace llvm;
|
||||
|
||||
MCAsmBackend::MCAsmBackend() : HasDataInCodeSupport(false) {}
|
||||
MCAsmBackend::MCAsmBackend() {}
|
||||
|
||||
MCAsmBackend::~MCAsmBackend() {}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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 {
|
||||
|
49
test/MC/MachO/AArch64/data-in-code.s
Normal file
49
test/MC/MachO/AArch64/data-in-code.s
Normal file
@ -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: }
|
@ -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
|
||||
}
|
||||
|
47
test/MC/MachO/x86-data-in-code.s
Normal file
47
test/MC/MachO/x86-data-in-code.s
Normal file
@ -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: }
|
Loading…
x
Reference in New Issue
Block a user