; RUN: llc -filetype=obj -o %t.o %s ; RUN: wasm-ld %t.o -o %t.wasm ; RUN: obj2yaml %t.wasm | FileCheck %s ; RUN: wasm-ld --export=__wasm_call_ctors %t.o -o %t.export.wasm ; RUN: obj2yaml %t.export.wasm | FileCheck %s -check-prefix=EXPORT ; Test that we emit wrappers and call __wasm_call_ctor when not referenced. target triple = "wasm32-unknown-unknown" define hidden void @_start() { entry: ret void } define hidden void @func1() { entry: ret void } define hidden void @func2() { entry: ret void } define hidden i32 @__cxa_atexit(i32 %func, i32 %arg, i32 %dso_handle) { ret i32 0 } @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [ { i32, void ()*, i8* } { i32 1, void ()* @func1, i8* null } ] @llvm.global_dtors = appending global [1 x { i32, void ()*, i8* }] [ { i32, void ()*, i8* } { i32 1, void ()* @func2, i8* null } ] ; Check that we have exactly the needed exports: `memory` because that's ; currently on by default, and `_start`, because that's the default entrypoint. ; CHECK: - Type: EXPORT ; CHECK-NEXT: Exports: ; CHECK-NEXT: - Name: memory ; CHECK-NEXT: Kind: MEMORY ; CHECK-NEXT: Index: 0 ; CHECK-NEXT: - Name: _start ; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Index: 7 ; Check the body of `_start`'s command-export wrapper. ; CHECK: - Type: CODE ; CHECK: - Index: 7 ; CHECK-NEXT: Locals: [] ; CHECK-NEXT: Body: 100010010B ; Check the symbol table to ensure all the functions are here, and that ; index 7 above refers to the function we think it does. ; CHECK: - Type: CUSTOM ; CHECK-NEXT: Name: name ; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: Name: __wasm_call_ctors ; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: Name: _start ; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: Name: func1 ; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: Name: func2 ; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: Name: __cxa_atexit ; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: Name: .Lcall_dtors.1 ; CHECK-NEXT: - Index: 6 ; CHECK-NEXT: Name: .Lregister_call_dtors.1 ; CHECK-NEXT: - Index: 7 ; CHECK-NEXT: Name: _start.command_export ; EXPORT: __wasm_call_ctors ; EXPORT: func1 ; EXPORT: func2 ; EXPORT: __cxa_atexit