diff options
Diffstat (limited to 'contrib/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyWasmObjectWriter.cpp')
| -rw-r--r-- | contrib/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyWasmObjectWriter.cpp | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/contrib/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyWasmObjectWriter.cpp b/contrib/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyWasmObjectWriter.cpp index 2846ec5e9337..27c01cb8acf7 100644 --- a/contrib/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyWasmObjectWriter.cpp +++ b/contrib/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyWasmObjectWriter.cpp @@ -13,14 +13,14 @@  ///  //===----------------------------------------------------------------------===// -#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"  #include "MCTargetDesc/WebAssemblyFixupKinds.h" +#include "MCTargetDesc/WebAssemblyMCTargetDesc.h" +#include "llvm/BinaryFormat/Wasm.h"  #include "llvm/MC/MCFixup.h"  #include "llvm/MC/MCSymbolWasm.h"  #include "llvm/MC/MCWasmObjectWriter.h"  #include "llvm/Support/Casting.h"  #include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/Wasm.h"  using namespace llvm;  namespace { @@ -54,6 +54,11 @@ static bool IsFunctionExpr(const MCExpr *Expr) {    return false;  } +static bool IsFunctionType(const MCValue &Target) { +  const MCSymbolRefExpr *RefA = Target.getSymA(); +  return RefA && RefA->getKind() == MCSymbolRefExpr::VK_WebAssembly_TYPEINDEX; +} +  unsigned WebAssemblyWasmObjectWriter::getRelocType(MCContext &Ctx,                                                     const MCValue &Target,                                                     const MCFixup &Fixup, @@ -71,6 +76,8 @@ unsigned WebAssemblyWasmObjectWriter::getRelocType(MCContext &Ctx,    case WebAssembly::fixup_code_sleb128_i64:      llvm_unreachable("fixup_sleb128_i64 not implemented yet");    case WebAssembly::fixup_code_uleb128_i32: +    if (IsFunctionType(Target)) +      return wasm::R_WEBASSEMBLY_TYPE_INDEX_LEB;      if (IsFunction)        return wasm::R_WEBASSEMBLY_FUNCTION_INDEX_LEB;      return wasm::R_WEBASSEMBLY_GLOBAL_ADDR_LEB;  | 
