# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/hello.s -o %t.hello32.o # RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %s -o %t32.o # RUN: wasm-ld -m wasm32 -no-gc-sections --export=__data_end --export=__heap_base --allow-undefined --no-entry -o %t32.wasm %t32.o %t.hello32.o # RUN: obj2yaml %t32.wasm | FileCheck -DPTR=I32 %s # # RUN: llvm-mc -filetype=obj -triple=wasm64-unknown-unknown %p/Inputs/hello.s -o %t.hello64.o # RUN: llvm-mc -filetype=obj -triple=wasm64-unknown-unknown %s -o %t64.o # RUN: wasm-ld -m wasm64 -no-gc-sections --export=__data_end --export=__heap_base --allow-undefined --no-entry -o %t64.wasm %t64.o %t.hello64.o # RUN: obj2yaml %t64.wasm | FileCheck --check-prefixes CHECK,CHK64 -DPTR=I64 %s .section .data.foo,"",@ .globl foo .hidden foo .p2align 2 foo: .int32 1 .size foo, 4 .section .data.aligned_bar,"",@ .globl aligned_bar .hidden aligned_bar .p2align 4 aligned_bar: .int32 3 .size aligned_bar, 4 .section .data.external_ref,"",@ .globl external_ref .p2align 3 external_ref: .int32 hello_str .size external_ref, 4 .section .bss.local_struct,"",@ .globl local_struct .hidden local_struct .p2align 2 local_struct: .skip 8 .size local_struct, 8 .section .data.local_struct_internal_ptr,"",@ .globl local_struct_internal_ptr .hidden local_struct_internal_ptr .p2align 2 local_struct_internal_ptr: .int32 local_struct+4 .size local_struct_internal_ptr, 4 .size hello_str, 4 # CHECK: - Type: MEMORY # CHECK-NEXT: Memories: # CHK64-NEXT: - Flags: [ IS_64 ] # CHECK-NEXT: Minimum: 0x2 # CHECK-NEXT: - Type: GLOBAL # CHECK-NEXT: Globals: # CHECK-NEXT: - Index: 0 # CHECK-NEXT: Type: [[PTR]] # CHECK-NEXT: Mutable: true # CHECK-NEXT: InitExpr: # CHECK-NEXT: Opcode: [[PTR]]_CONST # CHECK-NEXT: Value: 66624 # CHECK-NEXT: - Index: 1 # CHECK-NEXT: Type: [[PTR]] # CHECK-NEXT: Mutable: false # CHECK-NEXT: InitExpr: # CHECK-NEXT: Opcode: [[PTR]]_CONST # CHECK-NEXT: Value: 1080 # CHECK-NEXT: - Index: 2 # CHECK-NEXT: Type: [[PTR]] # CHECK-NEXT: Mutable: false # CHECK-NEXT: InitExpr: # CHECK-NEXT: Opcode: [[PTR]]_CONST # CHECK-NEXT: Value: 66624 # CHECK: - Type: DATA # CHECK-NEXT: Segments: # CHECK-NEXT: - SectionOffset: 7 # CHECK-NEXT: InitFlags: 0 # CHECK-NEXT: Offset: # CHECK-NEXT: Opcode: [[PTR]]_CONST # CHECK-NEXT: Value: 1024 # CHECK-NEXT: Content: 68656C6C6F0A00 # CHECK-NEXT: - SectionOffset: 20 # CHECK-NEXT: InitFlags: 0 # CHECK-NEXT: Offset: # CHECK-NEXT: Opcode: [[PTR]]_CONST # CHECK-NEXT: Value: 1040 # RUN: wasm-ld -no-gc-sections --allow-undefined --no-entry \ # RUN: --initial-memory=131072 --max-memory=131072 -o %t_max.wasm %t32.o \ # RUN: %t.hello32.o # RUN: obj2yaml %t_max.wasm | FileCheck %s -check-prefix=CHECK-MAX # CHECK-MAX: - Type: MEMORY # CHECK-MAX-NEXT: Memories: # CHECK-MAX-NEXT: - Flags: [ HAS_MAX ] # CHECK-MAX-NEXT: Minimum: 0x2 # CHECK-MAX-NEXT: Maximum: 0x2 # RUN: wasm-ld -no-gc-sections --allow-undefined --no-entry --shared-memory \ # RUN: --features=atomics,bulk-memory --initial-memory=131072 \ # RUN: --max-memory=131072 -o %t_max.wasm %t32.o %t.hello32.o # RUN: obj2yaml %t_max.wasm | FileCheck %s -check-prefix=CHECK-SHARED # CHECK-SHARED: - Type: MEMORY # CHECK-SHARED-NEXT: Memories: # CHECK-SHARED-NEXT: - Flags: [ HAS_MAX, IS_SHARED ] # CHECK-SHARED-NEXT: Minimum: 0x2 # CHECK-SHARED-NEXT: Maximum: 0x2 # XUN: wasm-ld --relocatable -o %t_reloc.wasm %t32.o %t.hello32.o # XUN: obj2yaml %t_reloc.wasm | FileCheck %s -check-prefix=RELOC # RELOC: - Type: DATA # RELOC-NEXT: Relocations: # RELOC-NEXT: - Type: R_WASM_MEMORY_ADDR_I32 # RELOC-NEXT: Index: 3 # RELOC-NEXT: Offset: 0x24 # RELOC-NEXT: - Type: R_WASM_MEMORY_ADDR_I32 # RELOC-NEXT: Index: 4 # RELOC-NEXT: Offset: 0x2D # RELOC-NEXT: Addend: 4 # RELOC-NEXT: Segments: # RELOC-NEXT: - SectionOffset: 6 # RELOC-NEXT: InitFlags: 0 # RELOC-NEXT: Offset: # RELOC-NEXT: Opcode: I32_CONST # RELOC-NEXT: Value: 0 # RELOC-NEXT: Content: 68656C6C6F0A00 # RELOC-NEXT: - SectionOffset: 18 # RELOC-NEXT: InitFlags: 0 # RELOC-NEXT: Offset: # RELOC-NEXT: Opcode: I32_CONST # RELOC-NEXT: Value: 8 # RELOC-NEXT: Content: '01000000' # RELOC-NEXT: - SectionOffset: 27 # RELOC-NEXT: InitFlags: 0 # RELOC-NEXT: Offset: # RELOC-NEXT: Opcode: I32_CONST # RELOC-NEXT: Value: 16 # RELOC-NEXT: Content: '03000000' # RELOC-NEXT: - SectionOffset: 36 # RELOC-NEXT: InitFlags: 0 # RELOC-NEXT: Offset: # RELOC-NEXT: Opcode: I32_CONST # RELOC-NEXT: Value: 24 # RELOC-NEXT: Content: '00000000' # RELOC-NEXT: - SectionOffset: 45 # RELOC-NEXT: InitFlags: 0 # RELOC-NEXT: Offset: # RELOC-NEXT: Opcode: I32_CONST # RELOC-NEXT: Value: 28 # RELOC-NEXT: Content: '24000000' # RELOC-NEXT: - SectionOffset: 54 # RELOC-NEXT: InitFlags: 0 # RELOC-NEXT: Offset: # RELOC-NEXT: Opcode: I32_CONST # RELOC-NEXT: Value: 32 # RELOC-NEXT: Content: '0000000000000000' # RELOC: SymbolTable: # RELOC-NEXT: - Index: 0 # RELOC-NEXT: Kind: DATA # RELOC-NEXT: Name: foo # RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ] # RELOC-NEXT: Segment: 1 # RELOC-NEXT: Size: 4 # RELOC-NEXT: - Index: 1 # RELOC-NEXT: Kind: DATA # RELOC-NEXT: Name: aligned_bar # RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ] # RELOC-NEXT: Segment: 2 # RELOC-NEXT: Size: 4 # RELOC-NEXT: - Index: 2 # RELOC-NEXT: Kind: DATA # RELOC-NEXT: Name: external_ref # RELOC-NEXT: Flags: [ ] # RELOC-NEXT: Segment: 3 # RELOC-NEXT: Size: 4 # RELOC-NEXT: - Index: 3 # RELOC-NEXT: Kind: DATA # RELOC-NEXT: Name: hello_str # RELOC-NEXT: Flags: [ ] # RELOC-NEXT: Segment: 0 # RELOC-NEXT: Size: 7