[WebAssembly] Fix two bugs in LEB compression: properly calculate function body offse...
authorSam Clegg <sbc@chromium.org>
Tue, 22 May 2018 17:06:55 +0000 (17:06 +0000)
committerSam Clegg <sbc@chromium.org>
Tue, 22 May 2018 17:06:55 +0000 (17:06 +0000)
* Gets function size field from right location
* Writes I32 values during compression

Patch by Yury Delendik

Differential Revision: https://reviews.llvm.org/D47204

llvm-svn: 333002

lld/wasm/InputChunks.cpp

index a28f81f..b14a679 100644 (file)
@@ -195,6 +195,7 @@ static unsigned writeCompressedReloc(uint8_t *Buf, const WasmRelocation &Rel,
     return encodeSLEB128(static_cast<int32_t>(Value), Buf);
   case R_WEBASSEMBLY_TABLE_INDEX_I32:
   case R_WEBASSEMBLY_MEMORY_ADDR_I32:
+    write32le(Buf, Value);
     return 4;
   default:
     llvm_unreachable("unknown relocation type");
@@ -279,7 +280,7 @@ void InputFunction::writeTo(uint8_t *Buf) const {
   const uint8_t *FuncStart = SecStart + getInputSectionOffset();
   const uint8_t *End = FuncStart + Function->Size;
   uint32_t Count;
-  decodeULEB128(Buf, &Count);
+  decodeULEB128(FuncStart, &Count);
   FuncStart += Count;
 
   DEBUG(dbgs() << "write func: " << getName() << "\n");