[llvm-commits] [llvm] r82274 - in /llvm/trunk/lib: CodeGen/AsmPrinter/DwarfException.cpp Target/TargetLoweringObjectFile.cpp

Chris Lattner clattner at apple.com
Fri Sep 18 14:17:29 PDT 2009


On Sep 18, 2009, at 2:14 PM, Bill Wendling wrote:

> Author: void
> Date: Fri Sep 18 16:14:36 2009
> New Revision: 82274
>
> URL: http://llvm.org/viewvc/llvm-project?rev=82274&view=rev
> Log:
> It's inefficient to have place the exception tables (which contain  
> the LSDA)
> into the __DATA section. At launch time, dyld has to update most of  
> the section
> to fix up the type info pointers. It's better to place it into the  
> __TEXT
> section and use pc-rel indirect pointer encodings. Similar to the  
> personality
> routine.

Very nice Bill, can you please factor out the code that handles "-  
Llabel" stuff out to a helper that is shared between this code and the  
personality stuff?

-Chris

>
> Modified:
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp
>    llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp?rev=82274&r1=82273&r2=82274&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp Fri Sep 18  
> 16:14:36 2009
> @@ -893,14 +893,49 @@
>   // of the catch clauses as they appear in the source code, and  
> must be kept in
>   // the same order. As a result, changing the order of the catch  
> clause would
>   // change the semantics of the program.
> +  const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
> +  unsigned Index = 1;
> +
>   for (std::vector<GlobalVariable *>::const_reverse_iterator
> -         I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I) {
> -    const GlobalVariable *GV = *I;
> -    PrintRelDirective();
> +         I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I,  
> ++Index) {
> +    const GlobalVariable *TI = *I;
>
> -    if (GV) {
> -      O << Asm->Mang->getMangledName(GV);
> +    if (TI) {
> +      if (TTypeFormat == dwarf::DW_EH_PE_absptr) {
> +        // Print out the unadorned name of the type info.
> +        PrintRelDirective();
> +        O << Asm->Mang->getMangledName(TI);
> +      } else {
> +        bool IsTypeInfoIndirect = false, IsTypeInfoPCRel = false;
> +        const MCExpr *TypeInfoRef =
> +          TLOF.getSymbolForDwarfGlobalReference(TI, Asm->Mang, Asm- 
> >MMI,
> +                                                IsTypeInfoIndirect,
> +                                                IsTypeInfoPCRel);
> +
> +        if (!IsTypeInfoPCRel) {
> +          // If the reference to the type info symbol is not already
> +          // pc-relative, then we need to subtract our current  
> address from it.
> +          // Do this by emitting a label and subtracting it from  
> the expression
> +          // we already have.  This is equivalent to emitting "foo  
> - .", but we
> +          // have to emit the label for "." directly.
> +          SmallString<64> Name;
> +          raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix()
> +            << "typeinforef_addr" << Asm->getFunctionNumber() <<  
> "_" << Index;
> +          MCSymbol *DotSym = Asm- 
> >OutContext.GetOrCreateSymbol(Name.str());
> +          Asm->OutStreamer.EmitLabel(DotSym);
> +
> +          TypeInfoRef =
> +            MCBinaryExpr::CreateSub(TypeInfoRef,
> +                                    MCSymbolRefExpr::Create(DotSym,
> +                                                            Asm- 
> >OutContext),
> +                                    Asm->OutContext);
> +        }
> +
> +        O << MAI->getData32bitsDirective();
> +        TypeInfoRef->print(O, MAI);
> +      }
>     } else {
> +      PrintRelDirective();
>       O << "0x0";
>     }
>
>
> Modified: llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp?rev=82274&r1=82273&r2=82274&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp (original)
> +++ llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp Fri Sep 18  
> 16:14:36 2009
> @@ -782,8 +782,8 @@
>   }
>
>   // Exception Handling.
> -  LSDASection = getMachOSection("__DATA", "__gcc_except_tab", 0,
> -                                SectionKind::getDataRel());
> +  LSDASection = getMachOSection("__TEXT", "__gcc_except_tab", 0,
> +                                SectionKind::getReadOnly());
>   EHFrameSection =
>     getMachOSection("__TEXT", "__eh_frame",
>                     MCSectionMachO::S_COALESCED |
>
>
> _______________________________________________
> 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