xref: /llvm-project/lld/test/wasm/shared-memory-bss.s (revision 1eb79e732c47386258e04c4b59a78047c422c0f4)
1# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s
2# RUN: wasm-ld --experimental-pic -shared --shared-memory -o %t.so %t.o
3# RUN: llvm-objdump -d --no-show-raw-insn --no-leading-addr %t.so | FileCheck %s
4# RUN: obj2yaml %t.so | FileCheck %s --check-prefix=YAML
5
6.section  .bss.foo,"",@
7.globl  foo
8.p2align  2
9foo:
10  .int32  0
11  .size foo, 4
12
13.section  .data.bar,"",@
14.globl  bar
15.p2align  2
16bar:
17  .int32  42
18  .size bar, 4
19
20.section  .custom_section.target_features,"",@
21  .int8 2
22  .int8 43
23  .int8 7
24  .ascii  "atomics"
25  .int8 43
26  .int8 11
27  .ascii  "bulk-memory"
28
29# Verify that there is only a single data segment and no bss
30# in the binary:
31
32#      YAML:  - Type:            DATA{{$}}
33# YAML-NEXT:    Segments:
34# YAML-NEXT:      - SectionOffset:   3
35# YAML-NEXT:        InitFlags:       1
36# YAML-NEXT:        Content:         2A000000
37# YAML-NEXT:  - Type:            CUSTOM
38
39# CHECK:      <__wasm_init_memory>:
40# CHECK-NEXT:    .local i32
41# CHECK-NEXT:            global.get      0
42# CHECK-NEXT:            i32.const       8
43# CHECK-NEXT:            i32.add
44# CHECK-NEXT:            local.set       0
45# CHECK-NEXT:            block
46# CHECK-NEXT:            block
47# CHECK-NEXT:            block
48# CHECK-NEXT:            local.get       0
49# CHECK-NEXT:            i32.const       0
50# CHECK-NEXT:            i32.const       1
51# CHECK-NEXT:            i32.atomic.rmw.cmpxchg  0
52# CHECK-NEXT:            br_table        {0, 1, 2}       # 1: down to label1
53# CHECK-NEXT:                                            # 2: down to label0
54# CHECK-NEXT:            end
55
56# Regular data gets initialized with memory.init
57
58# CHECK-NEXT:            i32.const       0
59# CHECK-NEXT:            global.get      0
60# CHECK-NEXT:            i32.add
61# CHECK-NEXT:            i32.const       0
62# CHECK-NEXT:            i32.const       4
63# CHECK-NEXT:            memory.init     0, 0
64
65# BSS gets initialized with memory.fill
66
67# CHECK-NEXT:            i32.const       4
68# CHECK-NEXT:            global.get      0
69# CHECK-NEXT:            i32.add
70# CHECK-NEXT:            i32.const       0
71# CHECK-NEXT:            i32.const       4
72# CHECK-NEXT:            memory.fill     0
73