mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-05 14:34:55 +00:00
On Darwin, ams printer should output a second label before a jump table so the linker knows it's a new atom. But this is only needed if the jump table is put in a separate section from the function body.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73720 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bcf9737f1e
commit
b13bafe5c1
@ -347,8 +347,9 @@ void AsmPrinter::EmitJumpTableInfo(MachineJumpTableInfo *MJTI,
|
|||||||
const char* JumpTableDataSection = TAI->getJumpTableDataSection();
|
const char* JumpTableDataSection = TAI->getJumpTableDataSection();
|
||||||
const Function *F = MF.getFunction();
|
const Function *F = MF.getFunction();
|
||||||
unsigned SectionFlags = TAI->SectionFlagsForGlobal(F);
|
unsigned SectionFlags = TAI->SectionFlagsForGlobal(F);
|
||||||
|
bool JTInDiffSection = false;
|
||||||
if ((IsPic && !(LoweringInfo && LoweringInfo->usesGlobalOffsetTable())) ||
|
if ((IsPic && !(LoweringInfo && LoweringInfo->usesGlobalOffsetTable())) ||
|
||||||
!JumpTableDataSection ||
|
!JumpTableDataSection ||
|
||||||
SectionFlags & SectionFlags::Linkonce) {
|
SectionFlags & SectionFlags::Linkonce) {
|
||||||
// In PIC mode, we need to emit the jump table to the same section as the
|
// In PIC mode, we need to emit the jump table to the same section as the
|
||||||
// function body itself, otherwise the label differences won't make sense.
|
// function body itself, otherwise the label differences won't make sense.
|
||||||
@ -357,6 +358,7 @@ void AsmPrinter::EmitJumpTableInfo(MachineJumpTableInfo *MJTI,
|
|||||||
SwitchToSection(TAI->SectionForGlobal(F));
|
SwitchToSection(TAI->SectionForGlobal(F));
|
||||||
} else {
|
} else {
|
||||||
SwitchToDataSection(JumpTableDataSection);
|
SwitchToDataSection(JumpTableDataSection);
|
||||||
|
JTInDiffSection = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmitAlignment(Log2_32(MJTI->getAlignment()));
|
EmitAlignment(Log2_32(MJTI->getAlignment()));
|
||||||
@ -380,8 +382,10 @@ void AsmPrinter::EmitJumpTableInfo(MachineJumpTableInfo *MJTI,
|
|||||||
// before each jump table. The first label is never referenced, but tells
|
// before each jump table. The first label is never referenced, but tells
|
||||||
// the assembler and linker the extents of the jump table object. The
|
// the assembler and linker the extents of the jump table object. The
|
||||||
// second label is actually referenced by the code.
|
// second label is actually referenced by the code.
|
||||||
if (const char *JTLabelPrefix = TAI->getJumpTableSpecialLabelPrefix())
|
if (JTInDiffSection) {
|
||||||
O << JTLabelPrefix << "JTI" << getFunctionNumber() << '_' << i << ":\n";
|
if (const char *JTLabelPrefix = TAI->getJumpTableSpecialLabelPrefix())
|
||||||
|
O << JTLabelPrefix << "JTI" << getFunctionNumber() << '_' << i << ":\n";
|
||||||
|
}
|
||||||
|
|
||||||
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
|
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
|
||||||
<< '_' << i << ":\n";
|
<< '_' << i << ":\n";
|
||||||
|
@ -74,10 +74,10 @@ ARMDarwinTargetAsmInfo::ARMDarwinTargetAsmInfo(const ARMTargetMachine &TM):
|
|||||||
|
|
||||||
// In non-PIC modes, emit a special label before jump tables so that the
|
// In non-PIC modes, emit a special label before jump tables so that the
|
||||||
// linker can perform more accurate dead code stripping.
|
// linker can perform more accurate dead code stripping.
|
||||||
if (TM.getRelocationModel() != Reloc::PIC_) {
|
// Emit a local label that is preserved until the linker runs.
|
||||||
// Emit a local label that is preserved until the linker runs.
|
// We do not check the relocation model here since it can be overridden
|
||||||
JumpTableSpecialLabelPrefix = "l";
|
// later.
|
||||||
}
|
JumpTableSpecialLabelPrefix = "l";
|
||||||
|
|
||||||
NeedsSet = true;
|
NeedsSet = true;
|
||||||
DwarfAbbrevSection = ".section __DWARF,__debug_abbrev,regular,debug";
|
DwarfAbbrevSection = ".section __DWARF,__debug_abbrev,regular,debug";
|
||||||
|
@ -68,10 +68,9 @@ PPCDarwinTargetAsmInfo::PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM):
|
|||||||
|
|
||||||
// In non-PIC modes, emit a special label before jump tables so that the
|
// In non-PIC modes, emit a special label before jump tables so that the
|
||||||
// linker can perform more accurate dead code stripping.
|
// linker can perform more accurate dead code stripping.
|
||||||
if (TM.getRelocationModel() != Reloc::PIC_) {
|
// We do not check the relocation model here since it can be overridden
|
||||||
// Emit a local label that is preserved until the linker runs.
|
// later.
|
||||||
JumpTableSpecialLabelPrefix = "l";
|
JumpTableSpecialLabelPrefix = "l";
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// PreferredEHDataFormat - This hook allows the target to select data
|
/// PreferredEHDataFormat - This hook allows the target to select data
|
||||||
|
@ -99,10 +99,10 @@ X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM):
|
|||||||
|
|
||||||
// In non-PIC modes, emit a special label before jump tables so that the
|
// In non-PIC modes, emit a special label before jump tables so that the
|
||||||
// linker can perform more accurate dead code stripping.
|
// linker can perform more accurate dead code stripping.
|
||||||
if (TM.getRelocationModel() != Reloc::PIC_) {
|
// Emit a local label that is preserved until the linker runs.
|
||||||
// Emit a local label that is preserved until the linker runs.
|
// We do not check the relocation model here since it can be overridden
|
||||||
JumpTableSpecialLabelPrefix = "l";
|
// later.
|
||||||
}
|
JumpTableSpecialLabelPrefix = "l";
|
||||||
|
|
||||||
SupportsDebugInformation = true;
|
SupportsDebugInformation = true;
|
||||||
NeedsSet = true;
|
NeedsSet = true;
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
; RUN: llvm-as < %s | llc -relocation-model=pic -mtriple=i386-linux-gnu -asm-verbose=false | not grep -F .text
|
; RUN: llvm-as < %s | llc -relocation-model=pic -mtriple=i386-linux-gnu -asm-verbose=false | not grep -F .text
|
||||||
; RUN: llvm-as < %s | llc -relocation-model=pic -mtriple=i686-apple-darwin -asm-verbose=false | not grep lea
|
; RUN: llvm-as < %s | llc -relocation-model=pic -mtriple=i686-apple-darwin -asm-verbose=false | not grep lea
|
||||||
; RUN: llvm-as < %s | llc -relocation-model=pic -mtriple=i686-apple-darwin -asm-verbose=false | grep add | count 2
|
; RUN: llvm-as < %s | llc -relocation-model=pic -mtriple=i686-apple-darwin -asm-verbose=false | grep add | count 2
|
||||||
|
; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin | not grep 'lJTI'
|
||||||
|
; rdar://6971437
|
||||||
|
|
||||||
declare void @_Z3bari(i32)
|
declare void @_Z3bari(i32)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user