304 lines · plain
1; RUN: llc -mcpu=mvp -filetype=obj -o %t.o %s2; RUN: llc -mcpu=mvp -filetype=obj %S/Inputs/weak-alias.ll -o %t2.o3; RUN: wasm-ld --export-dynamic %t.o %t2.o -o %t.wasm4; RUN: obj2yaml %t.wasm | FileCheck %s5 6; Test that weak aliases (alias_fn is a weak alias of direct_fn) are linked correctly7 8target triple = "wasm32-unknown-unknown"9 10declare i32 @alias_fn() local_unnamed_addr #111 12; Function Attrs: nounwind uwtable13define void @_start() local_unnamed_addr #1 {14entry:15 %call = tail call i32 @alias_fn() #216 ret void17}18 19; CHECK: --- !WASM20; CHECK-NEXT: FileHeader:21; CHECK-NEXT: Version: 0x122; CHECK-NEXT: Sections:23; CHECK-NEXT: - Type: TYPE24; CHECK-NEXT: Signatures:25; CHECK-NEXT: - Index: 026; CHECK-NEXT: ParamTypes:27; CHECK-NEXT: ReturnTypes: []28; CHECK-NEXT: - Index: 129; CHECK-NEXT: ParamTypes: []30; CHECK-NEXT: ReturnTypes:31; CHECK-NEXT: - I3232; CHECK-NEXT: - Type: FUNCTION33; CHECK-NEXT: FunctionTypes: [ 0, 1, 1, 1, 1, 1 ]34; CHECK-NEXT: - Type: TABLE35; CHECK-NEXT: Tables:36; CHECK-NEXT: - Index: 037; CHECK-NEXT: ElemType: FUNCREF38; CHECK-NEXT: Limits:39; CHECK-NEXT: Flags: [ HAS_MAX ]40; CHECK-NEXT: Minimum: 0x241; CHECK-NEXT: Maximum: 0x242; CHECK-NEXT: - Type: MEMORY43; CHECK-NEXT: Memories:44; CHECK-NEXT: - Minimum: 0x145; CHECK-NEXT: - Type: GLOBAL46; CHECK-NEXT: Globals:47; CHECK-NEXT: - Index: 048; CHECK-NEXT: Type: I3249; CHECK-NEXT: Mutable: true50; CHECK-NEXT: InitExpr:51; CHECK-NEXT: Opcode: I32_CONST52; CHECK-NEXT: Value: 6553653; CHECK-NEXT: - Type: EXPORT54; CHECK-NEXT: Exports:55; CHECK-NEXT: - Name: memory56; CHECK-NEXT: Kind: MEMORY57; CHECK-NEXT: Index: 058; CHECK-NEXT: - Name: _start59; CHECK-NEXT: Kind: FUNCTION60; CHECK-NEXT: Index: 061; CHECK-NEXT: - Name: alias_fn62; CHECK-NEXT: Kind: FUNCTION63; CHECK-NEXT: Index: 164; CHECK-NEXT: - Name: direct_fn65; CHECK-NEXT: Kind: FUNCTION66; CHECK-NEXT: Index: 167; CHECK-NEXT: - Name: call_direct68; CHECK-NEXT: Kind: FUNCTION69; CHECK-NEXT: Index: 270; CHECK-NEXT: - Name: call_alias71; CHECK-NEXT: Kind: FUNCTION72; CHECK-NEXT: Index: 373; CHECK-NEXT: - Name: call_alias_ptr74; CHECK-NEXT: Kind: FUNCTION75; CHECK-NEXT: Index: 476; CHECK-NEXT: - Name: call_direct_ptr77; CHECK-NEXT: Kind: FUNCTION78; CHECK-NEXT: Index: 579; CHECK-NEXT: - Type: ELEM80; CHECK-NEXT: Segments:81; CHECK-NEXT: - Offset:82; CHECK-NEXT: Opcode: I32_CONST83; CHECK-NEXT: Value: 184; CHECK-NEXT: Functions: [ 1 ]85; CHECK-NEXT: - Type: CODE86; CHECK-NEXT: Functions:87; CHECK-NEXT: - Index: 088; CHECK-NEXT: Locals:89; CHECK-NEXT: Body: 1081808080001A0B90; CHECK-NEXT: - Index: 191; CHECK-NEXT: Locals:92; CHECK-NEXT: Body: 41000B93; CHECK-NEXT: - Index: 294; CHECK-NEXT: Locals:95; CHECK-NEXT: Body: 1081808080000B96; CHECK-NEXT: - Index: 397; CHECK-NEXT: Locals:98; CHECK-NEXT: Body: 1081808080000B99; CHECK-NEXT: - Index: 4100; CHECK-NEXT: Locals:101; CHECK-NEXT: - Type: I32102; CHECK-NEXT: Count: 2103; CHECK-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B104; CHECK-NEXT: - Index: 5105; CHECK-NEXT: Locals:106; CHECK-NEXT: - Type: I32107; CHECK-NEXT: Count: 2108; CHECK-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B109; CHECK-NEXT: - Type: CUSTOM110; CHECK-NEXT: HeaderSecSizeEncodingLen: 2111; CHECK-NEXT: Name: name112; CHECK-NEXT: FunctionNames:113; CHECK-NEXT: - Index: 0114; CHECK-NEXT: Name: _start115; CHECK-NEXT: - Index: 1116; CHECK-NEXT: Name: direct_fn117; CHECK-NEXT: - Index: 2118; CHECK-NEXT: Name: call_direct119; CHECK-NEXT: - Index: 3120; CHECK-NEXT: Name: call_alias121; CHECK-NEXT: - Index: 4122; CHECK-NEXT: Name: call_alias_ptr123; CHECK-NEXT: - Index: 5124; CHECK-NEXT: Name: call_direct_ptr125; CHECK-NEXT: GlobalNames:126; CHECK-NEXT: - Index: 0127; CHECK-NEXT: Name: __stack_pointer128; CHECK-NEXT: ...129 130; RUN: wasm-ld --relocatable %t.o %t2.o -o %t.reloc.o131; RUN: obj2yaml %t.reloc.o | FileCheck %s -check-prefix=RELOC132 133; RELOC: --- !WASM134; RELOC-NEXT: FileHeader:135; RELOC-NEXT: Version: 0x1136; RELOC-NEXT: Sections:137; RELOC-NEXT: - Type: TYPE138; RELOC-NEXT: Signatures:139; RELOC-NEXT: - Index: 0140; RELOC-NEXT: ParamTypes: []141; RELOC-NEXT: ReturnTypes: []142; RELOC-NEXT: - Index: 1143; RELOC-NEXT: ParamTypes: []144; RELOC-NEXT: ReturnTypes:145; RELOC-NEXT: - I32146; RELOC-NEXT: - Type: IMPORT147; RELOC-NEXT: Imports:148; RELOC-NEXT: - Module: env149; RELOC-NEXT: Field: __indirect_function_table150; RELOC-NEXT: Kind: TABLE151; RELOC-NEXT: Table:152; RELOC-NEXT: Index: 0153; RELOC-NEXT: ElemType: FUNCREF154; RELOC-NEXT: Limits:155; RELOC-NEXT: Minimum: 0x2156; RELOC-NEXT: - Module: env157; RELOC-NEXT: Field: __stack_pointer158; RELOC-NEXT: Kind: GLOBAL159; RELOC-NEXT: GlobalType: I32160; RELOC-NEXT: GlobalMutable: true161; RELOC-NEXT: - Type: FUNCTION162; RELOC-NEXT: FunctionTypes: [ 0, 1, 1, 1, 1, 1 ]163; RELOC-NEXT: - Type: MEMORY164; RELOC-NEXT: Memories:165; RELOC-NEXT: - Minimum: 0x0166; RELOC-NEXT: - Type: ELEM167; RELOC-NEXT: Segments:168; RELOC-NEXT: - Offset:169; RELOC-NEXT: Opcode: I32_CONST170; RELOC-NEXT: Value: 1171; RELOC-NEXT: Functions: [ 1 ]172; RELOC-NEXT: - Type: CODE173; RELOC-NEXT: Relocations:174; RELOC-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB175; RELOC-NEXT: Index: 1176; RELOC-NEXT: Offset: 0x4177; RELOC-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB178; RELOC-NEXT: Index: 2179; RELOC-NEXT: Offset: 0x13180; RELOC-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB181; RELOC-NEXT: Index: 1182; RELOC-NEXT: Offset: 0x1C183; RELOC-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB184; RELOC-NEXT: Index: 6185; RELOC-NEXT: Offset: 0x27186; RELOC-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB187; RELOC-NEXT: Index: 6188; RELOC-NEXT: Offset: 0x32189; RELOC-NEXT: - Type: R_WASM_TABLE_INDEX_SLEB190; RELOC-NEXT: Index: 1191; RELOC-NEXT: Offset: 0x3A192; RELOC-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB193; RELOC-NEXT: Index: 1194; RELOC-NEXT: Offset: 0x43195; RELOC-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB196; RELOC-NEXT: Index: 6197; RELOC-NEXT: Offset: 0x50198; RELOC-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB199; RELOC-NEXT: Index: 6200; RELOC-NEXT: Offset: 0x5D201; RELOC-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB202; RELOC-NEXT: Index: 6203; RELOC-NEXT: Offset: 0x68204; RELOC-NEXT: - Type: R_WASM_TABLE_INDEX_SLEB205; RELOC-NEXT: Index: 2206; RELOC-NEXT: Offset: 0x70207; RELOC-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB208; RELOC-NEXT: Index: 2209; RELOC-NEXT: Offset: 0x79210; RELOC-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB211; RELOC-NEXT: Index: 6212; RELOC-NEXT: Offset: 0x86213; RELOC-NEXT: Functions:214; RELOC-NEXT: - Index: 0215; RELOC-NEXT: Locals:216; RELOC-NEXT: Body: 1081808080001A0B217; RELOC-NEXT: - Index: 1218; RELOC-NEXT: Locals:219; RELOC-NEXT: Body: 41000B220; RELOC-NEXT: - Index: 2221; RELOC-NEXT: Locals:222; RELOC-NEXT: Body: 1081808080000B223; RELOC-NEXT: - Index: 3224; RELOC-NEXT: Locals:225; RELOC-NEXT: Body: 1081808080000B226; RELOC-NEXT: - Index: 4227; RELOC-NEXT: Locals:228; RELOC-NEXT: - Type: I32229; RELOC-NEXT: Count: 2230; RELOC-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B231; RELOC-NEXT: - Index: 5232; RELOC-NEXT: Locals:233; RELOC-NEXT: - Type: I32234; RELOC-NEXT: Count: 2235; RELOC-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B236; RELOC-NEXT: - Type: CUSTOM237; RELOC-NEXT: Name: linking238; RELOC-NEXT: Version: 2239; RELOC-NEXT: SymbolTable:240; RELOC-NEXT: - Index: 0241; RELOC-NEXT: Kind: FUNCTION242; RELOC-NEXT: Name: _start243; RELOC-NEXT: Flags: [ ]244; RELOC-NEXT: Function: 0245; RELOC-NEXT: - Index: 1246; RELOC-NEXT: Kind: FUNCTION247; RELOC-NEXT: Name: alias_fn248; RELOC-NEXT: Flags: [ BINDING_WEAK ]249; RELOC-NEXT: Function: 1250; RELOC-NEXT: - Index: 2251; RELOC-NEXT: Kind: FUNCTION252; RELOC-NEXT: Name: direct_fn253; RELOC-NEXT: Flags: [ ]254; RELOC-NEXT: Function: 1255; RELOC-NEXT: - Index: 3256; RELOC-NEXT: Kind: FUNCTION257; RELOC-NEXT: Name: call_direct258; RELOC-NEXT: Flags: [ ]259; RELOC-NEXT: Function: 2260; RELOC-NEXT: - Index: 4261; RELOC-NEXT: Kind: FUNCTION262; RELOC-NEXT: Name: call_alias263; RELOC-NEXT: Flags: [ ]264; RELOC-NEXT: Function: 3265; RELOC-NEXT: - Index: 5266; RELOC-NEXT: Kind: FUNCTION267; RELOC-NEXT: Name: call_alias_ptr268; RELOC-NEXT: Flags: [ ]269; RELOC-NEXT: Function: 4270; RELOC-NEXT: - Index: 6271; RELOC-NEXT: Kind: GLOBAL272; RELOC-NEXT: Name: __stack_pointer273; RELOC-NEXT: Flags: [ UNDEFINED ]274; RELOC-NEXT: Global: 0275; RELOC-NEXT: - Index: 7276; RELOC-NEXT: Kind: FUNCTION277; RELOC-NEXT: Name: call_direct_ptr278; RELOC-NEXT: Flags: [ ]279; RELOC-NEXT: Function: 5280; RELOC-NEXT: - Index: 8281; RELOC-NEXT: Kind: TABLE282; RELOC-NEXT: Name: __indirect_function_table283; RELOC-NEXT: Flags: [ UNDEFINED, NO_STRIP ]284; RELOC-NEXT: Table: 0285; RELOC-NEXT: - Type: CUSTOM286; RELOC-NEXT: Name: name287; RELOC-NEXT: FunctionNames:288; RELOC-NEXT: - Index: 0289; RELOC-NEXT: Name: _start290; RELOC-NEXT: - Index: 1291; RELOC-NEXT: Name: direct_fn292; RELOC-NEXT: - Index: 2293; RELOC-NEXT: Name: call_direct294; RELOC-NEXT: - Index: 3295; RELOC-NEXT: Name: call_alias296; RELOC-NEXT: - Index: 4297; RELOC-NEXT: Name: call_alias_ptr298; RELOC-NEXT: - Index: 5299; RELOC-NEXT: Name: call_direct_ptr300; RELOC-NEXT: GlobalNames:301; RELOC-NEXT: - Index: 0302; RELOC-NEXT: Name: __stack_pointer303; RELOC-NEXT: ...304