1 ; RUN: llc -filetype=obj %p/Inputs/weak-symbol1.ll -o %t1.o
2 ; RUN: llc -filetype=obj %p/Inputs/weak-symbol2.ll -o %t2.o
3 ; RUN: llc -filetype=obj %s -o %t.o
4 ; RUN: wasm-ld -no-gc-sections -o %t.wasm %t.o %t1.o %t2.o
5 ; RUN: obj2yaml %t.wasm | FileCheck %s
7 target triple = "wasm32-unknown-unknown"
9 declare i32 @weakFn() local_unnamed_addr
10 @weakGlobal = external global i32
12 define void @_start() local_unnamed_addr {
14 %call = call i32 @weakFn()
15 %val = load i32, i32* @weakGlobal, align 4
20 ; CHECK-NEXT: FileHeader:
21 ; CHECK-NEXT: Version: 0x00000001
22 ; CHECK-NEXT: Sections:
23 ; CHECK-NEXT: - Type: TYPE
24 ; CHECK-NEXT: Signatures:
25 ; CHECK-NEXT: - Index: 0
26 ; CHECK-NEXT: ReturnType: NORESULT
27 ; CHECK-NEXT: ParamTypes:
28 ; CHECK-NEXT: - Index: 1
29 ; CHECK-NEXT: ReturnType: I32
30 ; CHECK-NEXT: ParamTypes:
31 ; CHECK-NEXT: - Type: FUNCTION
32 ; CHECK-NEXT: FunctionTypes: [ 0, 0, 1, 1, 1, 1 ]
33 ; CHECK-NEXT: - Type: TABLE
35 ; CHECK-NEXT: - ElemType: ANYFUNC
37 ; CHECK-NEXT: Flags: [ HAS_MAX ]
38 ; CHECK-NEXT: Initial: 0x00000002
39 ; CHECK-NEXT: Maximum: 0x00000002
40 ; CHECK-NEXT: - Type: MEMORY
41 ; CHECK-NEXT: Memories:
42 ; CHECK-NEXT: - Initial: 0x00000002
43 ; CHECK-NEXT: - Type: GLOBAL
44 ; CHECK-NEXT: Globals:
45 ; CHECK-NEXT: - Index: 0
46 ; CHECK-NEXT: Type: I32
47 ; CHECK-NEXT: Mutable: true
48 ; CHECK-NEXT: InitExpr:
49 ; CHECK-NEXT: Opcode: I32_CONST
50 ; CHECK-NEXT: Value: 66576
51 ; CHECK-NEXT: - Index: 1
52 ; CHECK-NEXT: Type: I32
53 ; CHECK-NEXT: Mutable: false
54 ; CHECK-NEXT: InitExpr:
55 ; CHECK-NEXT: Opcode: I32_CONST
56 ; CHECK-NEXT: Value: 66576
57 ; CHECK-NEXT: - Index: 2
58 ; CHECK-NEXT: Type: I32
59 ; CHECK-NEXT: Mutable: false
60 ; CHECK-NEXT: InitExpr:
61 ; CHECK-NEXT: Opcode: I32_CONST
62 ; CHECK-NEXT: Value: 1032
63 ; CHECK-NEXT: - Index: 3
64 ; CHECK-NEXT: Type: I32
65 ; CHECK-NEXT: Mutable: false
66 ; CHECK-NEXT: InitExpr:
67 ; CHECK-NEXT: Opcode: I32_CONST
68 ; CHECK-NEXT: Value: 1024
69 ; CHECK-NEXT: - Type: EXPORT
70 ; CHECK-NEXT: Exports:
71 ; CHECK-NEXT: - Name: memory
72 ; CHECK-NEXT: Kind: MEMORY
73 ; CHECK-NEXT: Index: 0
74 ; CHECK-NEXT: - Name: __heap_base
75 ; CHECK-NEXT: Kind: GLOBAL
76 ; CHECK-NEXT: Index: 1
77 ; CHECK-NEXT: - Name: __data_end
78 ; CHECK-NEXT: Kind: GLOBAL
79 ; CHECK-NEXT: Index: 2
80 ; CHECK-NEXT: - Name: _start
81 ; CHECK-NEXT: Kind: FUNCTION
82 ; CHECK-NEXT: Index: 1
83 ; CHECK-NEXT: - Name: weakFn
84 ; CHECK-NEXT: Kind: FUNCTION
85 ; CHECK-NEXT: Index: 2
86 ; CHECK-NEXT: - Name: exportWeak1
87 ; CHECK-NEXT: Kind: FUNCTION
88 ; CHECK-NEXT: Index: 3
89 ; CHECK-NEXT: - Name: weakGlobal
90 ; CHECK-NEXT: Kind: GLOBAL
91 ; CHECK-NEXT: Index: 3
92 ; CHECK-NEXT: - Name: exportWeak2
93 ; CHECK-NEXT: Kind: FUNCTION
94 ; CHECK-NEXT: Index: 5
95 ; CHECK-NEXT: - Type: ELEM
96 ; CHECK-NEXT: Segments:
97 ; CHECK-NEXT: - Offset:
98 ; CHECK-NEXT: Opcode: I32_CONST
99 ; CHECK-NEXT: Value: 1
100 ; CHECK-NEXT: Functions: [ 2 ]
101 ; CHECK-NEXT: - Type: CODE
102 ; CHECK-NEXT: Functions:
103 ; CHECK-NEXT: - Index: 0
104 ; CHECK-NEXT: Locals:
105 ; CHECK-NEXT: Body: 0B
106 ; CHECK-NEXT: - Index: 1
107 ; CHECK-NEXT: Locals:
108 ; CHECK-NEXT: Body: 1082808080001A0B
109 ; CHECK-NEXT: - Index: 2
110 ; CHECK-NEXT: Locals:
111 ; CHECK-NEXT: Body: 41010B
112 ; CHECK-NEXT: - Index: 3
113 ; CHECK-NEXT: Locals:
114 ; CHECK-NEXT: Body: 4181808080000B
115 ; CHECK-NEXT: - Index: 4
116 ; CHECK-NEXT: Locals:
117 ; CHECK-NEXT: Body: 41020B
118 ; CHECK-NEXT: - Index: 5
119 ; CHECK-NEXT: Locals:
120 ; CHECK-NEXT: Body: 4181808080000B
121 ; CHECK-NEXT: - Type: DATA
122 ; CHECK-NEXT: Segments:
123 ; CHECK-NEXT: - SectionOffset: 7
124 ; CHECK-NEXT: MemoryIndex: 0
125 ; CHECK-NEXT: Offset:
126 ; CHECK-NEXT: Opcode: I32_CONST
127 ; CHECK-NEXT: Value: 1024
128 ; CHECK-NEXT: Content: '0100000002000000'
129 ; CHECK-NEXT: - Type: CUSTOM
130 ; CHECK-NEXT: Name: name
131 ; CHECK-NEXT: FunctionNames:
132 ; CHECK-NEXT: - Index: 0
133 ; CHECK-NEXT: Name: __wasm_call_ctors
134 ; CHECK-NEXT: - Index: 1
135 ; CHECK-NEXT: Name: _start
136 ; CHECK-NEXT: - Index: 2
137 ; CHECK-NEXT: Name: weakFn
138 ; CHECK-NEXT: - Index: 3
139 ; CHECK-NEXT: Name: exportWeak1
140 ; CHECK-NEXT: - Index: 4
141 ; CHECK-NEXT: Name: weakFn
142 ; CHECK-NEXT: - Index: 5
143 ; CHECK-NEXT: Name: exportWeak2