forked from OSchip/llvm-project
* Override the "EmitBytes" function, since it can sneak values in that way.
* Make this used only if CFI is used. llvm-svn: 133319
This commit is contained in:
parent
e4a1266a9a
commit
098321c145
|
@ -1342,6 +1342,7 @@ public:
|
||||||
Assignments.push_back(Value);
|
Assignments.push_back(Value);
|
||||||
MCAsmStreamer::EmitAssignment(Symbol, Value);
|
MCAsmStreamer::EmitAssignment(Symbol, Value);
|
||||||
}
|
}
|
||||||
|
virtual void EmitBytes(StringRef Data, unsigned AddrSpace);
|
||||||
virtual void EmitIntValue(uint64_t Value, unsigned Size,
|
virtual void EmitIntValue(uint64_t Value, unsigned Size,
|
||||||
unsigned AddrSpace = 0);
|
unsigned AddrSpace = 0);
|
||||||
virtual void EmitValueImpl(const MCExpr *Value, unsigned Size,
|
virtual void EmitValueImpl(const MCExpr *Value, unsigned Size,
|
||||||
|
@ -1360,6 +1361,22 @@ public:
|
||||||
|
|
||||||
} // end anonymous namespace
|
} // 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,
|
void MCLSDADecoderAsmStreamer::EmitIntValue(uint64_t Value, unsigned Size,
|
||||||
unsigned AddrSpace) {
|
unsigned AddrSpace) {
|
||||||
if (!InLSDA)
|
if (!InLSDA)
|
||||||
|
@ -1607,7 +1624,7 @@ MCStreamer *llvm::createAsmStreamer(MCContext &Context,
|
||||||
ExceptionHandling::ExceptionsType ET =
|
ExceptionHandling::ExceptionsType ET =
|
||||||
Context.getAsmInfo().getExceptionHandlingType();
|
Context.getAsmInfo().getExceptionHandlingType();
|
||||||
|
|
||||||
if (isVerboseAsm &&
|
if (useCFI && isVerboseAsm &&
|
||||||
(ET == ExceptionHandling::SjLj || ET == ExceptionHandling::DwarfCFI))
|
(ET == ExceptionHandling::SjLj || ET == ExceptionHandling::DwarfCFI))
|
||||||
return new MCLSDADecoderAsmStreamer(Context, OS, isVerboseAsm, useLoc,
|
return new MCLSDADecoderAsmStreamer(Context, OS, isVerboseAsm, useLoc,
|
||||||
useCFI, IP, CE, TAB, ShowInst);
|
useCFI, IP, CE, TAB, ShowInst);
|
||||||
|
|
Loading…
Reference in New Issue