[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/

Jim Grosbach grosbach at apple.com
Mon Aug 10 18:11:14 PDT 2009


On Aug 10, 2009, at 5:53 PM, Evan Cheng wrote:
>
> Obviously we can throw an exception yet. But how far away are we from
> being able run ARM C++ and Objc tests?
>

We can throw OK, and we can unwind stack frames, including the  
associated unwind actions to clean up along the way (calling local  
destructors and such). The files I've been using to do basic testing  
of this have a catch block in a GCC-build module and all the other  
bits that throw and unwind in an LLVM-GCC build module.

We're very close to having the rest of it as well. I'll be looking at  
getting that done tonight and tomorrow.

-J

>>
>>
>> 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
>
> _______________________________________________
> 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