mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 02:33:33 +00:00
Delay the creation of eh_frame so that the user can change the defaults.
Add support for SHT_X86_64_UNWIND. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124059 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
11e222da1f
commit
0cf5e3d51d
@ -57,6 +57,8 @@ public:
|
||||
|
||||
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
|
||||
|
||||
virtual const MCSection *getEHFrameSection() const;
|
||||
|
||||
const MCSection *getDataRelSection() const { return DataRelSection; }
|
||||
|
||||
/// getSectionForConstant - Given a constant with the SectionKind, return a
|
||||
@ -121,6 +123,8 @@ public:
|
||||
|
||||
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
|
||||
|
||||
virtual const MCSection *getEHFrameSection() const;
|
||||
|
||||
virtual const MCSection *
|
||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
Mangler *Mang, const TargetMachine &TM) const;
|
||||
@ -184,6 +188,8 @@ public:
|
||||
|
||||
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
|
||||
|
||||
virtual const MCSection *getEHFrameSection() const;
|
||||
|
||||
virtual const MCSection *getDrectveSection() const { return DrectveSection; }
|
||||
|
||||
virtual const MCSection *
|
||||
|
@ -501,6 +501,8 @@ enum {
|
||||
SHT_ARM_DEBUGOVERLAY = 0x70000004U,
|
||||
SHT_ARM_OVERLAYSECTION = 0x70000005U,
|
||||
|
||||
SHT_X86_64_UNWIND = 0x70000001, // Unwind information
|
||||
|
||||
SHT_HIPROC = 0x7fffffff, // Highest processor architecture-specific type.
|
||||
SHT_LOUSER = 0x80000000, // Lowest type reserved for applications.
|
||||
SHT_HIUSER = 0xffffffff // Highest type reserved for applications.
|
||||
|
@ -69,10 +69,6 @@ protected:
|
||||
/// the section the Language Specific Data Area information is emitted to.
|
||||
const MCSection *LSDASection;
|
||||
|
||||
/// EHFrameSection - If exception handling is supported by the target, this is
|
||||
/// the section the EH Frame is emitted to.
|
||||
const MCSection *EHFrameSection;
|
||||
|
||||
// Dwarf sections for debug info. If a target supports debug info, these must
|
||||
// be set.
|
||||
const MCSection *DwarfAbbrevSection;
|
||||
@ -143,7 +139,7 @@ public:
|
||||
const MCSection *getStaticCtorSection() const { return StaticCtorSection; }
|
||||
const MCSection *getStaticDtorSection() const { return StaticDtorSection; }
|
||||
const MCSection *getLSDASection() const { return LSDASection; }
|
||||
const MCSection *getEHFrameSection() const { return EHFrameSection; }
|
||||
virtual const MCSection *getEHFrameSection() const = 0;
|
||||
const MCSection *getDwarfAbbrevSection() const { return DwarfAbbrevSection; }
|
||||
const MCSection *getDwarfInfoSection() const { return DwarfInfoSection; }
|
||||
const MCSection *getDwarfLineSection() const { return DwarfLineSection; }
|
||||
|
@ -134,11 +134,6 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
|
||||
getContext().getELFSection(".gcc_except_table", ELF::SHT_PROGBITS,
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getReadOnly());
|
||||
EHFrameSection =
|
||||
getContext().getELFSection(".eh_frame", ELF::SHT_PROGBITS,
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getDataRel());
|
||||
|
||||
// Debug Info Sections.
|
||||
DwarfAbbrevSection =
|
||||
getContext().getELFSection(".debug_abbrev", ELF::SHT_PROGBITS, 0,
|
||||
@ -175,6 +170,11 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
|
||||
SectionKind::getMetadata());
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileELF::getEHFrameSection() const {
|
||||
return getContext().getELFSection(".eh_frame", ELF::SHT_PROGBITS,
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getDataRel());
|
||||
}
|
||||
|
||||
static SectionKind
|
||||
getELFKindForNamedSection(StringRef Name, SectionKind K) {
|
||||
@ -581,14 +581,6 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
|
||||
// Exception Handling.
|
||||
LSDASection = getContext().getMachOSection("__TEXT", "__gcc_except_tab", 0,
|
||||
SectionKind::getReadOnlyWithRel());
|
||||
EHFrameSection =
|
||||
getContext().getMachOSection("__TEXT", "__eh_frame",
|
||||
MCSectionMachO::S_COALESCED |
|
||||
MCSectionMachO::S_ATTR_NO_TOC |
|
||||
MCSectionMachO::S_ATTR_STRIP_STATIC_SYMS |
|
||||
MCSectionMachO::S_ATTR_LIVE_SUPPORT,
|
||||
SectionKind::getReadOnly());
|
||||
|
||||
// Debug Information.
|
||||
DwarfAbbrevSection =
|
||||
getContext().getMachOSection("__DWARF", "__debug_abbrev",
|
||||
@ -642,6 +634,15 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
|
||||
TLSExtraDataSection = TLSTLVSection;
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileMachO::getEHFrameSection() const {
|
||||
return getContext().getMachOSection("__TEXT", "__eh_frame",
|
||||
MCSectionMachO::S_COALESCED |
|
||||
MCSectionMachO::S_ATTR_NO_TOC |
|
||||
MCSectionMachO::S_ATTR_STRIP_STATIC_SYMS |
|
||||
MCSectionMachO::S_ATTR_LIVE_SUPPORT,
|
||||
SectionKind::getReadOnly());
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileMachO::
|
||||
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
Mangler *Mang, const TargetMachine &TM) const {
|
||||
@ -873,13 +874,6 @@ void TargetLoweringObjectFileCOFF::Initialize(MCContext &Ctx,
|
||||
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
||||
COFF::IMAGE_SCN_MEM_READ,
|
||||
SectionKind::getReadOnly());
|
||||
EHFrameSection =
|
||||
getContext().getCOFFSection(".eh_frame",
|
||||
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
||||
COFF::IMAGE_SCN_MEM_READ |
|
||||
COFF::IMAGE_SCN_MEM_WRITE,
|
||||
SectionKind::getDataRel());
|
||||
|
||||
// Debug info.
|
||||
DwarfAbbrevSection =
|
||||
getContext().getCOFFSection(".debug_abbrev",
|
||||
@ -943,6 +937,15 @@ void TargetLoweringObjectFileCOFF::Initialize(MCContext &Ctx,
|
||||
SectionKind::getMetadata());
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileCOFF::getEHFrameSection() const {
|
||||
return getContext().getCOFFSection(".eh_frame",
|
||||
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
||||
COFF::IMAGE_SCN_MEM_READ |
|
||||
COFF::IMAGE_SCN_MEM_WRITE,
|
||||
SectionKind::getDataRel());
|
||||
}
|
||||
|
||||
|
||||
static unsigned
|
||||
getCOFFSectionFlags(SectionKind K) {
|
||||
unsigned Flags = 0;
|
||||
|
@ -1271,6 +1271,7 @@ void ELFObjectWriter::WriteSection(MCAssembler &Asm,
|
||||
case ELF::SHT_INIT_ARRAY:
|
||||
case ELF::SHT_FINI_ARRAY:
|
||||
case ELF::SHT_PREINIT_ARRAY:
|
||||
case ELF::SHT_X86_64_UNWIND:
|
||||
// Nothing to do.
|
||||
break;
|
||||
|
||||
|
@ -338,6 +338,8 @@ bool ELFAsmParser::ParseDirectiveSection(StringRef, SMLoc) {
|
||||
Type = ELF::SHT_PROGBITS;
|
||||
else if (TypeName == "note")
|
||||
Type = ELF::SHT_NOTE;
|
||||
else if (TypeName == "unwind")
|
||||
Type = ELF::SHT_X86_64_UNWIND;
|
||||
else
|
||||
return TokError("unknown section type");
|
||||
}
|
||||
|
@ -43,7 +43,6 @@ TargetLoweringObjectFile::TargetLoweringObjectFile() : Ctx(0) {
|
||||
StaticCtorSection = 0;
|
||||
StaticDtorSection = 0;
|
||||
LSDASection = 0;
|
||||
EHFrameSection = 0;
|
||||
|
||||
CommDirectiveSupportsAlignment = true;
|
||||
DwarfAbbrevSection = 0;
|
||||
|
@ -85,3 +85,19 @@ foo:
|
||||
bar:
|
||||
.section .text.foo,"axG",@progbits,foo,comdat
|
||||
.section .text.bar,"axMG",@progbits,42,bar,comdat
|
||||
|
||||
// Test that the default values are not used
|
||||
|
||||
.section .eh_frame,"a",@unwind
|
||||
|
||||
// CHECK: (('sh_name', 0x00000080) # '.eh_frame'
|
||||
// CHECK-NEXT: ('sh_type', 0x70000001)
|
||||
// CHECK-NEXT: ('sh_flags', 0x00000002)
|
||||
// CHECK-NEXT: ('sh_addr', 0x00000000)
|
||||
// CHECK-NEXT: ('sh_offset', 0x00000050)
|
||||
// CHECK-NEXT: ('sh_size', 0x00000000)
|
||||
// CHECK-NEXT: ('sh_link', 0x00000000)
|
||||
// CHECK-NEXT: ('sh_info', 0x00000000)
|
||||
// CHECK-NEXT: ('sh_addralign', 0x00000001)
|
||||
// CHECK-NEXT: ('sh_entsize', 0x00000000)
|
||||
// CHECK-NEXT: ),
|
||||
|
Loading…
x
Reference in New Issue
Block a user