1; RUN: llc -filetype=obj %p/Inputs/hello.ll -o %t.hello.o 2; RUN: llc -filetype=obj %s -o %t.o 3; RUN: wasm-ld -r -o %t.wasm %t.hello.o %t.o 4; RUN: obj2yaml %t.wasm | FileCheck %s --check-prefixes CHECK,NORMAL 5 6; RUN: llc -filetype=obj %p/Inputs/hello.ll -o %t.hello.bm.o -mattr=+bulk-memory 7; RUN: llc -filetype=obj %s -o %t.bm.o -mattr=+bulk-memory 8; RUN: wasm-ld -r -o %t.mt.wasm %t.hello.bm.o %t.bm.o --shared-memory --max-memory=131072 9; RUN: obj2yaml %t.mt.wasm | FileCheck %s --check-prefixes CHECK,SHARED 10 11target triple = "wasm32-unknown-unknown" 12 13; Function Attrs: nounwind 14define hidden i32 @my_func() local_unnamed_addr { 15entry: 16 %call = tail call i32 @foo_import() 17 %call2 = tail call i32 @bar_import() 18 ret i32 1 19} 20 21declare i32 @foo_import() local_unnamed_addr 22declare extern_weak i32 @bar_import() local_unnamed_addr 23@data_import = external global i64 24 25@func_addr1 = hidden global i32()* @my_func, align 4 26@func_addr2 = hidden global i32()* @foo_import, align 4 27@func_addr3 = hidden global i32()* @bar_import, align 4 28@data_addr1 = hidden global i64* @data_import, align 8 29 30$func_comdat = comdat any 31@data_comdat = weak_odr constant [3 x i8] c"abc", comdat($func_comdat) 32define linkonce_odr i32 @func_comdat() comdat { 33entry: 34 ret i32 ptrtoint ([3 x i8]* @data_comdat to i32) 35} 36 37; CHECK: --- !WASM 38; CHECK-NEXT: FileHeader: 39; CHECK-NEXT: Version: 0x00000001 40; CHECK-NEXT: Sections: 41; CHECK-NEXT: - Type: TYPE 42; CHECK-NEXT: Signatures: 43; CHECK-NEXT: - Index: 0 44; CHECK-NEXT: ReturnType: NORESULT 45; CHECK-NEXT: ParamTypes: 46; CHECK-NEXT: - I32 47; CHECK-NEXT: - Index: 1 48; CHECK-NEXT: ReturnType: I32 49; CHECK-NEXT: ParamTypes: 50; CHECK-NEXT: - Index: 2 51; CHECK-NEXT: ReturnType: NORESULT 52; CHECK-NEXT: ParamTypes: 53; CHECK-NEXT: - Type: IMPORT 54; CHECK-NEXT: Imports: 55; CHECK-NEXT: - Module: env 56; CHECK-NEXT: Field: puts 57; CHECK-NEXT: Kind: FUNCTION 58; CHECK-NEXT: SigIndex: 0 59; CHECK-NEXT: - Module: env 60; CHECK-NEXT: Field: foo_import 61; CHECK-NEXT: Kind: FUNCTION 62; CHECK-NEXT: SigIndex: 1 63; CHECK-NEXT: - Module: env 64; CHECK-NEXT: Field: bar_import 65; CHECK-NEXT: Kind: FUNCTION 66; CHECK-NEXT: SigIndex: 1 67; CHECK-NEXT: - Type: FUNCTION 68; CHECK-NEXT: FunctionTypes: [ 2, 1, 1 ] 69; CHECK-NEXT: - Type: TABLE 70; CHECK-NEXT: Tables: 71; CHECK-NEXT: - ElemType: FUNCREF 72; CHECK-NEXT: Limits: 73; CHECK-NEXT: Flags: [ HAS_MAX ] 74; CHECK-NEXT: Initial: 0x00000004 75; CHECK-NEXT: Maximum: 0x00000004 76; CHECK-NEXT: - Type: MEMORY 77; CHECK-NEXT: Memories: 78; NORMAL-NEXT: - Initial: 0x00000001 79; SHARED-NEXT: - Flags: [ HAS_MAX, IS_SHARED ] 80; SHARED-NEXT: Initial: 0x00000001 81; SHARED-NEXT: Maximum: 0x00000002 82; CHECK-NEXT: - Type: ELEM 83; CHECK-NEXT: Segments: 84; CHECK-NEXT: - Offset: 85; CHECK-NEXT: Opcode: I32_CONST 86; CHECK-NEXT: Value: 1 87; CHECK-NEXT: Functions: [ 4, 1, 2 ] 88; SHARED-NEXT: - Type: DATACOUNT 89; SHARED-NEXT: Count: 6 90; CHECK-NEXT: - Type: CODE 91; CHECK-NEXT: Relocations: 92; CHECK-NEXT: - Type: R_WASM_MEMORY_ADDR_SLEB 93; CHECK-NEXT: Index: 1 94; CHECK-NEXT: Offset: 0x00000004 95; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB 96; CHECK-NEXT: Index: 2 97; CHECK-NEXT: Offset: 0x0000000A 98; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB 99; CHECK-NEXT: Index: 4 100; CHECK-NEXT: Offset: 0x00000013 101; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB 102; CHECK-NEXT: Index: 5 103; CHECK-NEXT: Offset: 0x0000001A 104; CHECK-NEXT: - Type: R_WASM_MEMORY_ADDR_SLEB 105; CHECK-NEXT: Index: 7 106; CHECK-NEXT: Offset: 0x00000026 107; CHECK-NEXT: Functions: 108; CHECK-NEXT: - Index: 3 109; CHECK-NEXT: Locals: 110; CHECK-NEXT: Body: 4180808080001080808080000B 111; CHECK-NEXT: - Index: 4 112; CHECK-NEXT: Locals: 113; CHECK-NEXT: Body: 1081808080001A1082808080001A41010B 114; CHECK-NEXT: - Index: 5 115; CHECK-NEXT: Locals: 116; CHECK-NEXT: Body: 419C808080000B 117; NORMAL-NEXT: - Type: DATA 118; NORMAL-NEXT: Relocations: 119; NORMAL-NEXT: - Type: R_WASM_TABLE_INDEX_I32 120; NORMAL-NEXT: Index: 3 121; NORMAL-NEXT: Offset: 0x00000012 122; NORMAL-NEXT: - Type: R_WASM_TABLE_INDEX_I32 123; NORMAL-NEXT: Index: 4 124; NORMAL-NEXT: Offset: 0x0000001B 125; NORMAL-NEXT: - Type: R_WASM_TABLE_INDEX_I32 126; NORMAL-NEXT: Index: 5 127; NORMAL-NEXT: Offset: 0x00000024 128; NORMAL-NEXT: - Type: R_WASM_MEMORY_ADDR_I32 129; NORMAL-NEXT: Index: 12 130; NORMAL-NEXT: Offset: 0x0000002D 131; NORMAL-NEXT: Segments: 132; NORMAL-NEXT: - SectionOffset: 6 133; NORMAL-NEXT: InitFlags: 0 134; NORMAL-NEXT: Offset: 135; NORMAL-NEXT: Opcode: I32_CONST 136; NORMAL-NEXT: Value: 0 137; NORMAL-NEXT: Content: 68656C6C6F0A00 138; NORMAL-NEXT: - SectionOffset: 18 139; NORMAL-NEXT: InitFlags: 0 140; NORMAL-NEXT: Offset: 141; NORMAL-NEXT: Opcode: I32_CONST 142; NORMAL-NEXT: Value: 8 143; NORMAL-NEXT: Content: '01000000' 144; NORMAL-NEXT: - SectionOffset: 27 145; NORMAL-NEXT: InitFlags: 0 146; NORMAL-NEXT: Offset: 147; NORMAL-NEXT: Opcode: I32_CONST 148; NORMAL-NEXT: Value: 12 149; NORMAL-NEXT: Content: '02000000' 150; NORMAL-NEXT: - SectionOffset: 36 151; NORMAL-NEXT: InitFlags: 0 152; NORMAL-NEXT: Offset: 153; NORMAL-NEXT: Opcode: I32_CONST 154; NORMAL-NEXT: Value: 16 155; NORMAL-NEXT: Content: '03000000' 156; NORMAL-NEXT: - SectionOffset: 45 157; NORMAL-NEXT: InitFlags: 0 158; NORMAL-NEXT: Offset: 159; NORMAL-NEXT: Opcode: I32_CONST 160; NORMAL-NEXT: Value: 24 161; NORMAL-NEXT: Content: '00000000' 162; NORMAL-NEXT: - SectionOffset: 54 163; NORMAL-NEXT: InitFlags: 0 164; NORMAL-NEXT: Offset: 165; NORMAL-NEXT: Opcode: I32_CONST 166; NORMAL-NEXT: Value: 28 167; NORMAL-NEXT: Content: '616263' 168; NORMAL-NEXT: - Type: CUSTOM 169; NORMAL-NEXT: Name: linking 170; NORMAL-NEXT: Version: 2 171; NORMAL-NEXT: SymbolTable: 172; NORMAL-NEXT: - Index: 0 173; NORMAL-NEXT: Kind: FUNCTION 174; NORMAL-NEXT: Name: hello 175; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ] 176; NORMAL-NEXT: Function: 3 177; NORMAL-NEXT: - Index: 1 178; NORMAL-NEXT: Kind: DATA 179; NORMAL-NEXT: Name: hello_str 180; NORMAL-NEXT: Flags: [ ] 181; NORMAL-NEXT: Segment: 0 182; NORMAL-NEXT: Size: 7 183; NORMAL-NEXT: - Index: 2 184; NORMAL-NEXT: Kind: FUNCTION 185; NORMAL-NEXT: Name: puts 186; NORMAL-NEXT: Flags: [ UNDEFINED ] 187; NORMAL-NEXT: Function: 0 188; NORMAL-NEXT: - Index: 3 189; NORMAL-NEXT: Kind: FUNCTION 190; NORMAL-NEXT: Name: my_func 191; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ] 192; NORMAL-NEXT: Function: 4 193; NORMAL-NEXT: - Index: 4 194; NORMAL-NEXT: Kind: FUNCTION 195; NORMAL-NEXT: Name: foo_import 196; NORMAL-NEXT: Flags: [ UNDEFINED ] 197; NORMAL-NEXT: Function: 1 198; NORMAL-NEXT: - Index: 5 199; NORMAL-NEXT: Kind: FUNCTION 200; NORMAL-NEXT: Name: bar_import 201; NORMAL-NEXT: Flags: [ BINDING_WEAK, UNDEFINED ] 202; NORMAL-NEXT: Function: 2 203; NORMAL-NEXT: - Index: 6 204; NORMAL-NEXT: Kind: FUNCTION 205; NORMAL-NEXT: Name: func_comdat 206; NORMAL-NEXT: Flags: [ BINDING_WEAK ] 207; NORMAL-NEXT: Function: 5 208; NORMAL-NEXT: - Index: 7 209; NORMAL-NEXT: Kind: DATA 210; NORMAL-NEXT: Name: data_comdat 211; NORMAL-NEXT: Flags: [ BINDING_WEAK ] 212; NORMAL-NEXT: Segment: 5 213; NORMAL-NEXT: Size: 3 214; NORMAL-NEXT: - Index: 8 215; NORMAL-NEXT: Kind: DATA 216; NORMAL-NEXT: Name: func_addr1 217; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ] 218; NORMAL-NEXT: Segment: 1 219; NORMAL-NEXT: Size: 4 220; NORMAL-NEXT: - Index: 9 221; NORMAL-NEXT: Kind: DATA 222; NORMAL-NEXT: Name: func_addr2 223; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ] 224; NORMAL-NEXT: Segment: 2 225; NORMAL-NEXT: Size: 4 226; NORMAL-NEXT: - Index: 10 227; NORMAL-NEXT: Kind: DATA 228; NORMAL-NEXT: Name: func_addr3 229; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ] 230; NORMAL-NEXT: Segment: 3 231; NORMAL-NEXT: Size: 4 232; NORMAL-NEXT: - Index: 11 233; NORMAL-NEXT: Kind: DATA 234; NORMAL-NEXT: Name: data_addr1 235; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ] 236; NORMAL-NEXT: Segment: 4 237; NORMAL-NEXT: Size: 4 238; NORMAL-NEXT: - Index: 12 239; NORMAL-NEXT: Kind: DATA 240; NORMAL-NEXT: Name: data_import 241; NORMAL-NEXT: Flags: [ UNDEFINED ] 242; NORMAL-NEXT: SegmentInfo: 243; NORMAL-NEXT: - Index: 0 244; NORMAL-NEXT: Name: .rodata.hello_str 245; NORMAL-NEXT: Alignment: 0 246; NORMAL-NEXT: Flags: [ ] 247; NORMAL-NEXT: - Index: 1 248; NORMAL-NEXT: Name: .data.func_addr1 249; NORMAL-NEXT: Alignment: 2 250; NORMAL-NEXT: Flags: [ ] 251; NORMAL-NEXT: - Index: 2 252; NORMAL-NEXT: Name: .data.func_addr2 253; NORMAL-NEXT: Alignment: 2 254; NORMAL-NEXT: Flags: [ ] 255; NORMAL-NEXT: - Index: 3 256; NORMAL-NEXT: Name: .data.func_addr3 257; NORMAL-NEXT: Alignment: 2 258; NORMAL-NEXT: Flags: [ ] 259; NORMAL-NEXT: - Index: 4 260; NORMAL-NEXT: Name: .data.data_addr1 261; NORMAL-NEXT: Alignment: 3 262; NORMAL-NEXT: Flags: [ ] 263; NORMAL-NEXT: - Index: 5 264; NORMAL-NEXT: Name: .rodata.data_comdat 265; NORMAL-NEXT: Alignment: 0 266; NORMAL-NEXT: Flags: [ ] 267; NORMAL-NEXT: Comdats: 268; NORMAL-NEXT: - Name: func_comdat 269; NORMAL-NEXT: Entries: 270; NORMAL-NEXT: - Kind: FUNCTION 271; NORMAL-NEXT: Index: 5 272; NORMAL-NEXT: - Kind: DATA 273; NORMAL-NEXT: Index: 5 274; NORMAL-NEXT: - Type: CUSTOM 275; NORMAL-NEXT: Name: name 276; NORMAL-NEXT: FunctionNames: 277; NORMAL-NEXT: - Index: 0 278; NORMAL-NEXT: Name: puts 279; NORMAL-NEXT: - Index: 1 280; NORMAL-NEXT: Name: foo_import 281; NORMAL-NEXT: - Index: 2 282; NORMAL-NEXT: Name: bar_import 283; NORMAL-NEXT: - Index: 3 284; NORMAL-NEXT: Name: hello 285; NORMAL-NEXT: - Index: 4 286; NORMAL-NEXT: Name: my_func 287; NORMAL-NEXT: - Index: 5 288; NORMAL-NEXT: Name: func_comdat 289; NORMAL-NEXT:... 290