From edb15d6872c4475f45f3182960bd138acda6799e Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Sat, 18 Jun 2011 00:19:35 +0000 Subject: * Override the "EmitBytes" function, since it can sneak values in that way. * Make this used only if CFI is used. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133319 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCAsmStreamer.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp index 636da33f9d..a1dcf2ed4a 100644 --- a/lib/MC/MCAsmStreamer.cpp +++ b/lib/MC/MCAsmStreamer.cpp @@ -1342,6 +1342,7 @@ public: Assignments.push_back(Value); MCAsmStreamer::EmitAssignment(Symbol, Value); } + virtual void EmitBytes(StringRef Data, unsigned AddrSpace); virtual void EmitIntValue(uint64_t Value, unsigned Size, unsigned AddrSpace = 0); virtual void EmitValueImpl(const MCExpr *Value, unsigned Size, @@ -1360,6 +1361,22 @@ public: } // end anonymous namespace +void MCLSDADecoderAsmStreamer::EmitBytes(StringRef Data, unsigned AddrSpace) { + if (InLSDA && Data.size() == 1) { + LSDAEncoding.push_back((unsigned)(unsigned char)Data[0]); + ++BytesRead; + + if (LSDAEncoding.size() == 4) + // The fourth value tells us where the bottom of the type table is. + LSDASize = BytesRead + LSDAEncoding[3]; + else if (LSDAEncoding.size() == 6) + // The sixth value tells us where the start of the action table is. + ActionTableBytes = BytesRead; + } + + MCAsmStreamer::EmitBytes(Data, AddrSpace); +} + void MCLSDADecoderAsmStreamer::EmitIntValue(uint64_t Value, unsigned Size, unsigned AddrSpace) { if (!InLSDA) @@ -1607,7 +1624,7 @@ MCStreamer *llvm::createAsmStreamer(MCContext &Context, ExceptionHandling::ExceptionsType ET = Context.getAsmInfo().getExceptionHandlingType(); - if (isVerboseAsm && + if (useCFI && isVerboseAsm && (ET == ExceptionHandling::SjLj || ET == ExceptionHandling::DwarfCFI)) return new MCLSDADecoderAsmStreamer(Context, OS, isVerboseAsm, useLoc, useCFI, IP, CE, TAB, ShowInst); -- cgit v1.2.3