[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