1; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ 2; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \ 3; RUN: FileCheck --check-prefixes=COMMON,BIT32 %s 4 5; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ 6; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \ 7; RUN: FileCheck --check-prefixes=COMMON,BIT64 %s 8 9; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ 10; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false \ 11; RUN: -filetype=obj -o %t.o < %s 12; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM32 %s 13 14; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ 15; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false \ 16; RUN: -filetype=obj -o %t64.o < %s 17; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM64 %s 18 19@foo_ext_weak_p = global ptr @foo_ext_weak_ref 20@b_w = extern_weak global i32 21 22declare extern_weak void @foo_ext_weak_ref() 23 24define i32 @main() { 25entry: 26 %0 = load ptr, ptr @foo_ext_weak_p 27 call void %0() 28 call void @foo_ext_weak(ptr @b_w) 29 ret i32 0 30} 31 32declare extern_weak void @foo_ext_weak(ptr) 33 34; COMMON: .globl main[DS] # -- Begin function main 35; COMMON-NEXT: .globl .main 36; COMMON-NEXT: .align 4 37; COMMON-NEXT: .csect main[DS] 38; BIT32-NEXT: .vbyte 4, .main # @main 39; BIT32-NEXT: .vbyte 4, TOC[TC0] 40; BIT32-NEXT: .vbyte 4, 0 41; BIT64-NEXT: .vbyte 8, .main # @main 42; BIT64-NEXT: .vbyte 8, TOC[TC0] 43; BIT64-NEXT: .vbyte 8, 0 44; COMMON-NEXT: .csect ..text..[PR] 45; COMMON-NEXT: .main: 46 47; COMMON: .csect .data[RW] 48; COMMON: .globl foo_ext_weak_p 49; BIT32-NEXT: .align 2 50; BIT64-NEXT: .align 3 51; COMMON-NEXT: foo_ext_weak_p: 52; BIT32-NEXT: .vbyte 4, foo_ext_weak_ref[DS] 53; BIT64-NEXT: .vbyte 8, foo_ext_weak_ref[DS] 54; COMMON-NEXT: .weak b_w[UA] 55; COMMON-NEXT: .weak .foo_ext_weak_ref[PR] 56; COMMON-NEXT: .weak foo_ext_weak_ref[DS] 57; COMMON-NEXT: .weak .foo_ext_weak[PR] 58; COMMON-NEXT: .toc 59; COMMON-NEXT: L..C0: 60; COMMON-NEXT: .tc foo_ext_weak_p[TC],foo_ext_weak_p 61; COMMON-NEXT: L..C1: 62; COMMON-NEXT: .tc b_w[TC],b_w[UA] 63 64; CHECKSYM: Symbols [ 65; CHECKSYM-NEXT: Symbol { 66; CHECKSYM-NEXT: Index: 0 67; CHECKSYM-NEXT: Name: .file 68; CHECKSYM-NEXT: Value (SymbolTableIndex): 0x0 69; CHECKSYM-NEXT: Section: N_DEBUG 70; CHECKSYM-NEXT: Source Language ID: TB_CPLUSPLUS (0x9) 71; CHECKSYM-NEXT: CPU Version ID: TCPU_COM (0x3) 72; CHECKSYM-NEXT: StorageClass: C_FILE (0x67) 73; CHECKSYM-NEXT: NumberOfAuxEntries: 2 74; CHECKSYM: Symbol { 75; CHECKSYM-NEXT: Index: [[#Index:]] 76; CHECKSYM-NEXT: Name: .foo_ext_weak 77; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 78; CHECKSYM-NEXT: Section: N_UNDEF 79; CHECKSYM-NEXT: Type: 0x0 80; CHECKSYM-NEXT: StorageClass: C_WEAKEXT (0x6F) 81; CHECKSYM-NEXT: NumberOfAuxEntries: 1 82; CHECKSYM-NEXT: CSECT Auxiliary Entry { 83; CHECKSYM-NEXT: Index: [[#Index+1]] 84; CHECKSYM-NEXT: SectionLen: 0 85; CHECKSYM-NEXT: ParameterHashIndex: 0x0 86; CHECKSYM-NEXT: TypeChkSectNum: 0x0 87; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 88; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) 89; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 90; CHECKSYM32-NEXT: StabInfoIndex: 0x0 91; CHECKSYM32-NEXT: StabSectNum: 0x0 92; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 93; CHECKSYM-NEXT: } 94; CHECKSYM-NEXT: } 95; CHECKSYM-NEXT: Symbol { 96; CHECKSYM-NEXT: Index: [[#Index+2]] 97; CHECKSYM-NEXT: Name: foo_ext_weak_ref 98; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 99; CHECKSYM-NEXT: Section: N_UNDEF 100; CHECKSYM-NEXT: Type: 0x0 101; CHECKSYM-NEXT: StorageClass: C_WEAKEXT (0x6F) 102; CHECKSYM-NEXT: NumberOfAuxEntries: 1 103; CHECKSYM-NEXT: CSECT Auxiliary Entry { 104; CHECKSYM-NEXT: Index: [[#Index+3]] 105; CHECKSYM-NEXT: SectionLen: 0 106; CHECKSYM-NEXT: ParameterHashIndex: 0x0 107; CHECKSYM-NEXT: TypeChkSectNum: 0x0 108; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 109; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) 110; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) 111; CHECKSYM32-NEXT: StabInfoIndex: 0x0 112; CHECKSYM32-NEXT: StabSectNum: 0x0 113; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 114; CHECKSYM-NEXT: } 115; CHECKSYM-NEXT: } 116; CHECKSYM-NEXT: Symbol { 117; CHECKSYM-NEXT: Index: [[#Index+4]] 118; CHECKSYM-NEXT: Name: b_w 119; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 120; CHECKSYM-NEXT: Section: N_UNDEF 121; CHECKSYM-NEXT: Type: 0x0 122; CHECKSYM-NEXT: StorageClass: C_WEAKEXT (0x6F) 123; CHECKSYM-NEXT: NumberOfAuxEntries: 1 124; CHECKSYM-NEXT: CSECT Auxiliary Entry { 125; CHECKSYM-NEXT: Index: [[#Index+5]] 126; CHECKSYM-NEXT: SectionLen: 0 127; CHECKSYM-NEXT: ParameterHashIndex: 0x0 128; CHECKSYM-NEXT: TypeChkSectNum: 0x0 129; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 130; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) 131; CHECKSYM-NEXT: StorageMappingClass: XMC_UA (0x4) 132; CHECKSYM32-NEXT: StabInfoIndex: 0x0 133; CHECKSYM32-NEXT: StabSectNum: 0x0 134; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 135; CHECKSYM-NEXT: } 136; CHECKSYM-NEXT: } 137; CHECKSYM-NEXT: Symbol { 138; CHECKSYM-NEXT: Index: [[#Index+6]] 139; CHECKSYM-NEXT: Name: .foo_ext_weak_ref 140; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 141; CHECKSYM-NEXT: Section: N_UNDEF 142; CHECKSYM-NEXT: Type: 0x0 143; CHECKSYM-NEXT: StorageClass: C_WEAKEXT (0x6F) 144; CHECKSYM-NEXT: NumberOfAuxEntries: 1 145; CHECKSYM-NEXT: CSECT Auxiliary Entry { 146; CHECKSYM-NEXT: Index: [[#Index+7]] 147; CHECKSYM-NEXT: SectionLen: 0 148; CHECKSYM-NEXT: ParameterHashIndex: 0x0 149; CHECKSYM-NEXT: TypeChkSectNum: 0x0 150; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 151; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) 152; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 153; CHECKSYM32-NEXT: StabInfoIndex: 0x0 154; CHECKSYM32-NEXT: StabSectNum: 0x0 155; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 156; CHECKSYM-NEXT: } 157; CHECKSYM-NEXT: } 158; CHECKSYM-NEXT: Symbol { 159; CHECKSYM-NEXT: Index: [[#Index+8]] 160; CHECKSYM-NEXT: Name: 161; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 162; CHECKSYM-NEXT: Section: .text 163; CHECKSYM-NEXT: Type: 0x0 164; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 165; CHECKSYM-NEXT: NumberOfAuxEntries: 1 166; CHECKSYM-NEXT: CSECT Auxiliary Entry { 167; CHECKSYM-NEXT: Index: [[#Index+9]] 168; CHECKSYM-NEXT: SectionLen: 80 169; CHECKSYM-NEXT: ParameterHashIndex: 0x0 170; CHECKSYM-NEXT: TypeChkSectNum: 0x0 171; CHECKSYM-NEXT: SymbolAlignmentLog2: 5 172; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 173; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 174; CHECKSYM32-NEXT: StabInfoIndex: 0x0 175; CHECKSYM32-NEXT: StabSectNum: 0x0 176; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 177; CHECKSYM-NEXT: } 178; CHECKSYM-NEXT: } 179; CHECKSYM-NEXT: Symbol { 180; CHECKSYM-NEXT: Index: [[#Index+10]] 181; CHECKSYM-NEXT: Name: .main 182; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 183; CHECKSYM-NEXT: Section: .text 184; CHECKSYM-NEXT: Type: 0x0 185; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 186; CHECKSYM-NEXT: NumberOfAuxEntries: 1 187; CHECKSYM-NEXT: CSECT Auxiliary Entry { 188; CHECKSYM-NEXT: Index: [[#Index+11]] 189; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#Index+8]] 190; CHECKSYM-NEXT: ParameterHashIndex: 0x0 191; CHECKSYM-NEXT: TypeChkSectNum: 0x0 192; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 193; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) 194; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 195; CHECKSYM32-NEXT: StabInfoIndex: 0x0 196; CHECKSYM32-NEXT: StabSectNum: 0x0 197; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 198; CHECKSYM-NEXT: } 199; CHECKSYM-NEXT: } 200; CHECKSYM-NEXT: Symbol { 201; CHECKSYM-NEXT: Index: [[#Index+12]] 202; CHECKSYM-NEXT: Name: .data 203; CHECKSYM-NEXT: Value (RelocatableAddress): 0x50 204; CHECKSYM-NEXT: Section: .data 205; CHECKSYM-NEXT: Type: 0x0 206; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 207; CHECKSYM-NEXT: NumberOfAuxEntries: 1 208; CHECKSYM-NEXT: CSECT Auxiliary Entry { 209; CHECKSYM-NEXT: Index: [[#Index+13]] 210; CHECKSYM32-NEXT: SectionLen: 4 211; CHECKSYM64-NEXT: SectionLen: 8 212; CHECKSYM-NEXT: ParameterHashIndex: 0x0 213; CHECKSYM-NEXT: TypeChkSectNum: 0x0 214; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 215; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 216; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 217; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) 218; CHECKSYM32-NEXT: StabInfoIndex: 0x0 219; CHECKSYM32-NEXT: StabSectNum: 0x0 220; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 221; CHECKSYM-NEXT: } 222; CHECKSYM-NEXT: } 223; CHECKSYM-NEXT: Symbol { 224; CHECKSYM-NEXT: Index: [[#Index+14]] 225; CHECKSYM-NEXT: Name: foo_ext_weak_p 226; CHECKSYM-NEXT: Value (RelocatableAddress): 0x50 227; CHECKSYM-NEXT: Section: .data 228; CHECKSYM-NEXT: Type: 0x0 229; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 230; CHECKSYM-NEXT: NumberOfAuxEntries: 1 231; CHECKSYM-NEXT: CSECT Auxiliary Entry { 232; CHECKSYM-NEXT: Index: [[#Index+15]] 233; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#Index+12]] 234; CHECKSYM-NEXT: ParameterHashIndex: 0x0 235; CHECKSYM-NEXT: TypeChkSectNum: 0x0 236; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 237; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) 238; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) 239; CHECKSYM32-NEXT: StabInfoIndex: 0x0 240; CHECKSYM32-NEXT: StabSectNum: 0x0 241; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 242; CHECKSYM-NEXT: } 243; CHECKSYM-NEXT: } 244; CHECKSYM-NEXT: Symbol { 245; CHECKSYM-NEXT: Index: [[#Index+16]] 246; CHECKSYM-NEXT: Name: main 247; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x54 248; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x58 249; CHECKSYM-NEXT: Section: .data 250; CHECKSYM-NEXT: Type: 0x0 251; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 252; CHECKSYM-NEXT: NumberOfAuxEntries: 1 253; CHECKSYM-NEXT: CSECT Auxiliary Entry { 254; CHECKSYM-NEXT: Index: [[#Index+17]] 255; CHECKSYM32-NEXT: SectionLen: 12 256; CHECKSYM64-NEXT: SectionLen: 24 257; CHECKSYM-NEXT: ParameterHashIndex: 0x0 258; CHECKSYM-NEXT: TypeChkSectNum: 0x0 259; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 260; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 261; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 262; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) 263; CHECKSYM32-NEXT: StabInfoIndex: 0x0 264; CHECKSYM32-NEXT: StabSectNum: 0x0 265; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 266; CHECKSYM-NEXT: } 267; CHECKSYM-NEXT: } 268; CHECKSYM-NEXT: Symbol { 269; CHECKSYM-NEXT: Index: [[#Index+18]] 270; CHECKSYM-NEXT: Name: TOC 271; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x60 272; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x70 273; CHECKSYM-NEXT: Section: .data 274; CHECKSYM-NEXT: Type: 0x0 275; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 276; CHECKSYM-NEXT: NumberOfAuxEntries: 1 277; CHECKSYM-NEXT: CSECT Auxiliary Entry { 278; CHECKSYM-NEXT: Index: [[#Index+19]] 279; CHECKSYM-NEXT: SectionLen: 0 280; CHECKSYM-NEXT: ParameterHashIndex: 0x0 281; CHECKSYM-NEXT: TypeChkSectNum: 0x0 282; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 283; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 284; CHECKSYM-NEXT: StorageMappingClass: XMC_TC0 (0xF) 285; CHECKSYM32-NEXT: StabInfoIndex: 0x0 286; CHECKSYM32-NEXT: StabSectNum: 0x0 287; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 288; CHECKSYM-NEXT: } 289; CHECKSYM-NEXT: } 290; CHECKSYM-NEXT: Symbol { 291; CHECKSYM-NEXT: Index: [[#Index+20]] 292; CHECKSYM-NEXT: Name: foo_ext_weak_p 293; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x60 294; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x70 295; CHECKSYM-NEXT: Section: .data 296; CHECKSYM-NEXT: Type: 0x0 297; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 298; CHECKSYM-NEXT: NumberOfAuxEntries: 1 299; CHECKSYM-NEXT: CSECT Auxiliary Entry { 300; CHECKSYM-NEXT: Index: [[#Index+21]] 301; CHECKSYM32-NEXT: SectionLen: 4 302; CHECKSYM64-NEXT: SectionLen: 8 303; CHECKSYM-NEXT: ParameterHashIndex: 0x0 304; CHECKSYM-NEXT: TypeChkSectNum: 0x0 305; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 306; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 307; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 308; CHECKSYM-NEXT: StorageMappingClass: XMC_TC (0x3) 309; CHECKSYM32-NEXT: StabInfoIndex: 0x0 310; CHECKSYM32-NEXT: StabSectNum: 0x0 311; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 312; CHECKSYM-NEXT: } 313; CHECKSYM-NEXT: } 314; CHECKSYM-NEXT: Symbol { 315; CHECKSYM-NEXT: Index: [[#Index+22]] 316; CHECKSYM-NEXT: Name: b_w 317; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x64 318; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x78 319; CHECKSYM-NEXT: Section: .data 320; CHECKSYM-NEXT: Type: 0x0 321; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 322; CHECKSYM-NEXT: NumberOfAuxEntries: 1 323; CHECKSYM-NEXT: CSECT Auxiliary Entry { 324; CHECKSYM-NEXT: Index: [[#Index+23]] 325; CHECKSYM32-NEXT: SectionLen: 4 326; CHECKSYM64-NEXT: SectionLen: 8 327; CHECKSYM-NEXT: ParameterHashIndex: 0x0 328; CHECKSYM-NEXT: TypeChkSectNum: 0x0 329; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 330; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 331; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 332; CHECKSYM-NEXT: StorageMappingClass: XMC_TC (0x3) 333; CHECKSYM32-NEXT: StabInfoIndex: 0x0 334; CHECKSYM32-NEXT: StabSectNum: 0x0 335; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 336; CHECKSYM-NEXT: } 337; CHECKSYM-NEXT: } 338; CHECKSYM-NEXT: ] 339