[WebAssembly] Store function index rather than table index in TABLE_INDEX relocations
authorSam Clegg <sbc@chromium.org>
Tue, 23 Jan 2018 01:23:17 +0000 (01:23 +0000)
committerSam Clegg <sbc@chromium.org>
Tue, 23 Jan 2018 01:23:17 +0000 (01:23 +0000)
commit60ec30340ff0c9b51fd1da4b7173dc087e2a96ae
treea735817ce9d5b24257d5056a41b6db9f65feb18e
parent4ce341ffb6744b68732df723ccd46ec300f52acf
[WebAssembly] Store function index rather than table index in TABLE_INDEX relocations

Relocations of type R_WEBASSEMBLY_TABLE_INDEX represent places
where the table index for a given function is needed.  While the
value stored in this location is a table index, the index in
the relocation entry itself is a function index (the index of
the function which is to be called indirectly).

This is how is was spec'd originally but the LLVM implementation
didn't do this.  This makes things a little simpler in the linker
since the table in the input file can essentially be ignored that
the output table can be created purely based on these relocations.

Patch by Nicholas Wilson!

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

llvm-svn: 323165
llvm/lib/MC/WasmObjectWriter.cpp
llvm/test/MC/WebAssembly/external-func-address.ll
llvm/test/MC/WebAssembly/func-address.ll
llvm/test/MC/WebAssembly/global-ctor-dtor.ll
llvm/test/MC/WebAssembly/weak-alias.ll