[llvm] r185761 - Emit personality function and Dwarf EH data for Win64 SEH.
Duncan Sands
duncan.sands at gmail.com
Sun Jul 7 07:07:34 PDT 2013
Hi Kai, no testcase?
Ciao, Duncan.
On 06/07/13 19:17, Kai Nacke wrote:
> Author: redstar
> Date: Sat Jul 6 12:17:31 2013
> New Revision: 185761
>
> URL: http://llvm.org/viewvc/llvm-project?rev=185761&view=rev
> Log:
> Emit personality function and Dwarf EH data for Win64 SEH.
>
> Obviously the personality function should be emitted as language handler
> instead of the hard coded _GCC_specific_handler. The language specific
> data must be placed after the unwind information therefore it must not
> be emitted into a separate section.
>
> Reviewed by Charles Davis and Nico Rieck.
>
> Modified:
> llvm/trunk/lib/CodeGen/AsmPrinter/Win64Exception.cpp
> llvm/trunk/lib/MC/MCObjectFileInfo.cpp
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/Win64Exception.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/Win64Exception.cpp?rev=185761&r1=185760&r2=185761&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/Win64Exception.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/Win64Exception.cpp Sat Jul 6 12:17:31 2013
> @@ -78,9 +78,9 @@ void Win64Exception::BeginFunction(const
> if (!shouldEmitPersonality)
> return;
>
> - MCSymbol *GCCHandlerSym =
> - Asm->GetExternalSymbolSymbol("_GCC_specific_handler");
> - Asm->OutStreamer.EmitWin64EHHandler(GCCHandlerSym, true, true);
> + const MCSymbol *PersHandlerSym = TLOF.getCFIPersonalitySymbol(Per, Asm->Mang,
> + MMI);
> + Asm->OutStreamer.EmitWin64EHHandler(PersHandlerSym, true, true);
>
> Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("eh_func_begin",
> Asm->getFunctionNumber()));
> @@ -99,14 +99,8 @@ void Win64Exception::EndFunction() {
> MMI->TidyLandingPads();
>
> if (shouldEmitPersonality) {
> - const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
> - const Function *Per = MMI->getPersonalities()[MMI->getPersonalityIndex()];
> - const MCSymbol *Sym = TLOF.getCFIPersonalitySymbol(Per, Asm->Mang, MMI);
> -
> Asm->OutStreamer.PushSection();
> Asm->OutStreamer.EmitWin64EHHandlerData();
> - Asm->OutStreamer.EmitValue(MCSymbolRefExpr::Create(Sym, Asm->OutContext),
> - 4);
> EmitExceptionTable();
> Asm->OutStreamer.PopSection();
> }
>
> Modified: llvm/trunk/lib/MC/MCObjectFileInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCObjectFileInfo.cpp?rev=185761&r1=185760&r2=185761&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCObjectFileInfo.cpp (original)
> +++ llvm/trunk/lib/MC/MCObjectFileInfo.cpp Sat Jul 6 12:17:31 2013
> @@ -547,11 +547,16 @@ void MCObjectFileInfo::InitCOFFMCObjectF
> // though it contains relocatable pointers. In PIC mode, this is probably a
> // big runtime hit for C++ apps. Either the contents of the LSDA need to be
> // adjusted or this should be a data section.
> - LSDASection =
> - Ctx->getCOFFSection(".gcc_except_table",
> - COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
> - COFF::IMAGE_SCN_MEM_READ,
> - SectionKind::getReadOnly());
> + if (T.getOS() == Triple::Win32) {
> + // On Windows with SEH, the LSDA is emitted into the .xdata section
> + LSDASection = 0;
> + } else {
> + LSDASection =
> + Ctx->getCOFFSection(".gcc_except_table",
> + COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
> + COFF::IMAGE_SCN_MEM_READ,
> + SectionKind::getReadOnly());
> + }
>
> // Debug info.
> DwarfAbbrevSection =
>
>
> _______________________________________________
> 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