For wasm-ld table linking work to proceed, object files should indicate
if they use an indirect function table. In the future this will be done
by the usual symbols and relocations mechanism, but until that support
lands in the linker, the presence of an __indirect_function_table in
the object file's import section shows that the object file needs an
indirect function table.
Prior to https://reviews.llvm.org/D91637, this condition was met by all
object files residualizing an __indirect_function_table import.
Since https://reviews.llvm.org/D91637, the intention has been that only
those object files needing an indirect function table would have the
__indirect_function_table import. However, we missed the case of
object files which use the table via call_indirect but which
themselves do not declare any indirect functions.
This changeset makes it so that when we lower a call to call_indirect,
that we ensure that a __indirect_function_table symbol is present and
that it will be propagated to the linker.
A followup patch will revise this mechanism to make an explicit link
between call_indirect and its associated indirect function table; see
https://reviews.llvm.org/D90948.
It could be that MC may be designed to specifically not include CodeGen stuff? Separation of concerns and all that.
Perhaps this oversteps some boundary? I'm not familiar enough the design goals of llvm WRT compartmentalization to know if this is some kind of violation. Does anyone know if this is problem?