Don't allow .seh_handler and .seh_handlerdata directives inside chained
authorCharles Davis <cdavis@mines.edu>
Sat, 21 May 2011 17:36:25 +0000 (17:36 +0000)
committerCharles Davis <cdavis@mines.edu>
Sat, 21 May 2011 17:36:25 +0000 (17:36 +0000)
unwind areas.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131795 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCStreamer.cpp

index 1ec7688a5ed8b04e30f99f0620b09b057ba79f73..a760f2cfb5926cea69d5e43e729e66d1edff3d3e 100644 (file)
@@ -361,6 +361,8 @@ void MCStreamer::EmitWin64EHHandler(const MCSymbol *Sym, bool Unwind,
                                     bool Except) {
   EnsureValidW64UnwindInfo();
   MCWin64EHUnwindInfo *CurFrame = CurrentW64UnwindInfo;
+  if (CurFrame->ChainedParent)
+    report_fatal_error("Chained unwind areas can't have handlers!");
   CurFrame->ExceptionHandler = Sym;
   if (!Except && !Unwind)
     report_fatal_error("Don't know what kind of handler this is!");
@@ -372,6 +374,9 @@ void MCStreamer::EmitWin64EHHandler(const MCSymbol *Sym, bool Unwind,
 
 void MCStreamer::EmitWin64EHHandlerData() {
   EnsureValidW64UnwindInfo();
+  MCWin64EHUnwindInfo *CurFrame = CurrentW64UnwindInfo;
+  if (CurFrame->ChainedParent)
+    report_fatal_error("Chained unwind areas can't have handlers!");
 }
 
 void MCStreamer::EmitWin64EHPushReg(unsigned Register) {