1; RUN: llc -mcpu=ppc -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s --check-prefix CHECK 2; RUN: llc -mcpu=ppc -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s --check-prefix CHECK 3 4; RUN: llc -filetype=obj -mcpu=ppc -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs < %s -o %t32.o 5; RUN: llvm-readobj %t32.o --syms --relocs | FileCheck %s -D#NFA=2 --check-prefix=OBJ32 6; RUN: llvm-objdump %t32.o -dr | FileCheck %s --check-prefix=DIS32 7 8; RUN: llc -filetype=obj -mcpu=ppc64 -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s -o %t64.o 9; RUN: llvm-readobj %t64.o --syms --relocs | FileCheck %s -D#NFA=2 --check-prefix=OBJ64 10; RUN: llvm-objdump %t64.o -dr | FileCheck %s --check-prefix=DIS64 11 12@i1 = external constant i32 #0 13@i2 = constant ptr @i1 #0 14 15define i32 @read() { 16 %1 = load i32, ptr @i1, align 4 17 ret i32 %1 18} 19 20define ptr @retptr() { 21 ret ptr @i2 22} 23 24attributes #0 = { "toc-data" } 25 26; CHECK: .read: 27; CHECK: la 3, i1[TD](2) 28 29; CHECK: .retptr: 30; CHECK: la 3, i2[TD](2) 31 32; CHECK-DAG: .toc 33; CHECK: .extern i1[TD] 34; CHECK: .csect i2[TD] 35 36; OBJ32: Relocations [ 37; OBJ32-NEXT: Section (index: 1) .text { 38; OBJ32-NEXT: 0x2 R_TOC i1([[#NFA+1]]) 0xF 39; OBJ32-NEXT: 0x26 R_TOC i2([[#NFA+15]]) 0xF 40; OBJ32-NEXT: } 41; OBJ32-NEXT: Section (index: 2) .data { 42; OBJ32-NEXT: 0x44 R_POS .read([[#NFA+5]]) 0x1F 43; OBJ32-NEXT: 0x48 R_POS TOC([[#NFA+13]]) 0x1F 44; OBJ32-NEXT: 0x50 R_POS .retptr([[#NFA+7]]) 0x1F 45; OBJ32-NEXT: 0x54 R_POS TOC([[#NFA+13]]) 0x1F 46; OBJ32-NEXT: 0x5C R_POS i1([[#NFA+1]]) 0x1F 47; OBJ32-NEXT: } 48; OBJ32-NEXT: ] 49 50; OBJ32: Symbol { 51; OBJ32: Index: [[#NFA+1]] 52; OBJ32-NEXT: Name: i1 53; OBJ32-NEXT: Value (RelocatableAddress): 0x0 54; OBJ32-NEXT: Section: N_UNDEF 55; OBJ32-NEXT: Type: 0x0 56; OBJ32-NEXT: StorageClass: C_EXT (0x2) 57; OBJ32-NEXT: NumberOfAuxEntries: 1 58; OBJ32-NEXT: CSECT Auxiliary Entry { 59; OBJ32-NEXT: Index: [[#NFA+2]] 60; OBJ32-NEXT: SectionLen: 0 61; OBJ32-NEXT: ParameterHashIndex: 0x0 62; OBJ32-NEXT: TypeChkSectNum: 0x0 63; OBJ32-NEXT: SymbolAlignmentLog2: 0 64; OBJ32-NEXT: SymbolType: XTY_ER (0x0) 65; OBJ32-NEXT: StorageMappingClass: XMC_TD (0x10) 66; OBJ32-NEXT: StabInfoIndex: 0x0 67; OBJ32-NEXT: StabSectNum: 0x0 68; OBJ32-NEXT: } 69; OBJ32-NEXT: } 70; OBJ32: Symbol { 71; OBJ32: Index: [[#NFA+13]] 72; OBJ32-NEXT: Name: TOC 73; OBJ32-NEXT: Value (RelocatableAddress): 0x5C 74; OBJ32-NEXT: Section: .data 75; OBJ32-NEXT: Type: 0x0 76; OBJ32-NEXT: StorageClass: C_HIDEXT (0x6B) 77; OBJ32-NEXT: NumberOfAuxEntries: 1 78; OBJ32-NEXT: CSECT Auxiliary Entry { 79; OBJ32-NEXT: Index: [[#NFA+14]] 80; OBJ32-NEXT: SectionLen: 0 81; OBJ32-NEXT: ParameterHashIndex: 0x0 82; OBJ32-NEXT: TypeChkSectNum: 0x0 83; OBJ32-NEXT: SymbolAlignmentLog2: 2 84; OBJ32-NEXT: SymbolType: XTY_SD (0x1) 85; OBJ32-NEXT: StorageMappingClass: XMC_TC0 (0xF) 86; OBJ32-NEXT: StabInfoIndex: 0x0 87; OBJ32-NEXT: StabSectNum: 0x0 88; OBJ32-NEXT: } 89; OBJ32-NEXT: } 90; OBJ32: Symbol { 91; OBJ32: Index: [[#NFA+15]] 92; OBJ32-NEXT: Name: i2 93; OBJ32-NEXT: Value (RelocatableAddress): 0x5C 94; OBJ32-NEXT: Section: .data 95; OBJ32-NEXT: Type: 0x0 96; OBJ32-NEXT: StorageClass: C_EXT (0x2) 97; OBJ32-NEXT: NumberOfAuxEntries: 1 98; OBJ32-NEXT: CSECT Auxiliary Entry { 99; OBJ32-NEXT: Index: [[#NFA+16]] 100; OBJ32-NEXT: SectionLen: 4 101; OBJ32-NEXT: ParameterHashIndex: 0x0 102; OBJ32-NEXT: TypeChkSectNum: 0x0 103; OBJ32-NEXT: SymbolAlignmentLog2: 2 104; OBJ32-NEXT: SymbolType: XTY_SD (0x1) 105; OBJ32-NEXT: StorageMappingClass: XMC_TD (0x10) 106; OBJ32-NEXT: StabInfoIndex: 0x0 107; OBJ32-NEXT: StabSectNum: 0x0 108; OBJ32-NEXT: } 109; OBJ32-NEXT: } 110 111; OBJ64: Relocations [ 112; OBJ64-NEXT: Section (index: 1) .text { 113; OBJ64-NEXT: 0x2 R_TOC i1([[#NFA+1]]) 0xF 114; OBJ64-NEXT: 0x26 R_TOC i2([[#NFA+15]]) 0xF 115; OBJ64-NEXT: } 116; OBJ64-NEXT: Section (index: 2) .data { 117; OBJ64-NEXT: 0x48 R_POS .read([[#NFA+5]]) 0x3F 118; OBJ64-NEXT: 0x50 R_POS TOC([[#NFA+13]]) 0x3F 119; OBJ64-NEXT: 0x60 R_POS .retptr([[#NFA+7]]) 0x3F 120; OBJ64-NEXT: 0x68 R_POS TOC([[#NFA+13]]) 0x3F 121; OBJ64-NEXT: 0x78 R_POS i1([[#NFA+1]]) 0x3F 122; OBJ64-NEXT: } 123; OBJ64-NEXT: ] 124 125; OBJ64: Symbol { 126; OBJ64: Index: [[#NFA+1]] 127; OBJ64-NEXT: Name: i1 128; OBJ64-NEXT: Value (RelocatableAddress): 0x0 129; OBJ64-NEXT: Section: N_UNDEF 130; OBJ64-NEXT: Type: 0x0 131; OBJ64-NEXT: StorageClass: C_EXT (0x2) 132; OBJ64-NEXT: NumberOfAuxEntries: 1 133; OBJ64-NEXT: CSECT Auxiliary Entry { 134; OBJ64-NEXT: Index: [[#NFA+2]] 135; OBJ64-NEXT: SectionLen: 0 136; OBJ64-NEXT: ParameterHashIndex: 0x0 137; OBJ64-NEXT: TypeChkSectNum: 0x0 138; OBJ64-NEXT: SymbolAlignmentLog2: 0 139; OBJ64-NEXT: SymbolType: XTY_ER (0x0) 140; OBJ64-NEXT: StorageMappingClass: XMC_TD (0x10) 141; OBJ64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 142; OBJ64-NEXT: } 143; OBJ64-NEXT: } 144; OBJ64: Symbol { 145; OBJ64: Index: [[#NFA+13]] 146; OBJ64-NEXT: Name: TOC 147; OBJ64-NEXT: Value (RelocatableAddress): 0x78 148; OBJ64-NEXT: Section: .data 149; OBJ64-NEXT: Type: 0x0 150; OBJ64-NEXT: StorageClass: C_HIDEXT (0x6B) 151; OBJ64-NEXT: NumberOfAuxEntries: 1 152; OBJ64-NEXT: CSECT Auxiliary Entry { 153; OBJ64-NEXT: Index: [[#NFA+14]] 154; OBJ64-NEXT: SectionLen: 0 155; OBJ64-NEXT: ParameterHashIndex: 0x0 156; OBJ64-NEXT: TypeChkSectNum: 0x0 157; OBJ64-NEXT: SymbolAlignmentLog2: 2 158; OBJ64-NEXT: SymbolType: XTY_SD (0x1) 159; OBJ64-NEXT: StorageMappingClass: XMC_TC0 (0xF) 160; OBJ64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 161; OBJ64-NEXT: } 162; OBJ64-NEXT: } 163; OBJ64: Symbol { 164; OBJ64: Index: [[#NFA+15]] 165; OBJ64-NEXT: Name: i2 166; OBJ64-NEXT: Value (RelocatableAddress): 0x78 167; OBJ64-NEXT: Section: .data 168; OBJ64-NEXT: Type: 0x0 169; OBJ64-NEXT: StorageClass: C_EXT (0x2) 170; OBJ64-NEXT: NumberOfAuxEntries: 1 171; OBJ64-NEXT: CSECT Auxiliary Entry { 172; OBJ64-NEXT: Index: [[#NFA+16]] 173; OBJ64-NEXT: SectionLen: 8 174; OBJ64-NEXT: ParameterHashIndex: 0x0 175; OBJ64-NEXT: TypeChkSectNum: 0x0 176; OBJ64-NEXT: SymbolAlignmentLog2: 3 177; OBJ64-NEXT: SymbolType: XTY_SD (0x1) 178; OBJ64-NEXT: StorageMappingClass: XMC_TD (0x10) 179; OBJ64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 180; OBJ64-NEXT: } 181; OBJ64-NEXT: } 182 183; DIS32: 00000000 <.read>: 184; DIS32-NEXT: 0: 38 62 00 00 addi 3, 2, 0 185; DIS32-NEXT: 00000002: R_TOC i1 186; DIS32: 00000024 <.retptr>: 187; DIS32-NEXT: 24: 38 62 00 00 addi 3, 2, 0 188; DIS32-NEXT: 00000026: R_TOC i2 189 190; DIS64: 0000000000000000 <.read>: 191; DIS64-NEXT: 0: 38 62 00 00 addi 3, 2, 0 192; DIS64-NEXT: 0000000000000002: R_TOC i1 193; DIS64: 0000000000000024 <.retptr>: 194; DIS64-NEXT: 24: 38 62 00 00 addi 3, 2, 0 195; DIS64-NEXT: 0000000000000026: R_TOC i2 196