155 lines · plain
1; RUN: llc -mcpu=mvp -filetype=obj -o %t.o %s2; RUN: llc -mcpu=mvp -filetype=obj %S/Inputs/global-ctor-dtor.ll -o %t.global-ctor-dtor.o3 4target triple = "wasm32-unknown-unknown"5 6define hidden void @func1() {7entry:8 ret void9}10 11define hidden void @func2() {12entry:13 ret void14}15 16define hidden void @func3() {17entry:18 ret void19}20 21define hidden void @func4() {22entry:23 ret void24}25 26declare hidden void @externCtor()27declare hidden void @externDtor()28declare hidden void @__wasm_call_ctors()29declare i32 @__cxa_atexit(i32 %func, i32 %arg, i32 %dso_handle)30 31define hidden void @_start() {32entry:33 call void @__wasm_call_ctors();34 ret void35}36 37@llvm.global_ctors = appending global [4 x { i32, ptr, ptr }] [38 { i32, ptr, ptr } { i32 1001, ptr @func1, ptr null },39 { i32, ptr, ptr } { i32 101, ptr @func1, ptr null },40 { i32, ptr, ptr } { i32 101, ptr @func2, ptr null },41 { i32, ptr, ptr } { i32 4000, ptr @externCtor, ptr null }42]43 44@llvm.global_dtors = appending global [4 x { i32, ptr, ptr }] [45 { i32, ptr, ptr } { i32 1001, ptr @func3, ptr null },46 { i32, ptr, ptr } { i32 101, ptr @func3, ptr null },47 { i32, ptr, ptr } { i32 101, ptr @func4, ptr null },48 { i32, ptr, ptr } { i32 4000, ptr @externDtor, ptr null }49]50 51; RUN: wasm-ld --allow-undefined %t.o %t.global-ctor-dtor.o -o %t.wasm52; RUN: obj2yaml %t.wasm | FileCheck %s53 54; CHECK: - Type: IMPORT55; CHECK-NEXT: Imports:56; CHECK-NEXT: - Module: env57; CHECK-NEXT: Field: __cxa_atexit58; CHECK-NEXT: Kind: FUNCTION59; CHECK-NEXT: SigIndex: 060; CHECK-NEXT: - Module: env61; CHECK-NEXT: Field: externDtor62; CHECK-NEXT: Kind: FUNCTION63; CHECK-NEXT: SigIndex: 164; CHECK-NEXT: - Module: env65; CHECK-NEXT: Field: externCtor66; CHECK-NEXT: Kind: FUNCTION67; CHECK-NEXT: SigIndex: 168; CHECK: - Type: ELEM69; CHECK-NEXT: Segments:70; CHECK-NEXT: - Offset:71; CHECK-NEXT: Opcode: I32_CONST72; CHECK-NEXT: Value: 173; CHECK-NEXT: Functions: [ 9, 11, 13, 17, 19, 21 ]74; CHECK-NEXT: - Type: CODE75; CHECK-NEXT: Functions:76; CHECK-NEXT: - Index: 377; CHECK-NEXT: Locals:78; CHECK-NEXT: Body: 10041005100A100F1012100F10141004100C100F10161002100E0B79; CHECK: - Index: 2280; CHECK-NEXT: Locals:81; CHECK-NEXT: Body: 02404186808080004100418080848000108080808000450D00000B0B82; CHECK-NEXT: - Type: CUSTOM83; CHECK-NEXT: Name: name84; CHECK-NEXT: FunctionNames:85; CHECK-NEXT: - Index: 086; CHECK-NEXT: Name: __cxa_atexit87; CHECK-NEXT: - Index: 188; CHECK-NEXT: Name: externDtor89; CHECK-NEXT: - Index: 290; CHECK-NEXT: Name: externCtor91; CHECK-NEXT: - Index: 392; CHECK-NEXT: Name: __wasm_call_ctors93; CHECK-NEXT: - Index: 494; CHECK-NEXT: Name: func195; CHECK-NEXT: - Index: 596; CHECK-NEXT: Name: func297; CHECK-NEXT: - Index: 698; CHECK-NEXT: Name: func399; CHECK-NEXT: - Index: 7100; CHECK-NEXT: Name: func4101; CHECK-NEXT: - Index: 8102; CHECK-NEXT: Name: _start103; CHECK-NEXT: - Index: 9104; CHECK-NEXT: Name: .Lcall_dtors.101105; CHECK-NEXT: - Index: 10106; CHECK-NEXT: Name: .Lregister_call_dtors.101107; CHECK-NEXT: - Index: 11108; CHECK-NEXT: Name: .Lcall_dtors.1001109; CHECK-NEXT: - Index: 12110; CHECK-NEXT: Name: .Lregister_call_dtors.1001111; CHECK-NEXT: - Index: 13112; CHECK-NEXT: Name: .Lcall_dtors.4000113; CHECK-NEXT: - Index: 14114; CHECK-NEXT: Name: .Lregister_call_dtors.4000115; CHECK-NEXT: - Index: 15116; CHECK-NEXT: Name: myctor117; CHECK-NEXT: - Index: 16118; CHECK-NEXT: Name: mydtor119; CHECK-NEXT: - Index: 17120; CHECK-NEXT: Name: .Lcall_dtors.101121; CHECK-NEXT: - Index: 18122; CHECK-NEXT: Name: .Lregister_call_dtors.101123; CHECK-NEXT: - Index: 19124; CHECK-NEXT: Name: .Lcall_dtors.202125; CHECK-NEXT: - Index: 20126; CHECK-NEXT: Name: .Lregister_call_dtors.202127; CHECK-NEXT: - Index: 21128; CHECK-NEXT: Name: .Lcall_dtors.2002129; CHECK-NEXT: - Index: 22130; CHECK-NEXT: Name: .Lregister_call_dtors.2002131; CHECK-NEXT: GlobalNames:132; CHECK-NEXT: - Index: 0133; CHECK-NEXT: Name: __stack_pointer134; CHECK-NEXT: ...135 136; RUN: wasm-ld -r %t.o %t.global-ctor-dtor.o -o %t.reloc.wasm137; RUN: llvm-readobj --symbols --sections %t.reloc.wasm | FileCheck -check-prefix=RELOC %s138 139; RELOC: Name: linking140; RELOC-NEXT: InitFunctions [141; RELOC-NEXT: 0 (priority=101)142; RELOC-NEXT: 1 (priority=101)143; RELOC-NEXT: 15 (priority=101)144; RELOC-NEXT: 11 (priority=101)145; RELOC-NEXT: 21 (priority=101)146; RELOC-NEXT: 11 (priority=202)147; RELOC-NEXT: 23 (priority=202)148; RELOC-NEXT: 0 (priority=1001)149; RELOC-NEXT: 17 (priority=1001)150; RELOC-NEXT: 11 (priority=2002)151; RELOC-NEXT: 25 (priority=2002)152; RELOC-NEXT: 9 (priority=4000)153; RELOC-NEXT: 19 (priority=4000)154; RELOC-NEXT: ]155