diff options
| author | Derek Schuff <dschuff@google.com> | 2017-03-16 20:49:48 +0000 |
|---|---|---|
| committer | Derek Schuff <dschuff@google.com> | 2017-03-16 20:49:48 +0000 |
| commit | b879539aacb0294d71640d52314461d33bde9422 (patch) | |
| tree | 6956863cb222ebb69e289aa6a00b50131c4f22ac /llvm/lib/Target/WebAssembly | |
| parent | c9500616d8ef8d62541841ded717ac15c51d2938 (diff) | |
| download | bcm5719-llvm-b879539aacb0294d71640d52314461d33bde9422.tar.gz bcm5719-llvm-b879539aacb0294d71640d52314461d33bde9422.zip | |
[WebAssembly] Fix some broken type encodings in wasm binary
A recent change switch the in-memory wasm value types
to be signed integers, but I missing a few cases where
these were being writing to the binary.
Differential Revision: https://reviews.llvm.org/D31014
Patch by Sam Clegg
llvm-svn: 297991
Diffstat (limited to 'llvm/lib/Target/WebAssembly')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h | 4 |
2 files changed, 11 insertions, 3 deletions
diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp index a499cc23a6b..f3b6b100d65 100644 --- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp +++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp @@ -31,6 +31,10 @@ using namespace llvm; WebAssemblyTargetStreamer::WebAssemblyTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {} +void WebAssemblyTargetStreamer::emitValueType(wasm::ValType Type) { + Streamer.EmitSLEB128IntValue(int32_t(Type)); +} + WebAssemblyTargetAsmStreamer::WebAssemblyTargetAsmStreamer( MCStreamer &S, formatted_raw_ostream &OS) : WebAssemblyTargetStreamer(S), OS(OS) {} @@ -128,7 +132,7 @@ void WebAssemblyTargetELFStreamer::emitResult(MCSymbol *Symbol, void WebAssemblyTargetELFStreamer::emitLocal(ArrayRef<MVT> Types) { Streamer.EmitULEB128IntValue(Types.size()); for (MVT Type : Types) - Streamer.EmitIntValue(int64_t(WebAssembly::toValType(Type)), 1); + emitValueType(WebAssembly::toValType(Type)); } void WebAssemblyTargetELFStreamer::emitGlobal(ArrayRef<MVT> Types) { @@ -182,7 +186,7 @@ void WebAssemblyTargetWasmStreamer::emitLocal(ArrayRef<MVT> Types) { Streamer.EmitULEB128IntValue(Grouped.size()); for (auto Pair : Grouped) { Streamer.EmitULEB128IntValue(Pair.second); - Streamer.EmitULEB128IntValue(uint64_t(WebAssembly::toValType(Pair.first))); + emitValueType(WebAssembly::toValType(Pair.first)); } } @@ -194,7 +198,7 @@ void WebAssemblyTargetWasmStreamer::emitGlobal(ArrayRef<MVT> Types) { Streamer.SwitchSection(Streamer.getContext() .getWasmSection(".global_variables", 0, 0)); for (MVT Ty : Types) - Streamer.EmitIntValue(uint64_t(WebAssembly::toValType(Ty)), 1); + Streamer.EmitIntValue(int64_t(WebAssembly::toValType(Ty)), 1); Streamer.PopSection(); } diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h index 92bb949b654..bb9a9c90c3a 100644 --- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h +++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h @@ -18,6 +18,7 @@ #include "llvm/CodeGen/MachineValueType.h" #include "llvm/MC/MCStreamer.h" +#include "llvm/Support/Wasm.h" namespace llvm { @@ -50,6 +51,9 @@ public: virtual void emitIndIdx(const MCExpr *Value) = 0; /// .import_global virtual void emitGlobalImport(StringRef name) = 0; + +protected: + void emitValueType(wasm::ValType Type); }; /// This part is for ascii assembly output |

