mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-03 09:21:13 +00:00
Enable EH for linux/ppc32 targets
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45281 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0b0102b172
commit
616585bbff
@ -167,14 +167,12 @@ PPCTargetLowering::PPCTargetLowering(PPCTargetMachine &TM)
|
||||
// Support label based line numbers.
|
||||
setOperationAction(ISD::LOCATION, MVT::Other, Expand);
|
||||
setOperationAction(ISD::DEBUG_LOC, MVT::Other, Expand);
|
||||
if (!TM.getSubtarget<PPCSubtarget>().isDarwin()) {
|
||||
setOperationAction(ISD::LABEL, MVT::Other, Expand);
|
||||
} else {
|
||||
setOperationAction(ISD::EXCEPTIONADDR, MVT::i64, Expand);
|
||||
setOperationAction(ISD::EHSELECTION, MVT::i64, Expand);
|
||||
setOperationAction(ISD::EXCEPTIONADDR, MVT::i32, Expand);
|
||||
setOperationAction(ISD::EHSELECTION, MVT::i32, Expand);
|
||||
}
|
||||
|
||||
setOperationAction(ISD::EXCEPTIONADDR, MVT::i64, Expand);
|
||||
setOperationAction(ISD::EHSELECTION, MVT::i64, Expand);
|
||||
setOperationAction(ISD::EXCEPTIONADDR, MVT::i32, Expand);
|
||||
setOperationAction(ISD::EHSELECTION, MVT::i32, Expand);
|
||||
|
||||
|
||||
// We want to legalize GlobalAddress and ConstantPool nodes into the
|
||||
// appropriate instructions to materialize the address.
|
||||
@ -1771,9 +1769,9 @@ static SDOperand LowerCALL(SDOperand Op, SelectionDAG &DAG,
|
||||
// If the callee is a GlobalAddress/ExternalSymbol node (quite common, every
|
||||
// direct call is) turn it into a TargetGlobalAddress/TargetExternalSymbol
|
||||
// node so that legalize doesn't hack it.
|
||||
if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee))
|
||||
Callee = DAG.getTargetGlobalAddress(G->getGlobal(), Callee.getValueType());
|
||||
else if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee))
|
||||
//if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee))
|
||||
// Callee = DAG.getTargetGlobalAddress(G->getGlobal(), Callee.getValueType());
|
||||
if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee))
|
||||
Callee = DAG.getTargetExternalSymbol(S->getSymbol(), Callee.getValueType());
|
||||
else if (SDNode *Dest = isBLACompatibleAddress(Callee, DAG))
|
||||
// If this is an absolute destination address, use the munged value.
|
||||
|
@ -28,10 +28,6 @@ PPCTargetAsmInfo::PPCTargetAsmInfo(const PPCTargetMachine &TM) {
|
||||
InlineAsmEnd = "# InlineAsm End";
|
||||
AssemblerDialect = TM.getSubtargetImpl()->getAsmFlavor();
|
||||
|
||||
NeedsSet = true;
|
||||
DwarfEHFrameSection =
|
||||
".section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support";
|
||||
DwarfExceptionSection = ".section __DATA,__gcc_except_tab";
|
||||
}
|
||||
|
||||
DarwinTargetAsmInfo::DarwinTargetAsmInfo(const PPCTargetMachine &TM)
|
||||
@ -60,7 +56,12 @@ DarwinTargetAsmInfo::DarwinTargetAsmInfo(const PPCTargetMachine &TM)
|
||||
HiddenDirective = "\t.private_extern\t";
|
||||
SupportsExceptionHandling = true;
|
||||
NeedsIndirectEncoding = true;
|
||||
NeedsSet = true;
|
||||
BSSSection = 0;
|
||||
|
||||
DwarfEHFrameSection =
|
||||
".section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support";
|
||||
DwarfExceptionSection = ".section __DATA,__gcc_except_tab";
|
||||
|
||||
DwarfAbbrevSection = ".section __DWARF,__debug_abbrev,regular,debug";
|
||||
DwarfInfoSection = ".section __DWARF,__debug_info,regular,debug";
|
||||
@ -98,6 +99,9 @@ LinuxTargetAsmInfo::LinuxTargetAsmInfo(const PPCTargetMachine &TM)
|
||||
WeakRefDirective = "\t.weak\t";
|
||||
BSSSection = "\t.section\t\".sbss\",\"aw\",@nobits";
|
||||
|
||||
// Debug Information
|
||||
AbsoluteDebugSectionOffsets = true;
|
||||
SupportsDebugInformation = true;
|
||||
DwarfAbbrevSection = "\t.section\t.debug_abbrev,\"\",@progbits";
|
||||
DwarfInfoSection = "\t.section\t.debug_info,\"\",@progbits";
|
||||
DwarfLineSection = "\t.section\t.debug_line,\"\",@progbits";
|
||||
@ -109,4 +113,20 @@ LinuxTargetAsmInfo::LinuxTargetAsmInfo(const PPCTargetMachine &TM)
|
||||
DwarfARangesSection = "\t.section\t.debug_aranges,\"\",@progbits";
|
||||
DwarfRangesSection = "\t.section\t.debug_ranges,\"\",@progbits";
|
||||
DwarfMacInfoSection = "\t.section\t.debug_macinfo,\"\",@progbits";
|
||||
|
||||
ReadOnlySection = "\t.section\t.rodata";
|
||||
FourByteConstantSection = "\t.section\t.rodata.cst4,\"aM\",@progbits,4";
|
||||
EightByteConstantSection = "\t.section\t.rodata.cst8,\"aM\",@progbits,8";
|
||||
SixteenByteConstantSection = "\t.section\t.rodata.cst16,\"aM\",@progbits,16";
|
||||
PCSymbol = ".";
|
||||
|
||||
// Set up DWARF directives
|
||||
HasLEB128 = true; // Target asm supports leb128 directives (little-endian)
|
||||
|
||||
// Exceptions handling
|
||||
if (!TM.getSubtargetImpl()->isPPC64())
|
||||
SupportsExceptionHandling = true;
|
||||
AbsoluteEHSectionOffsets = false;
|
||||
DwarfEHFrameSection = "\t.section\t.eh_frame,\"aw\",@progbits";
|
||||
DwarfExceptionSection = "\t.section\t.gcc_except_table,\"a\",@progbits";
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user