xref: /llvm-project/lld/test/wasm/data-segment-merging.ll (revision 98ff205fd86eb2d1b26e91c6f731f1b307310f95)
1@a = hidden global [6 x i8] c"hello\00", align 1
2@b = hidden global [8 x i8] c"goodbye\00", align 1
3@c = hidden global [9 x i8] c"whatever\00", align 1
4@d = hidden global i32 42, align 4
5
6@e = private constant [9 x i8] c"constant\00", align 1
7@f = private constant i8 43, align 4
8
9; RUN: llc --mtriple=wasm32-unknown-unknown -mattr=+bulk-memory,+atomics -filetype=obj %s -o %t.passive.o
10; RUN: llc --mtriple=wasm64-unknown-unknown -mattr=+bulk-memory,+atomics -filetype=obj %s -o %t.passive64.o
11; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o %t.o
12
13; RUN: wasm-ld -no-gc-sections --no-entry -o %t.merged.wasm %t.o
14; RUN: obj2yaml %t.merged.wasm | FileCheck %s --check-prefix=MERGE
15
16; MERGE-LABEL: - Type:            DATA
17; MERGE-NEXT:    Segments:
18; MERGE-NEXT:      - SectionOffset:   7
19; MERGE-NEXT:        InitFlags:       0
20; MERGE-NEXT:        Offset:
21; MERGE:             Content:         636F6E7374616E74000000002B
22; MERGE-NEXT:      - SectionOffset:   26
23; MERGE-NEXT:        InitFlags:       0
24; MERGE-NEXT:        Offset:
25; MERGE:             Content:         68656C6C6F00676F6F6462796500776861746576657200002A000000
26; MERGE-NEXT:  - Type:            CUSTOM
27; MERGE-NEXT:    Name:            name
28; MERGE-NEXT:    FunctionNames:
29; MERGE-NEXT:      - Index:           0
30; MERGE-NEXT:        Name:            __wasm_call_ctors
31; MERGE-NEXT:    GlobalNames:
32; MERGE-NEXT:      - Index:           0
33; MERGE-NEXT:        Name:            __stack_pointer
34; MERGE-NEXT:    DataSegmentNames:
35; MERGE-NEXT:      - Index:           0
36; MERGE-NEXT:        Name:            .rodata
37
38; RUN: wasm-ld -no-gc-sections --no-entry --no-merge-data-segments -o %t.separate.wasm %t.o
39; RUN: obj2yaml %t.separate.wasm | FileCheck %s --check-prefix=SEPARATE
40
41; SEPARATE-NOT:                  DATACOUNT
42; SEPARATE-LABEL: - Type:            DATA
43; SEPARATE-NEXT:    Segments:
44; SEPARATE-NEXT:      - SectionOffset:   7
45; SEPARATE-NEXT:        InitFlags:       0
46; SEPARATE-NEXT:        Offset:
47; SEPARATE:             Content:         636F6E7374616E7400
48; SEPARATE-NEXT:      - SectionOffset:   22
49; SEPARATE-NEXT:        InitFlags:       0
50; SEPARATE-NEXT:        Offset:
51; SEPARATE:             Content:         2B
52; SEPARATE-NEXT:      - SectionOffset:   29
53; SEPARATE-NEXT:        InitFlags:       0
54; SEPARATE-NEXT:        Offset:
55; SEPARATE:             Content:         68656C6C6F00
56; SEPARATE-NEXT:      - SectionOffset:   41
57; SEPARATE-NEXT:        InitFlags:       0
58; SEPARATE-NEXT:        Offset:
59; SEPARATE:             Content:         676F6F6462796500
60; SEPARATE-NEXT:      - SectionOffset:   55
61; SEPARATE-NEXT:        InitFlags:       0
62; SEPARATE-NEXT:        Offset:
63; SEPARATE:             Content:         '776861746576657200'
64; SEPARATE-NEXT:      - SectionOffset:   70
65; SEPARATE-NEXT:        InitFlags:       0
66; SEPARATE-NEXT:        Offset:
67; SEPARATE:             Content:         2A000000
68; SEPARATE-NEXT:  - Type:            CUSTOM
69; SEPARATE-NEXT:    Name:            name
70; SEPARATE-NEXT:    FunctionNames:
71; SEPARATE-NEXT:      - Index:           0
72; SEPARATE-NEXT:        Name:            __wasm_call_ctors
73; SEPARATE-NEXT:    GlobalNames:
74; SEPARATE-NEXT:      - Index:           0
75; SEPARATE-NEXT:        Name:            __stack_pointer
76; SEPARATE-NEXT:    DataSegmentNames:
77; SEPARATE-NEXT:      - Index:           0
78; SEPARATE-NEXT:        Name:            .rodata
79
80; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 -o %t.merged.passive.wasm %t.passive.o
81; RUN: obj2yaml %t.merged.passive.wasm | FileCheck %s --check-prefix=PASSIVE-MERGE
82; RUN: wasm-ld -mwasm64 -no-gc-sections --no-entry --shared-memory --max-memory=131072 -o %t.merged.passive64.wasm %t.passive64.o
83; RUN: obj2yaml %t.merged.passive64.wasm | FileCheck %s --check-prefix=PASSIVE-MERGE
84
85; PASSIVE-MERGE-LABEL: - Type:            DATACOUNT
86; PASSIVE-MERGE-NEXT:    Count:           2
87; PASSIVE-MERGE-LABEL: - Type:            DATA
88; PASSIVE-MERGE-NEXT:    Segments:
89; PASSIVE-MERGE-NEXT:      - SectionOffset:   3
90; PASSIVE-MERGE-NEXT:        InitFlags:       1
91; PASSIVE-MERGE-NEXT:        Content:         636F6E7374616E74000000002B
92; PASSIVE-MERGE-NEXT:      - SectionOffset:   18
93; PASSIVE-MERGE-NEXT:        InitFlags:       1
94; PASSIVE-MERGE-NEXT:        Content:         68656C6C6F00676F6F6462796500776861746576657200002A000000
95; PASSIVE-MERGE-NEXT:  - Type:            CUSTOM
96; PASSIVE-MERGE-NEXT:    Name:            name
97; PASSIVE-MERGE-NEXT:    FunctionNames:
98; PASSIVE-MERGE-NEXT:      - Index:           0
99; PASSIVE-MERGE-NEXT:        Name:            __wasm_call_ctors
100; PASSIVE-MERGE-NEXT:      - Index:           1
101; PASSIVE-MERGE-NEXT:        Name:            __wasm_init_tls
102; PASSIVE-MERGE-NEXT:      - Index:           2
103; PASSIVE-MERGE-NEXT:        Name:            __wasm_init_memory
104
105; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 --no-merge-data-segments -o %t.separate.passive.wasm %t.passive.o
106; RUN: obj2yaml %t.separate.passive.wasm | FileCheck %s --check-prefix=PASSIVE-SEPARATE
107; RUN: wasm-ld -mwasm64 -no-gc-sections --no-entry --shared-memory --max-memory=131072 --no-merge-data-segments -o %t.separate.passive64.wasm %t.passive64.o
108; RUN: obj2yaml %t.separate.passive64.wasm | FileCheck %s --check-prefix=PASSIVE-SEPARATE
109
110; PASSIVE-SEPARATE-LABEL: - Type:            DATACOUNT
111; PASSIVE-SEPARATE-NEXT:    Count:           6
112; PASSIVE-SEPARATE-LABEL: - Type:            DATA
113; PASSIVE-SEPARATE-NEXT:    Segments:
114; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   3
115; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
116; PASSIVE-SEPARATE-NEXT:        Content:         636F6E7374616E7400
117; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   14
118; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
119; PASSIVE-SEPARATE-NEXT:        Content:         2B
120; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   17
121; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
122; PASSIVE-SEPARATE-NEXT:        Content:         68656C6C6F00
123; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   25
124; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
125; PASSIVE-SEPARATE-NEXT:        Content:         676F6F6462796500
126; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   35
127; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
128; PASSIVE-SEPARATE-NEXT:        Content:         '776861746576657200'
129; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   46
130; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
131; PASSIVE-SEPARATE-NEXT:        Content:         2A000000
132; PASSIVE-SEPARATE-NEXT:    - Type:            CUSTOM
133; PASSIVE-SEPARATE-NEXT:      Name:            name
134; PASSIVE-SEPARATE-NEXT:      FunctionNames:
135; PASSIVE-SEPARATE-NEXT:        - Index:           0
136; PASSIVE-SEPARATE-NEXT:          Name:            __wasm_call_ctors
137; PASSIVE-SEPARATE-NEXT:        - Index:           1
138; PASSIVE-SEPARATE-NEXT:          Name:            __wasm_init_tls
139; PASSIVE-SEPARATE-NEXT:        - Index:           2
140; PASSIVE-SEPARATE-NEXT:          Name:            __wasm_init_memory
141