[WebAssembly] Fix two bugs in LEB compression: properly calculate function body offset, and write I32 values.

* 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
This commit is contained in:
Sam Clegg 2018-05-22 17:06:55 +00:00
parent 7701360308
commit 65a91288fc
1 changed files with 2 additions and 1 deletions

View 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");