Index: lib/CodeGen/AsmPrinter/EHStreamer.h =================================================================== --- lib/CodeGen/AsmPrinter/EHStreamer.h +++ lib/CodeGen/AsmPrinter/EHStreamer.h @@ -36,6 +36,9 @@ /// Collected machine module information. MachineModuleInfo *MMI; + // Starting symbol of an per-function exception table. + MCSymbol *LSDALabel = nullptr; + /// How many leading type ids two landing pads have in common. static unsigned sharedTypeIDs(const LandingPadInfo *L, const LandingPadInfo *R); @@ -119,6 +122,10 @@ static bool isCleanupEHSelector(int Selector) { return Selector == 0; } static bool isCatchEHSelector(int Selector) { return Selector > 0; } + // Set and get the starting symbol of an per-function exception table. + void setLSDALabel(MCSymbol *Sym) { LSDALabel = Sym; } + MCSymbol *getLSDALabel() { return LSDALabel; } + public: EHStreamer(AsmPrinter *A); ~EHStreamer() override; Index: lib/CodeGen/AsmPrinter/EHStreamer.cpp =================================================================== --- lib/CodeGen/AsmPrinter/EHStreamer.cpp +++ lib/CodeGen/AsmPrinter/EHStreamer.cpp @@ -428,6 +428,7 @@ MCSymbol *GCCETSym = Asm->OutContext.getOrCreateSymbol(Twine("GCC_except_table")+ Twine(Asm->getFunctionNumber())); + setLSDALabel(GCCETSym); Asm->OutStreamer->EmitLabel(GCCETSym); Asm->OutStreamer->EmitLabel(Asm->getCurExceptionSym()); Index: lib/CodeGen/AsmPrinter/WinException.cpp =================================================================== --- lib/CodeGen/AsmPrinter/WinException.cpp +++ lib/CodeGen/AsmPrinter/WinException.cpp @@ -544,6 +544,7 @@ // difference and division. MCSymbol *TableBegin = Ctx.createTempSymbol("lsda_begin", /*AlwaysAddSuffix=*/true); + setLSDALabel(TableBegin); MCSymbol *TableEnd = Ctx.createTempSymbol("lsda_end", /*AlwaysAddSuffix=*/true); const MCExpr *LabelDiff = getOffset(TableEnd, TableBegin); @@ -645,6 +646,7 @@ } else { FuncInfoXData = Asm->OutContext.getOrCreateLSDASymbol(FuncLinkageName); } + setLSDALabel(FuncInfoXData); int UnwindHelpOffset = 0; if (Asm->MAI->usesWindowsCFI()) @@ -952,6 +954,7 @@ // Emit the __ehtable label that we use for llvm.x86.seh.lsda. MCSymbol *LSDALabel = Asm->OutContext.getOrCreateLSDASymbol(FLinkageName); + setLSDALabel(LSDALabel); OS.EmitValueToAlignment(4); OS.EmitLabel(LSDALabel);