# Checks handling of undefined weak external functions.  When the
# static linker decides they are undefined, check GOT relocations
# resolve to zero (i.e. a global that contains zero.).
#
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s
# RUN: wasm-ld %t.o -o %t1.wasm
# RUN: obj2yaml %t1.wasm | FileCheck %s
#
# With `--unresolved-symbols=ignore-all` the behaviour should be the same
# as the default.>
#
# RUN: wasm-ld --unresolved-symbols=ignore-all %t.o -o %t2.wasm
# RUN: obj2yaml %t2.wasm | FileCheck %s

.globl get_foo_addr
get_foo_addr:
  .functype get_foo_addr () -> (i32)
  global.get foo@GOT
  end_function

.globl _start
_start:
  .functype _start () -> ()
  call get_foo_addr
  end_function

.weak foo
.functype foo () -> (i32)

# Verify that we do not generate dynamic relocations for the GOT entry.

# CHECK-NOT: __wasm_apply_relocs

# Verify that we do not generate an import for foo

# CHECK-NOT:  - Type:            IMPORT

#      CHECK:   - Type:            GLOBAL
# CHECK-NEXT:     Globals:
# CHECK-NEXT:       - Index:           0
# CHECK-NEXT:         Type:            I32
# CHECK-NEXT:         Mutable:         true
# CHECK-NEXT:         InitExpr:
# CHECK-NEXT:           Opcode:          I32_CONST
# CHECK-NEXT:           Value:           66560
# Global 'undefined_weak:foo' representing the GOT entry for foo
# Unlike other internal GOT entries that need to be mutable this one
# is immutable and not updated by `__wasm_apply_relocs`
# CHECK-NEXT:       - Index:           1
# CHECK-NEXT:         Type:            I32
# CHECK-NEXT:         Mutable:         false
# CHECK-NEXT:         InitExpr:
# CHECK-NEXT:           Opcode:          I32_CONST
# CHECK-NEXT:           Value:           0

#      CHECK:  - Type:            CUSTOM
# CHECK-NEXT:    Name:            name
# CHECK-NEXT:    FunctionNames:
# CHECK-NEXT:      - Index:           0
# CHECK-NEXT:        Name:            'undefined_weak:foo'
# CHECK-NEXT:      - Index:           1
# CHECK-NEXT:        Name:            get_foo_addr
# CHECK-NEXT:      - Index:           2
# CHECK-NEXT:        Name:            _start
# CHECK-NEXT:    GlobalNames:
# CHECK-NEXT:      - Index:           0
# CHECK-NEXT:        Name:            __stack_pointer
# CHECK-NEXT:      - Index:           1
# CHECK-NEXT:        Name:            'GOT.func.internal.undefined_weak:foo'

# With `-pie` or `-shared` the resolution should be deferred to the dynamic
# linker and the function address should be imported as GOT.func.foo.
#
# RUN: wasm-ld --experimental-pic -pie %t.o -o %t3.wasm
# RUN: obj2yaml %t3.wasm | FileCheck %s --check-prefix=IMPORT

#      IMPORT:  - Type:            IMPORT
#      IMPORT:      - Module:          GOT.func
# IMPORT-NEXT:        Field:           foo
# IMPORT-NEXT:        Kind:            GLOBAL
# IMPORT-NEXT:        GlobalType:      I32
# IMPORT-NEXT:        GlobalMutable:   true

#      IMPORT:     GlobalNames:
# IMPORT-NEXT:       - Index:           0
# IMPORT-NEXT:         Name:            __memory_base
# IMPORT-NEXT:       - Index:           1
# IMPORT-NEXT:         Name:            __table_base
# IMPORT-NEXT:       - Index:           2
# IMPORT-NEXT:         Name:            foo
