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