mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 16:33:28 +00:00
Fix bug 3202.
The EH_frame and .eh symbols are now private, except for darwin9 and earlier. The patch also fixes the definition of PrivateGlobalPrefix on pcc linux. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61242 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d802be39d7
commit
2f6fea90a5
@ -646,6 +646,12 @@ namespace llvm {
|
|||||||
const char *getPrivateGlobalPrefix() const {
|
const char *getPrivateGlobalPrefix() const {
|
||||||
return PrivateGlobalPrefix;
|
return PrivateGlobalPrefix;
|
||||||
}
|
}
|
||||||
|
/// EHGlobalPrefix - Prefix for EH_frame and the .eh symbols.
|
||||||
|
/// This is normally PrivateGlobalPrefix, but some targets want
|
||||||
|
/// these symbols to be visible.
|
||||||
|
virtual const char *getEHGlobalPrefix() const {
|
||||||
|
return PrivateGlobalPrefix;
|
||||||
|
}
|
||||||
const char *getLessPrivateGlobalPrefix() const {
|
const char *getLessPrivateGlobalPrefix() const {
|
||||||
return LessPrivateGlobalPrefix;
|
return LessPrivateGlobalPrefix;
|
||||||
}
|
}
|
||||||
|
@ -239,7 +239,8 @@ std::string AsmPrinter::getCurrentFunctionEHName(const MachineFunction *MF) {
|
|||||||
std::string Name = MF->getFunction()->getName();
|
std::string Name = MF->getFunction()->getName();
|
||||||
if (Name.empty())
|
if (Name.empty())
|
||||||
Name = Mang->getValueName(MF->getFunction());
|
Name = Mang->getValueName(MF->getFunction());
|
||||||
return Mang->makeNameProper(Name + ".eh", TAI->getGlobalPrefix());
|
return Mang->makeNameProper(TAI->getEHGlobalPrefix() +
|
||||||
|
Name + ".eh", TAI->getGlobalPrefix());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AsmPrinter::SetupMachineFunction(MachineFunction &MF) {
|
void AsmPrinter::SetupMachineFunction(MachineFunction &MF) {
|
||||||
|
@ -2962,7 +2962,7 @@ private:
|
|||||||
|
|
||||||
// Begin eh frame section.
|
// Begin eh frame section.
|
||||||
Asm->SwitchToTextSection(TAI->getDwarfEHFrameSection());
|
Asm->SwitchToTextSection(TAI->getDwarfEHFrameSection());
|
||||||
O << "EH_frame" << Index << ":\n";
|
O << TAI->getEHGlobalPrefix() << "EH_frame" << Index << ":\n";
|
||||||
EmitLabel("section_eh_frame", Index);
|
EmitLabel("section_eh_frame", Index);
|
||||||
|
|
||||||
// Define base labels.
|
// Define base labels.
|
||||||
|
@ -141,6 +141,9 @@ public:
|
|||||||
/// isDarwin - True if this is darwin9 (leopard, 10.5) or above.
|
/// isDarwin - True if this is darwin9 (leopard, 10.5) or above.
|
||||||
bool isDarwin9() const { return DarwinVers >= 9; }
|
bool isDarwin9() const { return DarwinVers >= 9; }
|
||||||
|
|
||||||
|
/// getDarwinVers - Return the darwin version number, 8 = tiger, 9 = leopard.
|
||||||
|
unsigned getDarwinVers() const { return DarwinVers; }
|
||||||
|
|
||||||
bool isMachoABI() const { return isDarwin() || IsPPC64; }
|
bool isMachoABI() const { return isDarwin() || IsPPC64; }
|
||||||
bool isELF32_ABI() const { return !isDarwin() && !IsPPC64; }
|
bool isELF32_ABI() const { return !isDarwin() && !IsPPC64; }
|
||||||
|
|
||||||
|
@ -89,12 +89,21 @@ PPCDarwinTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason,
|
|||||||
return DW_EH_PE_absptr;
|
return DW_EH_PE_absptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
PPCDarwinTargetAsmInfo::getEHGlobalPrefix() const
|
||||||
|
{
|
||||||
|
const PPCSubtarget* Subtarget = &TM.getSubtarget<PPCSubtarget>();
|
||||||
|
if (Subtarget->getDarwinVers() > 9)
|
||||||
|
return PrivateGlobalPrefix;
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) :
|
PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) :
|
||||||
PPCTargetAsmInfo<ELFTargetAsmInfo>(TM) {
|
PPCTargetAsmInfo<ELFTargetAsmInfo>(TM) {
|
||||||
CommentString = "#";
|
CommentString = "#";
|
||||||
GlobalPrefix = "";
|
GlobalPrefix = "";
|
||||||
PrivateGlobalPrefix = "";
|
PrivateGlobalPrefix = ".L";
|
||||||
ConstantPoolSection = "\t.section .rodata.cst4\t";
|
ConstantPoolSection = "\t.section .rodata.cst4\t";
|
||||||
JumpTableDataSection = ".section .rodata.cst4";
|
JumpTableDataSection = ".section .rodata.cst4";
|
||||||
CStringSection = ".rodata.str";
|
CStringSection = ".rodata.str";
|
||||||
|
@ -48,6 +48,7 @@ namespace llvm {
|
|||||||
explicit PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM);
|
explicit PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM);
|
||||||
virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
|
virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
|
||||||
bool Global) const;
|
bool Global) const;
|
||||||
|
virtual const char *getEHGlobalPrefix() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PPCLinuxTargetAsmInfo : public PPCTargetAsmInfo<ELFTargetAsmInfo> {
|
struct PPCLinuxTargetAsmInfo : public PPCTargetAsmInfo<ELFTargetAsmInfo> {
|
||||||
|
@ -138,6 +138,16 @@ X86DarwinTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason,
|
|||||||
return DW_EH_PE_absptr;
|
return DW_EH_PE_absptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
X86DarwinTargetAsmInfo::getEHGlobalPrefix() const
|
||||||
|
{
|
||||||
|
const X86Subtarget* Subtarget = &TM.getSubtarget<X86Subtarget>();
|
||||||
|
if (Subtarget->getDarwinVers() > 9)
|
||||||
|
return PrivateGlobalPrefix;
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM):
|
X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM):
|
||||||
X86TargetAsmInfo<ELFTargetAsmInfo>(TM) {
|
X86TargetAsmInfo<ELFTargetAsmInfo>(TM) {
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ namespace llvm {
|
|||||||
explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM);
|
explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM);
|
||||||
virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
|
virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
|
||||||
bool Global) const;
|
bool Global) const;
|
||||||
|
virtual const char *getEHGlobalPrefix() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct X86ELFTargetAsmInfo : public X86TargetAsmInfo<ELFTargetAsmInfo> {
|
struct X86ELFTargetAsmInfo : public X86TargetAsmInfo<ELFTargetAsmInfo> {
|
||||||
@ -72,4 +73,3 @@ namespace llvm {
|
|||||||
} // namespace llvm
|
} // namespace llvm
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
10
test/CodeGen/PowerPC/20081212.ll
Normal file
10
test/CodeGen/PowerPC/20081212.ll
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
; RUN: llvm-as < %s | llc -march=ppc32 -mtriple=powerpc-unknown-linux-gnu | grep ^.L_Z1fv.eh
|
||||||
|
; RUN: llvm-as < %s | llc -march=ppc32 -mtriple=powerpc-apple-darwin9 | grep ^__Z1fv.eh
|
||||||
|
|
||||||
|
define void @_Z1fv() {
|
||||||
|
entry:
|
||||||
|
br label %return
|
||||||
|
|
||||||
|
return:
|
||||||
|
ret void
|
||||||
|
}
|
12
test/CodeGen/X86/20081212.ll
Normal file
12
test/CodeGen/X86/20081212.ll
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
; RUN: llvm-as < %s | llc -march=x86-64 -mtriple=x86_64-unknown-linux-gnu | grep ^.L_Z1fv.eh
|
||||||
|
; RUN: llvm-as < %s | llc -march=x86 -mtriple=i686-unknown-linux-gnu | grep ^.L_Z1fv.eh
|
||||||
|
; RUN: llvm-as < %s | llc -march=x86-64 -mtriple=-mtriple=x86_64-apple-darwin9 | grep ^__Z1fv.eh
|
||||||
|
; RUN: llvm-as < %s | llc -march=x86 -mtriple=-mtriple=i386-apple-darwin9 | grep ^__Z1fv.eh
|
||||||
|
|
||||||
|
define void @_Z1fv() {
|
||||||
|
entry:
|
||||||
|
br label %return
|
||||||
|
|
||||||
|
return:
|
||||||
|
ret void
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user