1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00

Add the suffix to the Win64 EH data sections' names if given. Add a test for

this. XFAIL'd, because the COFF AsmParser can't handle .section yet.

llvm-svn: 132220
This commit is contained in:
Charles Davis 2011-05-27 21:38:47 +00:00
parent 531aa71d22
commit cb20ea9935
3 changed files with 61 additions and 6 deletions

View File

@ -213,12 +213,8 @@ public:
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
virtual const MCSection *getEHFrameSection() const;
virtual const MCSection *getWin64EHFuncTableSection(StringRef) const {
return PDataSection;
}
virtual const MCSection *getWin64EHTableSection(StringRef) const {
return XDataSection;
}
virtual const MCSection *getWin64EHFuncTableSection(StringRef) const;
virtual const MCSection *getWin64EHTableSection(StringRef) const;
virtual const MCSection *getDrectveSection() const { return DrectveSection; }

View File

@ -1014,6 +1014,28 @@ const MCSection *TargetLoweringObjectFileCOFF::getEHFrameSection() const {
SectionKind::getDataRel());
}
const MCSection *TargetLoweringObjectFileCOFF::getWin64EHFuncTableSection(
StringRef suffix) const {
if (suffix == "")
return PDataSection;
return getContext().getCOFFSection((".pdata"+suffix).str(),
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ |
COFF::IMAGE_SCN_MEM_WRITE,
SectionKind::getDataRel());
}
const MCSection *TargetLoweringObjectFileCOFF::getWin64EHTableSection(
StringRef suffix) const {
if (suffix == "")
return XDataSection;
return getContext().getCOFFSection((".xdata"+suffix).str(),
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ |
COFF::IMAGE_SCN_MEM_WRITE,
SectionKind::getDataRel());
}
static unsigned
getCOFFSectionFlags(SectionKind K) {

View File

@ -0,0 +1,37 @@
// This test ensures that, if the section containing a function has a suffix
// (e.g. .text$foo), its unwind info section also has a suffix (.xdata$foo).
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | coff-dump.py | FileCheck %s
// XFAIL: *
// CHECK: Name = .xdata$foo
// CHECK-NEXT: VirtualSize
// CHECK-NEXT: VirtualAddress
// CHECK-NEXT: SizeOfRawData = 8
// CHECK-NEXT: PointerToRawData
// CHECK-NEXT: PointerToRelocations
// CHECK-NEXT: PointerToLineNumbers
// CHECK-NEXT: NumberOfRelocations = 0
// CHECK-NEXT: NumberOfLineNumbers = 0
// CHECK-NEXT: Charateristics
// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
// CHECK-NEXT: IMAGE_SCN_ALIGN_4BYTES
// CHECK-NEXT: IMAGE_SCN_MEM_READ
// CHECK-NEXT: IMAGE_SCN_MEM_WRITE
// CHECK-NEXT: SectionData
// CHECK-NEXT: 01 05 02 00 05 50 04 02
.section .text$foo,"x"
.globl foo
.def foo; .scl 2; .type 32; .endef
.seh_proc foo
foo:
subq $8, %rsp
.seh_stackalloc 8
pushq %rbp
.seh_pushreg %rbp
.seh_endprologue
popq %rbp
addq $8, %rsp
ret
.seh_endproc