diff --git a/llvm/include/llvm/MC/MCStreamer.h b/llvm/include/llvm/MC/MCStreamer.h --- a/llvm/include/llvm/MC/MCStreamer.h +++ b/llvm/include/llvm/MC/MCStreamer.h @@ -1029,8 +1029,6 @@ /// for the frame. We cannot use the End marker, as it is not set at the /// point of emitting .xdata, in order to indicate that the frame is active. virtual void EmitWinCFIFuncletOrFuncEnd(SMLoc Loc = SMLoc()); - virtual void EmitWinCFIStartChained(SMLoc Loc = SMLoc()); - virtual void EmitWinCFIEndChained(SMLoc Loc = SMLoc()); virtual void EmitWinCFIPushReg(MCRegister Register, SMLoc Loc = SMLoc()); virtual void EmitWinCFISetFrame(MCRegister Register, unsigned Offset, SMLoc Loc = SMLoc()); diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp --- a/llvm/lib/MC/MCAsmStreamer.cpp +++ b/llvm/lib/MC/MCAsmStreamer.cpp @@ -347,8 +347,6 @@ void EmitWinCFIStartProc(const MCSymbol *Symbol, SMLoc Loc) override; void EmitWinCFIEndProc(SMLoc Loc) override; void EmitWinCFIFuncletOrFuncEnd(SMLoc Loc) override; - void EmitWinCFIStartChained(SMLoc Loc) override; - void EmitWinCFIEndChained(SMLoc Loc) override; void EmitWinCFIPushReg(MCRegister Register, SMLoc Loc) override; void EmitWinCFISetFrame(MCRegister Register, unsigned Offset, SMLoc Loc) override; @@ -2036,20 +2034,6 @@ EmitEOL(); } -void MCAsmStreamer::EmitWinCFIStartChained(SMLoc Loc) { - MCStreamer::EmitWinCFIStartChained(Loc); - - OS << "\t.seh_startchained"; - EmitEOL(); -} - -void MCAsmStreamer::EmitWinCFIEndChained(SMLoc Loc) { - MCStreamer::EmitWinCFIEndChained(Loc); - - OS << "\t.seh_endchained"; - EmitEOL(); -} - void MCAsmStreamer::EmitWinEHHandler(const MCSymbol *Sym, bool Unwind, bool Except, SMLoc Loc) { MCStreamer::EmitWinEHHandler(Sym, Unwind, Except, Loc); diff --git a/llvm/lib/MC/MCParser/COFFAsmParser.cpp b/llvm/lib/MC/MCParser/COFFAsmParser.cpp --- a/llvm/lib/MC/MCParser/COFFAsmParser.cpp +++ b/llvm/lib/MC/MCParser/COFFAsmParser.cpp @@ -79,10 +79,6 @@ ".seh_endproc"); addDirectiveHandler<&COFFAsmParser::ParseSEHDirectiveEndFuncletOrFunc>( ".seh_endfunclet"); - addDirectiveHandler<&COFFAsmParser::ParseSEHDirectiveStartChained>( - ".seh_startchained"); - addDirectiveHandler<&COFFAsmParser::ParseSEHDirectiveEndChained>( - ".seh_endchained"); addDirectiveHandler<&COFFAsmParser::ParseSEHDirectiveHandler>( ".seh_handler"); addDirectiveHandler<&COFFAsmParser::ParseSEHDirectiveHandlerData>( @@ -134,8 +130,6 @@ bool ParseSEHDirectiveStartProc(StringRef, SMLoc); bool ParseSEHDirectiveEndProc(StringRef, SMLoc); bool ParseSEHDirectiveEndFuncletOrFunc(StringRef, SMLoc); - bool ParseSEHDirectiveStartChained(StringRef, SMLoc); - bool ParseSEHDirectiveEndChained(StringRef, SMLoc); bool ParseSEHDirectiveHandler(StringRef, SMLoc); bool ParseSEHDirectiveHandlerData(StringRef, SMLoc); bool ParseSEHDirectiveAllocStack(StringRef, SMLoc); @@ -637,18 +631,6 @@ return false; } -bool COFFAsmParser::ParseSEHDirectiveStartChained(StringRef, SMLoc Loc) { - Lex(); - getStreamer().EmitWinCFIStartChained(Loc); - return false; -} - -bool COFFAsmParser::ParseSEHDirectiveEndChained(StringRef, SMLoc Loc) { - Lex(); - getStreamer().EmitWinCFIEndChained(Loc); - return false; -} - bool COFFAsmParser::ParseSEHDirectiveHandler(StringRef, SMLoc Loc) { StringRef SymbolID; if (getParser().parseIdentifier(SymbolID)) diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp --- a/llvm/lib/MC/MCStreamer.cpp +++ b/llvm/lib/MC/MCStreamer.cpp @@ -745,33 +745,6 @@ CurFrame->FuncletOrFuncEnd = Label; } -void MCStreamer::EmitWinCFIStartChained(SMLoc Loc) { - WinEH::FrameInfo *CurFrame = EnsureValidWinFrameInfo(Loc); - if (!CurFrame) - return; - - MCSymbol *StartProc = emitCFILabel(); - - WinFrameInfos.emplace_back(std::make_unique( - CurFrame->Function, StartProc, CurFrame)); - CurrentWinFrameInfo = WinFrameInfos.back().get(); - CurrentWinFrameInfo->TextSection = getCurrentSectionOnly(); -} - -void MCStreamer::EmitWinCFIEndChained(SMLoc Loc) { - WinEH::FrameInfo *CurFrame = EnsureValidWinFrameInfo(Loc); - if (!CurFrame) - return; - if (!CurFrame->ChainedParent) - return getContext().reportError( - Loc, "End of a chained region outside a chained region!"); - - MCSymbol *Label = emitCFILabel(); - - CurFrame->End = Label; - CurrentWinFrameInfo = const_cast(CurFrame->ChainedParent); -} - void MCStreamer::EmitWinEHHandler(const MCSymbol *Sym, bool Unwind, bool Except, SMLoc Loc) { WinEH::FrameInfo *CurFrame = EnsureValidWinFrameInfo(Loc); diff --git a/llvm/test/MC/AsmParser/directive_seh.s b/llvm/test/MC/AsmParser/directive_seh.s --- a/llvm/test/MC/AsmParser/directive_seh.s +++ b/llvm/test/MC/AsmParser/directive_seh.s @@ -42,13 +42,7 @@ # CHECK: .seh_handlerdata .long 0 .text - .seh_startchained - .seh_endprologue - .seh_endchained # CHECK: .text -# CHECK: .seh_startchained -# CHECK: .seh_endprologue -# CHECK: .seh_endchained lea (%rbx), %rsp pop %rbx addq $24, %rsp diff --git a/llvm/test/MC/COFF/seh.s b/llvm/test/MC/COFF/seh.s --- a/llvm/test/MC/COFF/seh.s +++ b/llvm/test/MC/COFF/seh.s @@ -15,8 +15,8 @@ // CHECK-NEXT: } // CHECK: Section { // CHECK: Name: .xdata -// CHECK: RawDataSize: 52 -// CHECK: RelocationCount: 4 +// CHECK: RawDataSize: 36 +// CHECK: RelocationCount: 1 // CHECK: Characteristics [ // CHECK-NEXT: ALIGN_4BYTES // CHECK-NEXT: CNT_INITIALIZED_DATA @@ -25,7 +25,7 @@ // CHECK-NEXT: } // CHECK: Section { // CHECK: Name: .pdata -// CHECK: RelocationCount: 9 +// CHECK: RelocationCount: 6 // CHECK: Characteristics [ // CHECK-NEXT: ALIGN_4BYTES // CHECK-NEXT: CNT_INITIALIZED_DATA @@ -37,9 +37,6 @@ // CHECK-NEXT: Relocations [ // CHECK-NEXT: Section (4) .xdata { // CHECK-NEXT: 0x14 IMAGE_REL_AMD64_ADDR32NB __C_specific_handler -// CHECK-NEXT: 0x20 IMAGE_REL_AMD64_ADDR32NB .text -// CHECK-NEXT: 0x24 IMAGE_REL_AMD64_ADDR32NB .text -// CHECK-NEXT: 0x28 IMAGE_REL_AMD64_ADDR32NB .xdata // CHECK-NEXT: } // CHECK-NEXT: Section (5) .pdata { // CHECK-NEXT: 0x0 IMAGE_REL_AMD64_ADDR32NB .text @@ -48,9 +45,6 @@ // CHECK-NEXT: 0xC IMAGE_REL_AMD64_ADDR32NB .text // CHECK-NEXT: 0x10 IMAGE_REL_AMD64_ADDR32NB .text // CHECK-NEXT: 0x14 IMAGE_REL_AMD64_ADDR32NB .xdata -// CHECK-NEXT: 0x18 IMAGE_REL_AMD64_ADDR32NB .text -// CHECK-NEXT: 0x1C IMAGE_REL_AMD64_ADDR32NB .text -// CHECK-NEXT: 0x20 IMAGE_REL_AMD64_ADDR32NB .xdata // CHECK-NEXT: } // CHECK-NEXT: ] @@ -81,28 +75,6 @@ // CHECK-NEXT: } // CHECK-NEXT: } // CHECK-NEXT: RuntimeFunction { -// CHECK-NEXT: StartAddress: [[CodeSect2:[^ ]+]] [[BeginDisp2:(\+0x[A-F0-9]+)?]] -// CHECK-NEXT: EndAddress: [[CodeSect2]] [[BeginDisp2:(\+0x[A-F0-9]+)?]] -// CHECK-NEXT: UnwindInfoAddress: -// CHECK-NEXT: UnwindInfo { -// CHECK-NEXT: Version: 1 -// CHECK-NEXT: Flags [ -// CHECK-NEXT: ChainInfo -// CHECK-NEXT: ] -// CHECK-NEXT: PrologSize: 0 -// CHECK-NEXT: FrameRegister: - -// CHECK-NEXT: FrameOffset: - -// CHECK-NEXT: UnwindCodeCount: 0 -// CHECK-NEXT: UnwindCodes [ -// CHECK-NEXT: ] -// CHECK-NEXT: Chained { -// CHECK-NEXT: StartAddress: [[CodeSect1]] [[BeginDisp1]] -// CHECK-NEXT: EndAddress: [[CodeSect1]] [[EndDisp1]] -// CHECK-NEXT: UnwindInfoAddress: -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: RuntimeFunction { // CHECK-NEXT: StartAddress: [[CodeSect3:[^ ]+]] [[BeginDisp3:(\+0x[A-F0-9]+)?]] // CHECK-NEXT: EndAddress: [[CodeSect3]] [[BeginDisp3:(\+0x[A-F0-9]+)?]] // CHECK-NEXT: UnwindInfoAddress: @@ -141,9 +113,6 @@ .seh_handlerdata .long 0 .text - .seh_startchained - .seh_endprologue - .seh_endchained lea (%rbx), %rsp pop %rbx addq $24, %rsp