[WebAssebmly] Allow __wasm_call_ctors to be GC'ed

Differential Revision: https://reviews.llvm.org/D58806

llvm-svn: 355240
This commit is contained in:
Sam Clegg 2019-03-01 22:35:47 +00:00
parent f6ca8cba5c
commit 0e6b42f5eb
29 changed files with 244 additions and 484 deletions

View File

@ -22,7 +22,7 @@ entry:
; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 0 ] ; CHECK-NEXT: FunctionTypes: [ 0 ]
; CHECK-NEXT: - Type: TABLE ; CHECK-NEXT: - Type: TABLE
; CHECK-NEXT: Tables: ; CHECK-NEXT: Tables:
; CHECK-NEXT: - ElemType: FUNCREF ; CHECK-NEXT: - ElemType: FUNCREF
@ -66,23 +66,18 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1 ; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Name: start_alias ; CHECK-NEXT: - Name: start_alias
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1 ; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 0B
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B
; CHECK-NEXT: - Type: CUSTOM ; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -22,16 +22,16 @@ CHECK-NEXT: Kind: GLOBAL
CHECK-NEXT: Index: 2 CHECK-NEXT: Index: 2
CHECK-NEXT: - Name: foo CHECK-NEXT: - Name: foo
CHECK-NEXT: Kind: FUNCTION CHECK-NEXT: Kind: FUNCTION
CHECK-NEXT: Index: 2 CHECK-NEXT: Index: 1
CHECK-NEXT: - Name: bar CHECK-NEXT: - Name: bar
CHECK-NEXT: Kind: FUNCTION CHECK-NEXT: Kind: FUNCTION
CHECK-NEXT: Index: 3 CHECK-NEXT: Index: 2
CHECK-NEXT: - Name: archive2_symbol CHECK-NEXT: - Name: archive2_symbol
CHECK-NEXT: Kind: FUNCTION CHECK-NEXT: Kind: FUNCTION
CHECK-NEXT: Index: 4 CHECK-NEXT: Index: 3
CHECK-NEXT: - Name: _start CHECK-NEXT: - Name: _start
CHECK-NEXT: Kind: FUNCTION CHECK-NEXT: Kind: FUNCTION
CHECK-NEXT: Index: 1 CHECK-NEXT: Index: 0
CHECK-NEXT: - Type: CODE CHECK-NEXT: - Type: CODE
NOEXPORT: Exports: NOEXPORT: Exports:
@ -46,5 +46,5 @@ NOEXPORT-NEXT: Kind: GLOBAL
NOEXPORT-NEXT: Index: 2 NOEXPORT-NEXT: Index: 2
NOEXPORT-NEXT: - Name: _start NOEXPORT-NEXT: - Name: _start
NOEXPORT-NEXT: Kind: FUNCTION NOEXPORT-NEXT: Kind: FUNCTION
NOEXPORT-NEXT: Index: 1 NOEXPORT-NEXT: Index: 0
NOEXPORT-NEXT: - Type: CODE NOEXPORT-NEXT: - Type: CODE

View File

@ -57,7 +57,7 @@ define void @call_ptr(i64 (i64)* %arg) {
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - I32 ; CHECK-NEXT: - I32
; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 3, 0, 3, 1, 3, 4 ] ; CHECK-NEXT: FunctionTypes: [ 0, 3, 1, 3, 4 ]
; CHECK-NEXT: - Type: TABLE ; CHECK-NEXT: - Type: TABLE
; CHECK-NEXT: Tables: ; CHECK-NEXT: Tables:
; CHECK-NEXT: - ElemType: FUNCREF ; CHECK-NEXT: - ElemType: FUNCREF
@ -107,48 +107,45 @@ define void @call_ptr(i64 (i64)* %arg) {
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: bar ; CHECK-NEXT: - Name: bar
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1 ; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Name: call_bar_indirect ; CHECK-NEXT: - Name: call_bar_indirect
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: foo ; CHECK-NEXT: - Name: foo
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 4 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Name: indirect_func ; CHECK-NEXT: - Name: indirect_func
; CHECK-NEXT: Kind: GLOBAL ; CHECK-NEXT: Kind: GLOBAL
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Name: call_ptr ; CHECK-NEXT: - Name: call_ptr
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 5 ; CHECK-NEXT: Index: 4
; CHECK-NEXT: - Type: ELEM ; CHECK-NEXT: - Type: ELEM
; CHECK-NEXT: Segments: ; CHECK-NEXT: Segments:
; CHECK-NEXT: - Offset: ; CHECK-NEXT: - Offset:
; CHECK-NEXT: Opcode: I32_CONST ; CHECK-NEXT: Opcode: I32_CONST
; CHECK-NEXT: Value: 1 ; CHECK-NEXT: Value: 1
; CHECK-NEXT: Functions: [ 1, 3 ] ; CHECK-NEXT: Functions: [ 0, 2 ]
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 42010B ; CHECK-NEXT: Body: 42010B
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: - Type: I32 ; CHECK-NEXT: - Type: I32
; CHECK-NEXT: Count: 1 ; CHECK-NEXT: Count: 1
; CHECK-NEXT: Body: 4100280284888080002100410028028088808000118080808000001A2000118180808000001A0B ; CHECK-NEXT: Body: 4100280284888080002100410028028088808000118080808000001A2000118180808000001A0B
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41020B ; CHECK-NEXT: Body: 41020B
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 410028028888808000118180808000001A0B ; CHECK-NEXT: Body: 410028028888808000118180808000001A0B
; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 42012000118280808000001A0B ; CHECK-NEXT: Body: 42012000118280808000001A0B
; CHECK-NEXT: - Type: DATA ; CHECK-NEXT: - Type: DATA
@ -163,15 +160,13 @@ define void @call_ptr(i64 (i64)* %arg) {
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: bar ; CHECK-NEXT: Name: bar
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: call_bar_indirect ; CHECK-NEXT: Name: call_bar_indirect
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: foo ; CHECK-NEXT: Name: foo
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Name: call_ptr ; CHECK-NEXT: Name: call_ptr
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -53,40 +53,37 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1 ; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Name: inlineFn ; CHECK-NEXT: - Name: inlineFn
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: constantData ; CHECK-NEXT: - Name: constantData
; CHECK-NEXT: Kind: GLOBAL ; CHECK-NEXT: Kind: GLOBAL
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Name: callInline1 ; CHECK-NEXT: - Name: callInline1
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: callInline2 ; CHECK-NEXT: - Name: callInline2
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 4 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Type: ELEM ; CHECK-NEXT: - Type: ELEM
; CHECK-NEXT: Segments: ; CHECK-NEXT: Segments:
; CHECK-NEXT: - Offset: ; CHECK-NEXT: - Offset:
; CHECK-NEXT: Opcode: I32_CONST ; CHECK-NEXT: Opcode: I32_CONST
; CHECK-NEXT: Value: 1 ; CHECK-NEXT: Value: 1
; CHECK-NEXT: Functions: [ 2 ] ; CHECK-NEXT: Functions: [ 1 ]
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 1081808080001A0B
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 1082808080001A0B ; CHECK-NEXT: Body: 4180888080000B
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4180888080000B
; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4181808080000B ; CHECK-NEXT: Body: 4181808080000B
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4181808080000B ; CHECK-NEXT: Body: 4181808080000B
; CHECK-NEXT: - Type: DATA ; CHECK-NEXT: - Type: DATA

View File

@ -34,35 +34,30 @@ define void @_start() {
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: _Z3fooi ; CHECK-NEXT: - Name: _Z3fooi
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 000B
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 000B ; CHECK-NEXT: Body: 0B
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 410110818080800041011080808080000B
; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 410110828080800041011081808080000B
; CHECK-NEXT: - Type: CUSTOM ; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; DEMANGLE-NEXT: Name: 'undefined:bar(int)' ; DEMANGLE-NEXT: Name: 'undefined:bar(int)'
; MANGLE-NEXT: Name: 'undefined:_Z3bari' ; MANGLE-NEXT: Name: 'undefined:_Z3bari'
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; DEMANGLE-NEXT: Name: 'foo(int)' ; DEMANGLE-NEXT: Name: 'foo(int)'
; MANGLE-NEXT: Name: _Z3fooi ; MANGLE-NEXT: Name: _Z3fooi
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -25,7 +25,7 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: entry ; CHECK-NEXT: - Name: entry
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1 ; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Type: ; CHECK-NEXT: - Type:
; The __wasm_call_ctors is somewhat special since its created by the linker. ; The __wasm_call_ctors is somewhat special since its created by the linker.

View File

@ -48,11 +48,11 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: hidden_function ; CHECK-NEXT: - Name: hidden_function
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1 ; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Name: used_function ; CHECK-NEXT: - Name: used_function
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE

View File

@ -24,25 +24,20 @@ declare i32 @ret32(float) local_unnamed_addr #1
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - F32 ; CHECK-NEXT: - F32
; CHECK: - Type: FUNCTION ; CHECK: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 0, 1 ] ; CHECK-NEXT: FunctionTypes: [ 0, 1 ]
; CHECK: - Type: CODE ; CHECK: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 43000000001081808080001A0B
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 43000000001082808080001A0B
; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41000B ; CHECK-NEXT: Body: 41000B
; CHECK-NEXT: - Type: CUSTOM ; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: ret32 ; CHECK-NEXT: Name: ret32
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -18,25 +18,22 @@ declare i32 @ret32(float) local_unnamed_addr #1
; CHECK: - Type: TYPE ; CHECK: - Type: TYPE
; CHECK-NEXT: Signatures: ; CHECK-NEXT: Signatures:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ReturnType: I32
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - F32 ; CHECK-NEXT: - F32
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 1, 0 ] ; CHECK-NEXT: FunctionTypes: [ 0, 1 ]
; CHECK: - Type: CODE ; CHECK: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK: - Index: 0 ; CHECK: - Index: 0
; CHECK: - Index: 1 ; CHECK: - Index: 1
; CHECK: - Index: 2
; CHECK: Name: name ; CHECK: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: ret32 ; CHECK-NEXT: Name: ret32
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -43,10 +43,8 @@ entry:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: used_undef_function ; CHECK-NEXT: Name: used_undef_function
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: use_undef_global ; CHECK-NEXT: Name: use_undef_global
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -38,10 +38,10 @@ entry:
; CHECK: - Type: TYPE ; CHECK: - Type: TYPE
; CHECK-NEXT: Signatures: ; CHECK-NEXT: Signatures:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ReturnType: I32
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: ReturnType: I64 ; CHECK-NEXT: ReturnType: I64
@ -75,12 +75,10 @@ entry:
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: used_function ; CHECK-NEXT: Name: used_function
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: use_global ; CHECK-NEXT: Name: use_global
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -25,6 +25,7 @@ entry:
declare hidden void @externCtor() declare hidden void @externCtor()
declare hidden void @externDtor() declare hidden void @externDtor()
declare hidden void @__wasm_call_ctors()
define i32 @__cxa_atexit(i32 %func, i32 %arg, i32 %dso_handle) { define i32 @__cxa_atexit(i32 %func, i32 %arg, i32 %dso_handle) {
ret i32 0 ret i32 0
@ -32,6 +33,7 @@ define i32 @__cxa_atexit(i32 %func, i32 %arg, i32 %dso_handle) {
define hidden void @_start() { define hidden void @_start() {
entry: entry:
call void @__wasm_call_ctors();
ret void ret void
} }
@ -127,202 +129,22 @@ entry:
; CHECK-NEXT: Name: .Lregister_call_dtors.2002 ; CHECK-NEXT: Name: .Lregister_call_dtors.2002
; CHECK-NEXT: ... ; CHECK-NEXT: ...
; RUN: wasm-ld -r %t.o %t.global-ctor-dtor.o -o %t.reloc.wasm ; RUN: wasm-ld -r %t.o %t.global-ctor-dtor.o -o %t.reloc.wasm
; RUN: obj2yaml %t.reloc.wasm | FileCheck -check-prefix=RELOC %s ; RUN: llvm-readobj --symbols --sections %t.reloc.wasm | FileCheck -check-prefix=RELOC %s
; RELOC: SymbolTable: ; RELOC: Name: linking
; RELOC-NEXT: - Index: 0 ; RELOC-NEXT: InitFunctions [
; RELOC-NEXT: Kind: FUNCTION ; RELOC-NEXT: 0 (priority=101)
; RELOC-NEXT: Name: func1 ; RELOC-NEXT: 1 (priority=101)
; RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ] ; RELOC-NEXT: 14 (priority=101)
; RELOC-NEXT: Function: 2 ; RELOC-NEXT: 10 (priority=101)
; RELOC-NEXT: - Index: 1 ; RELOC-NEXT: 20 (priority=101)
; RELOC-NEXT: Kind: FUNCTION ; RELOC-NEXT: 10 (priority=202)
; RELOC-NEXT: Name: func2 ; RELOC-NEXT: 22 (priority=202)
; RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ] ; RELOC-NEXT: 0 (priority=1001)
; RELOC-NEXT: Function: 3 ; RELOC-NEXT: 16 (priority=1001)
; RELOC-NEXT: - Index: 2 ; RELOC-NEXT: 10 (priority=2002)
; RELOC-NEXT: Kind: FUNCTION ; RELOC-NEXT: 24 (priority=2002)
; RELOC-NEXT: Name: func3 ; RELOC-NEXT: 9 (priority=4000)
; RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ] ; RELOC-NEXT: 18 (priority=4000)
; RELOC-NEXT: Function: 4 ; RELOC-NEXT: ]
; RELOC-NEXT: - Index: 3
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: func4
; RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ]
; RELOC-NEXT: Function: 5
; RELOC-NEXT: - Index: 4
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: __cxa_atexit
; RELOC-NEXT: Flags: [ ]
; RELOC-NEXT: Function: 6
; RELOC-NEXT: - Index: 5
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: _start
; RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ]
; RELOC-NEXT: Function: 7
; RELOC-NEXT: - Index: 6
; RELOC-NEXT: Kind: DATA
; RELOC-NEXT: Name: __dso_handle
; RELOC-NEXT: Flags: [ BINDING_WEAK, VISIBILITY_HIDDEN, UNDEFINED ]
; RELOC-NEXT: - Index: 7
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: externDtor
; RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN, UNDEFINED ]
; RELOC-NEXT: Function: 0
; RELOC-NEXT: - Index: 8
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: externCtor
; RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN, UNDEFINED ]
; RELOC-NEXT: Function: 1
; RELOC-NEXT: - Index: 9
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: myctor
; RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ]
; RELOC-NEXT: Function: 14
; RELOC-NEXT: - Index: 10
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: mydtor
; RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ]
; RELOC-NEXT: Function: 15
; RELOC-NEXT: - Index: 11
; RELOC-NEXT: Kind: GLOBAL
; RELOC-NEXT: Name: __stack_pointer
; RELOC-NEXT: Flags: [ UNDEFINED ]
; RELOC-NEXT: Global: 0
; RELOC-NEXT: - Index: 12
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lcall_dtors.101
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 8
; RELOC-NEXT: - Index: 13
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lregister_call_dtors.101
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 9
; RELOC-NEXT: - Index: 14
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lcall_dtors.1001
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 10
; RELOC-NEXT: - Index: 15
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lregister_call_dtors.1001
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 11
; RELOC-NEXT: - Index: 16
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lcall_dtors.4000
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 12
; RELOC-NEXT: - Index: 17
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lregister_call_dtors.4000
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 13
; RELOC-NEXT: - Index: 18
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lcall_dtors.101
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 16
; RELOC-NEXT: - Index: 19
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lregister_call_dtors.101
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 17
; RELOC-NEXT: - Index: 20
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lcall_dtors.202
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 18
; RELOC-NEXT: - Index: 21
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lregister_call_dtors.202
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 19
; RELOC-NEXT: - Index: 22
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lcall_dtors.2002
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 20
; RELOC-NEXT: - Index: 23
; RELOC-NEXT: Kind: FUNCTION
; RELOC-NEXT: Name: .Lregister_call_dtors.2002
; RELOC-NEXT: Flags: [ BINDING_LOCAL ]
; RELOC-NEXT: Function: 21
; RELOC-NEXT: InitFunctions:
; RELOC-NEXT: - Priority: 101
; RELOC-NEXT: Symbol: 0
; RELOC-NEXT: - Priority: 101
; RELOC-NEXT: Symbol: 1
; RELOC-NEXT: - Priority: 101
; RELOC-NEXT: Symbol: 13
; RELOC-NEXT: - Priority: 101
; RELOC-NEXT: Symbol: 9
; RELOC-NEXT: - Priority: 101
; RELOC-NEXT: Symbol: 19
; RELOC-NEXT: - Priority: 202
; RELOC-NEXT: Symbol: 9
; RELOC-NEXT: - Priority: 202
; RELOC-NEXT: Symbol: 21
; RELOC-NEXT: - Priority: 1001
; RELOC-NEXT: Symbol: 0
; RELOC-NEXT: - Priority: 1001
; RELOC-NEXT: Symbol: 15
; RELOC-NEXT: - Priority: 2002
; RELOC-NEXT: Symbol: 9
; RELOC-NEXT: - Priority: 2002
; RELOC-NEXT: Symbol: 23
; RELOC-NEXT: - Priority: 4000
; RELOC-NEXT: Symbol: 8
; RELOC-NEXT: - Priority: 4000
; RELOC-NEXT: Symbol: 17
; RELOC-NEXT: - Type: CUSTOM
; RELOC-NEXT: Name: name
; RELOC-NEXT: FunctionNames:
; RELOC-NEXT: - Index: 0
; RELOC-NEXT: Name: externDtor
; RELOC-NEXT: - Index: 1
; RELOC-NEXT: Name: externCtor
; RELOC-NEXT: - Index: 2
; RELOC-NEXT: Name: func1
; RELOC-NEXT: - Index: 3
; RELOC-NEXT: Name: func2
; RELOC-NEXT: - Index: 4
; RELOC-NEXT: Name: func3
; RELOC-NEXT: - Index: 5
; RELOC-NEXT: Name: func4
; RELOC-NEXT: - Index: 6
; RELOC-NEXT: Name: __cxa_atexit
; RELOC-NEXT: - Index: 7
; RELOC-NEXT: Name: _start
; RELOC-NEXT: - Index: 8
; RELOC-NEXT: Name: .Lcall_dtors.101
; RELOC-NEXT: - Index: 9
; RELOC-NEXT: Name: .Lregister_call_dtors.101
; RELOC-NEXT: - Index: 10
; RELOC-NEXT: Name: .Lcall_dtors.1001
; RELOC-NEXT: - Index: 11
; RELOC-NEXT: Name: .Lregister_call_dtors.1001
; RELOC-NEXT: - Index: 12
; RELOC-NEXT: Name: .Lcall_dtors.4000
; RELOC-NEXT: - Index: 13
; RELOC-NEXT: Name: .Lregister_call_dtors.4000
; RELOC-NEXT: - Index: 14
; RELOC-NEXT: Name: myctor
; RELOC-NEXT: - Index: 15
; RELOC-NEXT: Name: mydtor
; RELOC-NEXT: - Index: 16
; RELOC-NEXT: Name: .Lcall_dtors.101
; RELOC-NEXT: - Index: 17
; RELOC-NEXT: Name: .Lregister_call_dtors.101
; RELOC-NEXT: - Index: 18
; RELOC-NEXT: Name: .Lcall_dtors.202
; RELOC-NEXT: - Index: 19
; RELOC-NEXT: Name: .Lregister_call_dtors.202
; RELOC-NEXT: - Index: 20
; RELOC-NEXT: Name: .Lcall_dtors.2002
; RELOC-NEXT: - Index: 21
; RELOC-NEXT: Name: .Lregister_call_dtors.2002
; RELOC-NEXT: ...

View File

@ -27,13 +27,13 @@ entry:
; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: - Type: TYPE
; CHECK-NEXT: Signatures: ; CHECK-NEXT: Signatures:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ReturnType: I32
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 1, 0 ] ; CHECK-NEXT: FunctionTypes: [ 0, 1 ]
; CHECK-NEXT: - Type: TABLE ; CHECK-NEXT: - Type: TABLE
; CHECK-NEXT: Tables: ; CHECK-NEXT: Tables:
; CHECK-NEXT: - ElemType: FUNCREF ; CHECK-NEXT: - ElemType: FUNCREF
@ -83,7 +83,7 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: foo ; CHECK-NEXT: - Name: foo
; CHECK-NEXT: Kind: GLOBAL ; CHECK-NEXT: Kind: GLOBAL
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 3
@ -91,13 +91,10 @@ entry:
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 4100280284888080000B
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4100280284888080000B ; CHECK-NEXT: Body: 1080808080001A0B
; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 1081808080001A0B
; CHECK-NEXT: - Type: DATA ; CHECK-NEXT: - Type: DATA
; CHECK-NEXT: Segments: ; CHECK-NEXT: Segments:
; CHECK-NEXT: - SectionOffset: 7 ; CHECK-NEXT: - SectionOffset: 7
@ -110,9 +107,7 @@ entry:
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: baz ; CHECK-NEXT: Name: baz
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -10,14 +10,11 @@
; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: - Type: TYPE
; CHECK-NEXT: Signatures: ; CHECK-NEXT: Signatures:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ReturnType: I32
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ; CHECK-NEXT: FunctionTypes: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
; CHECK-NEXT: 1, 1, 1 ] ; CHECK-NEXT: 0, 0 ]
; CHECK-NEXT: - Type: TABLE ; CHECK-NEXT: - Type: TABLE
; CHECK-NEXT: Tables: ; CHECK-NEXT: Tables:
; CHECK-NEXT: - ElemType: FUNCREF ; CHECK-NEXT: - ElemType: FUNCREF
@ -73,63 +70,63 @@
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: colliding_func2 ; CHECK-NEXT: - Name: colliding_func2
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: get_global1A ; CHECK-NEXT: - Name: get_global1A
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 4 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Name: get_global2A ; CHECK-NEXT: - Name: get_global2A
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 5 ; CHECK-NEXT: Index: 4
; CHECK-NEXT: - Name: colliding_global2 ; CHECK-NEXT: - Name: colliding_global2
; CHECK-NEXT: Kind: GLOBAL ; CHECK-NEXT: Kind: GLOBAL
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Name: get_global3A ; CHECK-NEXT: - Name: get_global3A
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 6 ; CHECK-NEXT: Index: 5
; CHECK-NEXT: - Name: get_func1A ; CHECK-NEXT: - Name: get_func1A
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 7 ; CHECK-NEXT: Index: 6
; CHECK-NEXT: - Name: get_func2A ; CHECK-NEXT: - Name: get_func2A
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 8 ; CHECK-NEXT: Index: 7
; CHECK-NEXT: - Name: get_func3A ; CHECK-NEXT: - Name: get_func3A
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 9 ; CHECK-NEXT: Index: 8
; CHECK-NEXT: - Name: colliding_func1 ; CHECK-NEXT: - Name: colliding_func1
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 10 ; CHECK-NEXT: Index: 9
; CHECK-NEXT: - Name: get_global1B ; CHECK-NEXT: - Name: get_global1B
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 13 ; CHECK-NEXT: Index: 12
; CHECK-NEXT: - Name: colliding_global1 ; CHECK-NEXT: - Name: colliding_global1
; CHECK-NEXT: Kind: GLOBAL ; CHECK-NEXT: Kind: GLOBAL
; CHECK-NEXT: Index: 4 ; CHECK-NEXT: Index: 4
; CHECK-NEXT: - Name: get_global2B ; CHECK-NEXT: - Name: get_global2B
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 14 ; CHECK-NEXT: Index: 13
; CHECK-NEXT: - Name: get_global3B ; CHECK-NEXT: - Name: get_global3B
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 15 ; CHECK-NEXT: Index: 14
; CHECK-NEXT: - Name: get_func1B ; CHECK-NEXT: - Name: get_func1B
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 16 ; CHECK-NEXT: Index: 15
; CHECK-NEXT: - Name: get_func2B ; CHECK-NEXT: - Name: get_func2B
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 17 ; CHECK-NEXT: Index: 16
; CHECK-NEXT: - Name: get_func3B ; CHECK-NEXT: - Name: get_func3B
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 18 ; CHECK-NEXT: Index: 17
; CHECK-NEXT: - Type: ELEM ; CHECK-NEXT: - Type: ELEM
; CHECK-NEXT: Segments: ; CHECK-NEXT: Segments:
; CHECK-NEXT: - Offset: ; CHECK-NEXT: - Offset:
; CHECK-NEXT: Opcode: I32_CONST ; CHECK-NEXT: Opcode: I32_CONST
; CHECK-NEXT: Value: 1 ; CHECK-NEXT: Value: 1
; CHECK-NEXT: Functions: [ 1, 2, 3, 10, 11, 12 ] ; CHECK-NEXT: Functions: [ 0, 1, 2, 9, 10, 11 ]
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 41020B
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41020B ; CHECK-NEXT: Body: 41020B
@ -138,25 +135,25 @@
; CHECK-NEXT: Body: 41020B ; CHECK-NEXT: Body: 41020B
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41020B ; CHECK-NEXT: Body: 4180888080000B
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4180888080000B ; CHECK-NEXT: Body: 4184888080000B
; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: - Index: 5
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4184888080000B ; CHECK-NEXT: Body: 4188888080000B
; CHECK-NEXT: - Index: 6 ; CHECK-NEXT: - Index: 6
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4188888080000B ; CHECK-NEXT: Body: 4181808080000B
; CHECK-NEXT: - Index: 7 ; CHECK-NEXT: - Index: 7
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4181808080000B ; CHECK-NEXT: Body: 4182808080000B
; CHECK-NEXT: - Index: 8 ; CHECK-NEXT: - Index: 8
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4182808080000B ; CHECK-NEXT: Body: 4183808080000B
; CHECK-NEXT: - Index: 9 ; CHECK-NEXT: - Index: 9
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4183808080000B ; CHECK-NEXT: Body: 41020B
; CHECK-NEXT: - Index: 10 ; CHECK-NEXT: - Index: 10
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41020B ; CHECK-NEXT: Body: 41020B
@ -165,23 +162,20 @@
; CHECK-NEXT: Body: 41020B ; CHECK-NEXT: Body: 41020B
; CHECK-NEXT: - Index: 12 ; CHECK-NEXT: - Index: 12
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41020B ; CHECK-NEXT: Body: 418C888080000B
; CHECK-NEXT: - Index: 13 ; CHECK-NEXT: - Index: 13
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 418C888080000B ; CHECK-NEXT: Body: 4190888080000B
; CHECK-NEXT: - Index: 14 ; CHECK-NEXT: - Index: 14
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4190888080000B ; CHECK-NEXT: Body: 4194888080000B
; CHECK-NEXT: - Index: 15 ; CHECK-NEXT: - Index: 15
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4194888080000B ; CHECK-NEXT: Body: 4184808080000B
; CHECK-NEXT: - Index: 16 ; CHECK-NEXT: - Index: 16
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4184808080000B
; CHECK-NEXT: - Index: 17
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4185808080000B ; CHECK-NEXT: Body: 4185808080000B
; CHECK-NEXT: - Index: 18 ; CHECK-NEXT: - Index: 17
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4186808080000B ; CHECK-NEXT: Body: 4186808080000B
; CHECK-NEXT: - Type: DATA ; CHECK-NEXT: - Type: DATA
@ -196,42 +190,40 @@
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors ; CHECK-NEXT: Name: colliding_func1
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: colliding_func1 ; CHECK-NEXT: Name: colliding_func2
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: colliding_func2 ; CHECK-NEXT: Name: colliding_func3
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: colliding_func3
; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Name: get_global1A ; CHECK-NEXT: Name: get_global1A
; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Name: get_global2A ; CHECK-NEXT: Name: get_global2A
; CHECK-NEXT: - Index: 6 ; CHECK-NEXT: - Index: 5
; CHECK-NEXT: Name: get_global3A ; CHECK-NEXT: Name: get_global3A
; CHECK-NEXT: - Index: 7 ; CHECK-NEXT: - Index: 6
; CHECK-NEXT: Name: get_func1A ; CHECK-NEXT: Name: get_func1A
; CHECK-NEXT: - Index: 8 ; CHECK-NEXT: - Index: 7
; CHECK-NEXT: Name: get_func2A ; CHECK-NEXT: Name: get_func2A
; CHECK-NEXT: - Index: 9 ; CHECK-NEXT: - Index: 8
; CHECK-NEXT: Name: get_func3A ; CHECK-NEXT: Name: get_func3A
; CHECK-NEXT: - Index: 10 ; CHECK-NEXT: - Index: 9
; CHECK-NEXT: Name: colliding_func1 ; CHECK-NEXT: Name: colliding_func1
; CHECK-NEXT: - Index: 11 ; CHECK-NEXT: - Index: 10
; CHECK-NEXT: Name: colliding_func2 ; CHECK-NEXT: Name: colliding_func2
; CHECK-NEXT: - Index: 12 ; CHECK-NEXT: - Index: 11
; CHECK-NEXT: Name: colliding_func3 ; CHECK-NEXT: Name: colliding_func3
; CHECK-NEXT: - Index: 13 ; CHECK-NEXT: - Index: 12
; CHECK-NEXT: Name: get_global1B ; CHECK-NEXT: Name: get_global1B
; CHECK-NEXT: - Index: 14 ; CHECK-NEXT: - Index: 13
; CHECK-NEXT: Name: get_global2B ; CHECK-NEXT: Name: get_global2B
; CHECK-NEXT: - Index: 15 ; CHECK-NEXT: - Index: 14
; CHECK-NEXT: Name: get_global3B ; CHECK-NEXT: Name: get_global3B
; CHECK-NEXT: - Index: 16 ; CHECK-NEXT: - Index: 15
; CHECK-NEXT: Name: get_func1B ; CHECK-NEXT: Name: get_func1B
; CHECK-NEXT: - Index: 17 ; CHECK-NEXT: - Index: 16
; CHECK-NEXT: Name: get_func2B ; CHECK-NEXT: Name: get_func2B
; CHECK-NEXT: - Index: 18 ; CHECK-NEXT: - Index: 17
; CHECK-NEXT: Name: get_func3B ; CHECK-NEXT: Name: get_func3B
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -18,8 +18,6 @@ declare void @f()
; CHECK: Name: name ; CHECK: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: f ; CHECK-NEXT: Name: f

View File

@ -31,8 +31,8 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: hidden_function ; CHECK-NEXT: - Name: hidden_function
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1 ; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE

View File

@ -6,8 +6,6 @@
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"

View File

@ -38,8 +38,6 @@ return:
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: bar ; CHECK-NEXT: Name: bar

View File

@ -68,7 +68,7 @@ declare void @func_external()
; CHECK-NEXT: - Offset: ; CHECK-NEXT: - Offset:
; CHECK-NEXT: Opcode: GLOBAL_GET ; CHECK-NEXT: Opcode: GLOBAL_GET
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: Functions: [ 2, 0 ] ; CHECK-NEXT: Functions: [ 1, 0 ]
; check the data segment initialized with __memory_base global as offset ; check the data segment initialized with __memory_base global as offset

View File

@ -16,17 +16,15 @@ entry:
; CHECK: - Type: EXPORT ; CHECK: - Type: EXPORT
; CHECK: - Name: ret32 ; CHECK: - Name: ret32
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 2
; CHECK: - Type: CUSTOM ; CHECK: - Type: CUSTOM
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: 'unreachable:ret32' ; CHECK-NEXT: Name: 'unreachable:ret32'
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: ret32 ; CHECK-NEXT: Name: ret32
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -31,23 +31,21 @@ declare i32 @ret32(i32, i64, i32) local_unnamed_addr
; YAML: - Type: EXPORT ; YAML: - Type: EXPORT
; YAML: - Name: ret32 ; YAML: - Name: ret32
; YAML-NEXT: Kind: FUNCTION ; YAML-NEXT: Kind: FUNCTION
; YAML-NEXT: Index: 3 ; YAML-NEXT: Index: 2
; YAML-NEXT: - Name: call_ret32 ; YAML-NEXT: - Name: call_ret32
; YAML-NEXT: Kind: FUNCTION ; YAML-NEXT: Kind: FUNCTION
; YAML-NEXT: Index: 4 ; YAML-NEXT: Index: 3
; YAML: - Type: CUSTOM ; YAML: - Type: CUSTOM
; YAML-NEXT: Name: name ; YAML-NEXT: Name: name
; YAML-NEXT: FunctionNames: ; YAML-NEXT: FunctionNames:
; YAML-NEXT: - Index: 0 ; YAML-NEXT: - Index: 0
; YAML-NEXT: Name: __wasm_call_ctors
; YAML-NEXT: - Index: 1
; YAML-NEXT: Name: 'unreachable:ret32' ; YAML-NEXT: Name: 'unreachable:ret32'
; YAML-NEXT: - Index: 2 ; YAML-NEXT: - Index: 1
; YAML-NEXT: Name: _start ; YAML-NEXT: Name: _start
; YAML-NEXT: - Index: 3 ; YAML-NEXT: - Index: 2
; YAML-NEXT: Name: ret32 ; YAML-NEXT: Name: ret32
; YAML-NEXT: - Index: 4 ; YAML-NEXT: - Index: 3
; YAML-NEXT: Name: call_ret32 ; YAML-NEXT: Name: call_ret32
; YAML-NEXT: ... ; YAML-NEXT: ...

View File

@ -42,7 +42,7 @@ define i32 @callWeakFuncs() {
; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ReturnType: I32
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 0, 0, 1, 2 ] ; CHECK-NEXT: FunctionTypes: [ 0, 0, 1, 2 ]
; CHECK-NEXT: - Type: TABLE ; CHECK-NEXT: - Type: TABLE
; CHECK-NEXT: Tables: ; CHECK-NEXT: Tables:
; CHECK-NEXT: - ElemType: FUNCREF ; CHECK-NEXT: - ElemType: FUNCREF
@ -86,12 +86,12 @@ define i32 @callWeakFuncs() {
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: callWeakFuncs ; CHECK-NEXT: - Name: callWeakFuncs
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 4 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 000B
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 000B ; CHECK-NEXT: Body: 000B
@ -100,21 +100,16 @@ define i32 @callWeakFuncs() {
; CHECK-NEXT: Body: 000B ; CHECK-NEXT: Body: 000B
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 000B ; CHECK-NEXT: Body: 10808080800010818080800041021082808080004180808080004180808080006A0B
; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 10818080800010828080800041021083808080004180808080004180808080006A0B
; CHECK-NEXT: - Type: CUSTOM ; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: 'undefined:weakFunc1' ; CHECK-NEXT: Name: 'undefined:weakFunc1'
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: 'undefined:weakFunc2' ; CHECK-NEXT: Name: 'undefined:weakFunc2'
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: 'undefined:weakFunc3' ; CHECK-NEXT: Name: 'undefined:weakFunc3'
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: callWeakFuncs ; CHECK-NEXT: Name: callWeakFuncs
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -51,13 +51,13 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: objectDefault ; CHECK-NEXT: - Name: objectDefault
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: archiveDefault ; CHECK-NEXT: - Name: archiveDefault
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 5 ; CHECK-NEXT: Index: 4
; CHECK-NEXT: - Type: ; CHECK-NEXT: - Type:
@ -74,5 +74,5 @@ entry:
; NO-DEFAULT-NEXT: Index: 2 ; NO-DEFAULT-NEXT: Index: 2
; NO-DEFAULT-NEXT: - Name: _start ; NO-DEFAULT-NEXT: - Name: _start
; NO-DEFAULT-NEXT: Kind: FUNCTION ; NO-DEFAULT-NEXT: Kind: FUNCTION
; NO-DEFAULT-NEXT: Index: 3 ; NO-DEFAULT-NEXT: Index: 2
; NO-DEFAULT-NEXT: - Type: ; NO-DEFAULT-NEXT: - Type:

View File

@ -26,13 +26,13 @@ entry:
; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: - Type: TYPE
; CHECK-NEXT: Signatures: ; CHECK-NEXT: Signatures:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ReturnType: I32
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 1, 0, 1, 1, 1, 1, 1 ] ; CHECK-NEXT: FunctionTypes: [ 0, 1, 0, 0, 0, 0, 0 ]
; CHECK-NEXT: - Type: TABLE ; CHECK-NEXT: - Type: TABLE
; CHECK-NEXT: Tables: ; CHECK-NEXT: Tables:
; CHECK-NEXT: - ElemType: FUNCREF ; CHECK-NEXT: - ElemType: FUNCREF
@ -76,78 +76,73 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: alias_fn ; CHECK-NEXT: - Name: alias_fn
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1 ; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: direct_fn ; CHECK-NEXT: - Name: direct_fn
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: call_direct ; CHECK-NEXT: - Name: call_direct
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 4 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Name: call_alias ; CHECK-NEXT: - Name: call_alias
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 5 ; CHECK-NEXT: Index: 4
; CHECK-NEXT: - Name: call_alias_ptr ; CHECK-NEXT: - Name: call_alias_ptr
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 6 ; CHECK-NEXT: Index: 5
; CHECK-NEXT: - Name: call_direct_ptr ; CHECK-NEXT: - Name: call_direct_ptr
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 7 ; CHECK-NEXT: Index: 6
; CHECK-NEXT: - Type: ELEM ; CHECK-NEXT: - Type: ELEM
; CHECK-NEXT: Segments: ; CHECK-NEXT: Segments:
; CHECK-NEXT: - Offset: ; CHECK-NEXT: - Offset:
; CHECK-NEXT: Opcode: I32_CONST ; CHECK-NEXT: Opcode: I32_CONST
; CHECK-NEXT: Value: 1 ; CHECK-NEXT: Value: 1
; CHECK-NEXT: Functions: [ 1, 3 ] ; CHECK-NEXT: Functions: [ 0, 2 ]
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 41010B
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41010B ; CHECK-NEXT: Body: 1080808080001A0B
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 1081808080001A0B ; CHECK-NEXT: Body: 41000B
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41000B ; CHECK-NEXT: Body: 1082808080000B
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 1083808080000B ; CHECK-NEXT: Body: 1080808080000B
; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: - Index: 5
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 1081808080000B ; CHECK-NEXT: - Type: I32
; CHECK-NEXT: Count: 2
; CHECK-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081080808080002101200041106A24808080800020010B
; CHECK-NEXT: - Index: 6 ; CHECK-NEXT: - Index: 6
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: - Type: I32 ; CHECK-NEXT: - Type: I32
; CHECK-NEXT: Count: 2 ; CHECK-NEXT: Count: 2
; CHECK-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B ; CHECK-NEXT: Body: 23808080800041106B220024808080800020004182808080003602081082808080002101200041106A24808080800020010B
; CHECK-NEXT: - Index: 7
; CHECK-NEXT: Locals:
; CHECK-NEXT: - Type: I32
; CHECK-NEXT: Count: 2
; CHECK-NEXT: Body: 23808080800041106B220024808080800020004182808080003602081083808080002101200041106A24808080800020010B
; CHECK-NEXT: - Type: CUSTOM ; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: alias_fn ; CHECK-NEXT: Name: alias_fn
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: direct_fn ; CHECK-NEXT: Name: direct_fn
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: call_direct ; CHECK-NEXT: Name: call_direct
; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Name: call_alias ; CHECK-NEXT: Name: call_alias
; CHECK-NEXT: - Index: 6 ; CHECK-NEXT: - Index: 5
; CHECK-NEXT: Name: call_alias_ptr ; CHECK-NEXT: Name: call_alias_ptr
; CHECK-NEXT: - Index: 7 ; CHECK-NEXT: - Index: 6
; CHECK-NEXT: Name: call_direct_ptr ; CHECK-NEXT: Name: call_direct_ptr
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -29,7 +29,7 @@ entry:
; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ReturnType: I32
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 0, 1, 1, 1, 1, 1 ] ; CHECK-NEXT: FunctionTypes: [ 0, 1, 1, 1, 1, 1 ]
; CHECK-NEXT: - Type: TABLE ; CHECK-NEXT: - Type: TABLE
; CHECK-NEXT: Tables: ; CHECK-NEXT: Tables:
; CHECK-NEXT: - ElemType: FUNCREF ; CHECK-NEXT: - ElemType: FUNCREF
@ -73,74 +73,69 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1 ; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Name: alias_fn ; CHECK-NEXT: - Name: alias_fn
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: direct_fn ; CHECK-NEXT: - Name: direct_fn
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: call_direct ; CHECK-NEXT: - Name: call_direct
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: call_alias ; CHECK-NEXT: - Name: call_alias
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 4 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Name: call_alias_ptr ; CHECK-NEXT: - Name: call_alias_ptr
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 5 ; CHECK-NEXT: Index: 4
; CHECK-NEXT: - Name: call_direct_ptr ; CHECK-NEXT: - Name: call_direct_ptr
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 6 ; CHECK-NEXT: Index: 5
; CHECK-NEXT: - Type: ELEM ; CHECK-NEXT: - Type: ELEM
; CHECK-NEXT: Segments: ; CHECK-NEXT: Segments:
; CHECK-NEXT: - Offset: ; CHECK-NEXT: - Offset:
; CHECK-NEXT: Opcode: I32_CONST ; CHECK-NEXT: Opcode: I32_CONST
; CHECK-NEXT: Value: 1 ; CHECK-NEXT: Value: 1
; CHECK-NEXT: Functions: [ 2 ] ; CHECK-NEXT: Functions: [ 1 ]
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 1081808080001A0B
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 1082808080001A0B ; CHECK-NEXT: Body: 41000B
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41000B ; CHECK-NEXT: Body: 1081808080000B
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 1082808080000B ; CHECK-NEXT: Body: 1081808080000B
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 1082808080000B ; CHECK-NEXT: - Type: I32
; CHECK-NEXT: Count: 2
; CHECK-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B
; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: - Index: 5
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: - Type: I32 ; CHECK-NEXT: - Type: I32
; CHECK-NEXT: Count: 2 ; CHECK-NEXT: Count: 2
; CHECK-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081082808080002101200041106A24808080800020010B ; CHECK-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B
; CHECK-NEXT: - Index: 6
; CHECK-NEXT: Locals:
; CHECK-NEXT: - Type: I32
; CHECK-NEXT: Count: 2
; CHECK-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081082808080002101200041106A24808080800020010B
; CHECK-NEXT: - Type: CUSTOM ; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: direct_fn ; CHECK-NEXT: Name: direct_fn
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: call_direct ; CHECK-NEXT: Name: call_direct
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: call_alias ; CHECK-NEXT: Name: call_alias
; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Name: call_alias_ptr ; CHECK-NEXT: Name: call_alias_ptr
; CHECK-NEXT: - Index: 6 ; CHECK-NEXT: - Index: 5
; CHECK-NEXT: Name: call_direct_ptr ; CHECK-NEXT: Name: call_direct_ptr
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -29,7 +29,7 @@ entry:
; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ReturnType: I32
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 0, 1, 1, 1 ] ; CHECK-NEXT: FunctionTypes: [ 0, 1, 1, 1 ]
; CHECK-NEXT: - Type: TABLE ; CHECK-NEXT: - Type: TABLE
; CHECK-NEXT: Tables: ; CHECK-NEXT: Tables:
; CHECK-NEXT: - ElemType: FUNCREF ; CHECK-NEXT: - ElemType: FUNCREF
@ -79,40 +79,37 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1 ; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Name: weakFn ; CHECK-NEXT: - Name: weakFn
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: exportWeak1 ; CHECK-NEXT: - Name: exportWeak1
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: weakGlobal ; CHECK-NEXT: - Name: weakGlobal
; CHECK-NEXT: Kind: GLOBAL ; CHECK-NEXT: Kind: GLOBAL
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Name: exportWeak2 ; CHECK-NEXT: - Name: exportWeak2
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 4 ; CHECK-NEXT: Index: 3
; CHECK-NEXT: - Type: ELEM ; CHECK-NEXT: - Type: ELEM
; CHECK-NEXT: Segments: ; CHECK-NEXT: Segments:
; CHECK-NEXT: - Offset: ; CHECK-NEXT: - Offset:
; CHECK-NEXT: Opcode: I32_CONST ; CHECK-NEXT: Opcode: I32_CONST
; CHECK-NEXT: Value: 1 ; CHECK-NEXT: Value: 1
; CHECK-NEXT: Functions: [ 2 ] ; CHECK-NEXT: Functions: [ 1 ]
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 1081808080001A0B
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 1082808080001A0B ; CHECK-NEXT: Body: 41010B
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41010B
; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4181808080000B ; CHECK-NEXT: Body: 4181808080000B
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4181808080000B ; CHECK-NEXT: Body: 4181808080000B
; CHECK-NEXT: - Type: DATA ; CHECK-NEXT: - Type: DATA
@ -127,13 +124,11 @@ entry:
; CHECK-NEXT: Name: name ; CHECK-NEXT: Name: name
; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __wasm_call_ctors
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start ; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: weakFn ; CHECK-NEXT: Name: weakFn
; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: exportWeak1 ; CHECK-NEXT: Name: exportWeak1
; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: exportWeak2 ; CHECK-NEXT: Name: exportWeak2
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -34,13 +34,13 @@ entry:
; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: - Type: TYPE
; CHECK-NEXT: Signatures: ; CHECK-NEXT: Signatures:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ReturnType: I32
; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: ReturnType: NORESULT
; CHECK-NEXT: ParamTypes:
; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 1, 1, 0 ] ; CHECK-NEXT: FunctionTypes: [ 0, 0, 1 ]
; CHECK-NEXT: - Type: TABLE ; CHECK-NEXT: - Type: TABLE
; CHECK-NEXT: Tables: ; CHECK-NEXT: Tables:
; CHECK-NEXT: - ElemType: FUNCREF ; CHECK-NEXT: - ElemType: FUNCREF
@ -84,19 +84,16 @@ entry:
; CHECK-NEXT: Index: 2 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: _start ; CHECK-NEXT: - Name: _start
; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 3 ; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions: ; CHECK-NEXT: Functions:
; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 0B ; CHECK-NEXT: Body: 4180808080000B
; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4180808080000B ; CHECK-NEXT: Body: 4180808080000B
; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Locals: ; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 4180808080000B ; CHECK-NEXT: Body: 1081808080001A1080808080001A0B
; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 1082808080001A1081808080001A0B
; CHECK-NEXT: ... ; CHECK-NEXT: ...

View File

@ -38,32 +38,42 @@ void lld::wasm::markLive() {
LLVM_DEBUG(dbgs() << "markLive\n"); LLVM_DEBUG(dbgs() << "markLive\n");
SmallVector<InputChunk *, 256> Q; SmallVector<InputChunk *, 256> Q;
auto Enqueue = [&](Symbol *Sym) { std::function<void(Symbol*)> Enqueue = [&](Symbol *Sym) {
if (!Sym || Sym->isLive()) if (!Sym || Sym->isLive())
return; return;
LLVM_DEBUG(dbgs() << "markLive: " << Sym->getName() << "\n"); LLVM_DEBUG(dbgs() << "markLive: " << Sym->getName() << "\n");
Sym->markLive(); Sym->markLive();
if (InputChunk *Chunk = Sym->getChunk()) if (InputChunk *Chunk = Sym->getChunk())
Q.push_back(Chunk); Q.push_back(Chunk);
// The ctor functions are all referenced by the synthetic CallCtors
// function. However, this function does not contain relocations so we
// have to manually mark the ctors as live if CallCtors itself is live.
if (Sym == WasmSym::CallCtors) {
for (const ObjFile *Obj : Symtab->ObjectFiles) {
const WasmLinkingData &L = Obj->getWasmObj()->linkingData();
for (const WasmInitFunc &F : L.InitFunctions)
Enqueue(Obj->getFunctionSymbol(F.Symbol));
}
}
}; };
// Add GC root symbols. // Add GC root symbols.
if (!Config->Entry.empty()) if (!Config->Entry.empty())
Enqueue(Symtab->find(Config->Entry)); Enqueue(Symtab->find(Config->Entry));
Enqueue(WasmSym::CallCtors);
// We need to preserve any exported symbol // We need to preserve any exported symbol
for (Symbol *Sym : Symtab->getSymbols()) for (Symbol *Sym : Symtab->getSymbols())
if (Sym->isExported()) if (Sym->isExported())
Enqueue(Sym); Enqueue(Sym);
// The ctor functions are all used in the synthetic __wasm_call_ctors // For relocatable output, we need to preserve all the ctor functions
// function, but since this function is created in-place it doesn't contain if (Config->Relocatable) {
// relocations which mean we have to manually mark the ctors. for (const ObjFile *Obj : Symtab->ObjectFiles) {
for (const ObjFile *Obj : Symtab->ObjectFiles) { const WasmLinkingData &L = Obj->getWasmObj()->linkingData();
const WasmLinkingData &L = Obj->getWasmObj()->linkingData(); for (const WasmInitFunc &F : L.InitFunctions)
for (const WasmInitFunc &F : L.InitFunctions) Enqueue(Obj->getFunctionSymbol(F.Symbol));
Enqueue(Obj->getFunctionSymbol(F.Symbol)); }
} }
// Follow relocations to mark all reachable chunks. // Follow relocations to mark all reachable chunks.

View File

@ -1137,6 +1137,9 @@ static const int OPCODE_END = 0xb;
// Create synthetic "__wasm_call_ctors" function based on ctor functions // Create synthetic "__wasm_call_ctors" function based on ctor functions
// in input object. // in input object.
void Writer::createCtorFunction() { void Writer::createCtorFunction() {
if (!WasmSym::CallCtors->isLive())
return;
// First write the body's contents to a string. // First write the body's contents to a string.
std::string BodyContent; std::string BodyContent;
{ {
@ -1169,6 +1172,7 @@ void Writer::calculateInitFunctions() {
const WasmLinkingData &L = File->getWasmObj()->linkingData(); const WasmLinkingData &L = File->getWasmObj()->linkingData();
for (const WasmInitFunc &F : L.InitFunctions) { for (const WasmInitFunc &F : L.InitFunctions) {
FunctionSymbol *Sym = File->getFunctionSymbol(F.Symbol); FunctionSymbol *Sym = File->getFunctionSymbol(F.Symbol);
assert(Sym->isLive());
if (*Sym->Signature != WasmSignature{{}, {}}) if (*Sym->Signature != WasmSignature{{}, {}})
error("invalid signature for init func: " + toString(*Sym)); error("invalid signature for init func: " + toString(*Sym));
InitFunctions.emplace_back(WasmInitEntry{Sym, F.Priority}); InitFunctions.emplace_back(WasmInitEntry{Sym, F.Priority});