Skip to content

Commit

Permalink
SjLj exception handling LSDA decoding support wasn't represented corr…
Browse files Browse the repository at this point in the history
…ectly. Use

the correct values, etc. In particular, the exception handling type is SjLj, not
ARM.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133296 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
isanbard committed Jun 17, 2011
1 parent 2fb86a8 commit 5ba8983
Showing 1 changed file with 15 additions and 17 deletions.
32 changes: 15 additions & 17 deletions lib/MC/MCAsmStreamer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1482,7 +1482,7 @@ void MCLSDADecoderAsmStreamer::EmitEHTableDescription() {
CMT << "@CallSite Encoding: " << DecodeDWARFEncoding(LSDAEncoding[4]) << "\n";
CMT << "@Action Table Size: " << LSDAEncoding[5] << " bytes\n\n";

bool isSjLjEH = (MAI.getExceptionHandlingType() == ExceptionHandling::ARM);
bool isSjLjEH = (MAI.getExceptionHandlingType() == ExceptionHandling::SjLj);

int64_t CallSiteTableSize = LSDAEncoding[5];
unsigned CallSiteEntrySize;
Expand All @@ -1493,14 +1493,13 @@ void MCLSDADecoderAsmStreamer::EmitEHTableDescription() {
1; // TType index.
else
CallSiteEntrySize = 1 + // Call index.
1 + // Landing pad.
1; // TType index.

unsigned NumEntries = CallSiteTableSize / CallSiteEntrySize;
assert(CallSiteTableSize % CallSiteEntrySize == 0 &&
"The action table size is not a multiple of what it should be!");
unsigned TTypeIdx = 5 + // Action table size index.
(isSjLjEH ? 3 : 4) * NumEntries + // Action table entries.
(isSjLjEH ? 2 : 4) * NumEntries + // Action table entries.
1; // Just because.

// Emit the action table.
Expand All @@ -1518,20 +1517,20 @@ void MCLSDADecoderAsmStreamer::EmitEHTableDescription() {
// The end of the throwing region.
Idx = LSDAEncoding[I++];
OS << *cast<MCBinaryExpr>(Assignments[Idx - 1])->getLHS();
} else {
CMT << " A throw from call " << *Assignments[Idx - 1];
}

// The landing pad.
Idx = LSDAEncoding[I++];
if (Idx) {
OS << " jumps to "
<< *cast<MCBinaryExpr>(Assignments[Idx - 1])->getLHS()
<< " on an exception.\n";
// The landing pad.
Idx = LSDAEncoding[I++];
if (Idx) {
OS << " jumps to "
<< *cast<MCBinaryExpr>(Assignments[Idx - 1])->getLHS()
<< " on an exception.\n";
} else {
OS << " does not have a landing pad.\n";
++I;
continue;
}
} else {
OS << " does not have a landing pad.\n";
++I;
continue;
CMT << " A throw from call " << Idx << "\n";
}

// The index into the action table.
Expand Down Expand Up @@ -1606,11 +1605,10 @@ MCStreamer *llvm::createAsmStreamer(MCContext &Context,
bool useCFI, MCInstPrinter *IP,
MCCodeEmitter *CE, TargetAsmBackend *TAB,
bool ShowInst) {
#if 0
if (isVerboseAsm)
return new MCLSDADecoderAsmStreamer(Context, OS, isVerboseAsm, useLoc,
useCFI, IP, CE, TAB, ShowInst);
#endif

return new MCAsmStreamer(Context, OS, isVerboseAsm, useLoc, useCFI,
IP, CE, TAB, ShowInst);
}

0 comments on commit 5ba8983

Please sign in to comment.