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