[llvm-commits] [llvm] r78625 - in /llvm/trunk: docs/ include/llvm/ include/llvm/CodeGen/ include/llvm/Target/ lib/CodeGen/ lib/CodeGen/AsmPrinter/ lib/CodeGen/SelectionDAG/ lib/ExecutionEngine/JIT/ lib/Target/ lib/Target/ARM/ lib/Target/ARM/AsmPrinter/ lib/Target/CellSPU/ lib/Target/PowerPC/ lib/Target/X86/ tools/lto/
Evan Cheng
evan.cheng at apple.com
Mon Aug 10 17:53:55 PDT 2009
On Aug 10, 2009, at 5:09 PM, Jim Grosbach wrote:
> Author: grosbach
> Date: Mon Aug 10 19:09:57 2009
> New Revision: 78625
>
> URL: http://llvm.org/viewvc/llvm-project?rev=78625&view=rev
> Log:
> SjLj based exception handling unwinding support. This patch is
> nasty, brutish
> and short. Well, it's kinda short. Definitely nasty and brutish.
Ok.
>
> The front-end generates the register/unregister calls into the SjLj
> runtime,
> call-site indices and landing pad dispatch. The back end fills in
> the LSDA
> with the call-site information provided by the front end. Catch
> blocks are
> not yet implemented.
Obviously we can throw an exception yet. But how far away are we from
being able run ARM C++ and Objc tests?
>
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp?rev=78625&r1=78624&r2=78625&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp Mon Aug 10
> 19:09:57 2009
> @@ -364,6 +364,7 @@
> /// try-range address.
> void DwarfException::
> ComputeCallSiteTable(SmallVectorImpl<CallSiteEntry> &CallSites,
> + std::map<unsigned,CallSiteEntry*>
> &CallSiteIndexMap,
Are indices continuous integers? If so, perhaps it would be better to
use IndexedMap or at least DenseMap?
> const RangeMapType &PadMap,
>
> - for (unsigned i = 0, e = CallSites.size(); i < e; ++i)
> + unsigned SizeSites;
> + if (TAI->getExceptionHandlingType() == ExceptionHandling::SjLj) {
> + SizeSites = (MF->getMaxCallSiteIndex() - CallSites.size()) *
> + TargetAsmInfo::getULEB128Size(0) * 2;
> + } else
> + SizeSites = CallSites.size() *
> + (SiteStartSize + SiteLengthSize + LandingPadSize);
> + for (unsigned i = 0, e = CallSites.size(); i < e; ++i) {
> SizeSites += TargetAsmInfo::getULEB128Size(CallSites[i].Action);
> -
> + if (TAI->getExceptionHandlingType() == ExceptionHandling::SjLj)
> + SizeSites += TargetAsmInfo::getULEB128Size(i);
> + // FIXME: 'i' above should be the landing pad index
I don't quite understand this fixme comment.
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/ARMInstrInfo.td (original)
> +++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Mon Aug 10 19:09:57 2009
> @@ -1427,9 +1427,12 @@
> def Int_eh_sjlj_setjmp : XI<(outs), (ins GPR:$src),
> AddrModeNone, SizeSpecial,
> IndexModeNone,
> Pseudo, NoItinerary,
> - "add r0, pc, #4\n\t"
> - "str r0, [$src, #+4]\n\t"
> - "mov r0, #0 @ eh_setjmp", "",
> + "str sp, [$src, #+8] @ eh_setjmp
> begin\n\t"
> + "add ip, pc, #8\n\t"
> + "str ip, [$src, #+4]\n\t"
> + "mov r0, #0\n\t"
> + "add pc, pc, #0\n\t"
> + "mov r0, #1 @ eh_setjmp end\n\t", "",
> [(set R0, (ARMeh_sjlj_setjmp GPR:
> $src))]>;
> }
>
You need to update ARMBaseInstrInfo::GetInstSizeInBytes. It's no
longer 12-bytes long.
Please add a Thumb2 specific instruction, this obviously is ARM
specific only. Please take care not to use "add pc, pc, #0", its
semantics is undefined in Thumb2 mode. Also please make sure you use
universal syntax for Thumb2.
Evan
>
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp?rev=78625&r1=78624&r2=78625&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp Mon Aug 10
> 19:09:57 2009
> @@ -47,6 +47,12 @@
> ProtectedDirective = NULL;
> HasDotTypeDotSizeDirective = false;
> SupportsDebugInformation = true;
> +
> + // Exceptions handling
> + ExceptionsType = ExceptionHandling::SjLj;
> + GlobalEHDirective = "\t.globl\t";
> + SupportsWeakOmittedEHFrame = false;
> + AbsoluteEHSectionOffsets = false;
> }
>
> ARMELFTargetAsmInfo::ARMELFTargetAsmInfo() {
>
> Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp?rev=78625&r1=78624&r2=78625&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp Mon Aug
> 10 19:09:57 2009
> @@ -208,6 +208,8 @@
> } else {
> if (GV)
> Name = Mang->getMangledName(GV);
> + else if (!strncmp(ACPV->getSymbol(), "L_lsda_", 7))
> + Name = ACPV->getSymbol();
> else
> Name = Mang->makeNameProper(ACPV->getSymbol());
> }
>
> Modified: llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp?rev=78625&r1=78624&r2=78625&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp Mon Aug 10
> 19:09:57 2009
> @@ -37,6 +37,6 @@
>
> // Exception handling is not supported on CellSPU (think about it:
> you only
> // have 256K for code+data. Would you support exception handling?)
> - SupportsExceptionHandling = false;
> + ExceptionsType = ExceptionHandling::None;
> }
>
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp?rev=78625&r1=78624&r2=78625&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp Mon Aug 10
> 19:09:57 2009
> @@ -24,8 +24,8 @@
> PCSymbol = ".";
> CommentString = ";";
> UsedDirective = "\t.no_dead_strip\t";
> - SupportsExceptionHandling = true;
> -
> + ExceptionsType = ExceptionHandling::Dwarf;
> +
> GlobalEHDirective = "\t.globl\t";
> SupportsWeakOmittedEHFrame = false;
> }
> @@ -49,7 +49,7 @@
>
> // Exceptions handling
> if (!TM.getSubtargetImpl()->isPPC64())
> - SupportsExceptionHandling = true;
> + ExceptionsType = ExceptionHandling::Dwarf;
> AbsoluteEHSectionOffsets = false;
> }
>
>
> Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=78625&r1=78624&r2=78625&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Mon Aug 10 19:09:57 2009
> @@ -72,7 +72,7 @@
> HasLEB128 = false;
> HasDotLocAndDotFile = false;
> SupportsDebugInformation = false;
> - SupportsExceptionHandling = false;
> + ExceptionsType = ExceptionHandling::None;
> DwarfRequiresFrameSection = true;
> DwarfUsesInlineInfoSection = false;
> Is_EHSymbolPrivate = true;
>
> Modified: llvm/trunk/lib/Target/TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=78625&r1=78624&r2=78625&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/TargetMachine.cpp Mon Aug 10 19:09:57 2009
> @@ -33,7 +33,8 @@
> FloatABI::ABIType FloatABIType;
> bool NoImplicitFloat;
> bool NoZerosInBSS;
> - bool ExceptionHandling;
> + bool DwarfExceptionHandling;
> + bool SjLjExceptionHandling;
> bool UnwindTablesMandatory;
> Reloc::Model RelocationModel;
> CodeModel::Model CMModel;
> @@ -104,9 +105,14 @@
> cl::location(NoZerosInBSS),
> cl::init(false));
> static cl::opt<bool, true>
> -EnableExceptionHandling("enable-eh",
> +EnableDwarfExceptionHandling("enable-eh",
> cl::desc("Emit DWARF exception handling (default if target
> supports)"),
> - cl::location(ExceptionHandling),
> + cl::location(DwarfExceptionHandling),
> + cl::init(false));
> +static cl::opt<bool, true>
> +EnableSjLjExceptionHandling("enable-sjlj-eh",
> + cl::desc("Emit SJLJ exception handling (default if target
> supports)"),
> + cl::location(SjLjExceptionHandling),
> cl::init(false));
> static cl::opt<bool, true>
> EnableUnwindTables("unwind-tables",
>
> Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=78625&r1=78624&r2=78625&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Aug 10
> 19:09:57 2009
> @@ -77,7 +77,7 @@
> DwarfUsesInlineInfoSection = true;
>
> // Exceptions handling
> - SupportsExceptionHandling = true;
> + ExceptionsType = ExceptionHandling::Dwarf;
> GlobalEHDirective = "\t.globl\t";
> SupportsWeakOmittedEHFrame = false;
> AbsoluteEHSectionOffsets = false;
> @@ -99,7 +99,7 @@
> SupportsDebugInformation = true;
>
> // Exceptions handling
> - SupportsExceptionHandling = true;
> + ExceptionsType = ExceptionHandling::Dwarf;
> AbsoluteEHSectionOffsets = false;
>
> // On Linux we must declare when we can use a non-executable stack.
>
> Modified: llvm/trunk/tools/lto/LTOCodeGenerator.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOCodeGenerator.cpp?rev=78625&r1=78624&r2=78625&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/tools/lto/LTOCodeGenerator.cpp (original)
> +++ llvm/trunk/tools/lto/LTOCodeGenerator.cpp Mon Aug 10 19:09:57 2009
> @@ -394,9 +394,19 @@
>
> Module* mergedModule = _linker.getModule();
>
> - // If target supports exception handling then enable it now.
> - if ( _target->getTargetAsmInfo()->doesSupportExceptionHandling
> () )
> - llvm::ExceptionHandling = true;
> + // If target supports exception handling then enable it now.
> + switch (_target->getTargetAsmInfo()->getExceptionHandlingType
> ()) {
> + case ExceptionHandling::Dwarf:
> + llvm::DwarfExceptionHandling = true;
> + break;
> + case ExceptionHandling::SjLj:
> + llvm::SjLjExceptionHandling = true;
> + break;
> + case ExceptionHandling::None:
> + break;
> + default:
> + assert (0 && "Unknown exception handling model!");
> + }
>
> // if options were requested, set them
> if ( !_codegenOptions.empty() )
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list