aboutsummaryrefslogtreecommitdiff
path: root/lib/MC/MCAsmStreamer.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2011-06-18 00:19:35 +0000
committerBill Wendling <isanbard@gmail.com>2011-06-18 00:19:35 +0000
commitedb15d6872c4475f45f3182960bd138acda6799e (patch)
tree7ee61138c7ee7fae94f03ae08f023afce7c77180 /lib/MC/MCAsmStreamer.cpp
parenta3071455e540530ecb644a2e59098129f70ce705 (diff)
* 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
Diffstat (limited to 'lib/MC/MCAsmStreamer.cpp')
-rw-r--r--lib/MC/MCAsmStreamer.cpp19
1 files changed, 18 insertions, 1 deletions
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);