1; Testing 32-bit and 64-bit exception section entries, no exception auxilliary 2; entries should be produced as no debug information is specified. 3; RUN: llc -mtriple=powerpc-ibm-aix-xcoff -mcpu=ppc -filetype=obj -o %t_32.o < %s 4; RUN: llvm-readobj --exception-section %t_32.o | FileCheck %s --check-prefix=EXCEPT 5; RUN: llvm-readobj --section-headers %t_32.o | FileCheck %s --check-prefix=READ 6; RUN: llvm-readobj --syms %t_32.o | FileCheck %s --check-prefix=SYMS 7 8; RUN: llc -mtriple=powerpc64-unknown-aix -mcpu=ppc -filetype=obj -o %t_64.o < %s 9; RUN: llvm-readobj --exception-section %t_64.o | FileCheck %s --check-prefix=EXCEPT64 10; RUN: llvm-readobj --section-headers %t_64.o | FileCheck %s --check-prefix=READ64 11; RUN: llvm-readobj --syms %t_64.o | FileCheck %s --check-prefix=SYMS64 12 13!1 = !{!"ppc-trap-reason", !"1", !"2"} 14declare void @llvm.ppc.trap(i32 %a) 15define dso_local void @sub_test() { 16 call void @llvm.ppc.trap(i32 1), !annotation !1 17 ret void 18} 19define dso_local void @test__trap_annotation(i32 %a) { 20 call void @llvm.ppc.trap(i32 %a), !annotation !1 21 call void @sub_test() 22 call void @llvm.ppc.trap(i32 %a), !annotation !1 23 ret void 24} 25 26; EXCEPT: Exception section { 27; EXCEPT-NEXT: Symbol: .sub_test 28; EXCEPT-NEXT: LangID: 0 29; EXCEPT-NEXT: Reason: 0 30; EXCEPT-NEXT: Trap Instr Addr: 0x4 31; EXCEPT-NEXT: LangID: 1 32; EXCEPT-NEXT: Reason: 2 33; EXCEPT-NEXT: Symbol: .test__trap_annotation 34; EXCEPT-NEXT: LangID: 0 35; EXCEPT-NEXT: Reason: 0 36; EXCEPT-NEXT: Trap Instr Addr: 0x3C 37; EXCEPT-NEXT: LangID: 1 38; EXCEPT-NEXT: Reason: 2 39; EXCEPT-NEXT: Trap Instr Addr: 0x44 40; EXCEPT-NEXT: LangID: 1 41; EXCEPT-NEXT: Reason: 2 42; EXCEPT-NEXT: } 43 44; There are multiple "Section {" lines in the readobj output so we need to start this READ check 45; on a unique line (Type: STYP_DATA (0x40)) so that the checks know where to start reading 46; READ: Type: STYP_DATA (0x40) 47; READ-NEXT: } 48; READ-NEXT: Section { 49; READ-NEXT: Index: 3 50; READ-NEXT: Name: .except 51; READ-NEXT: PhysicalAddress: 0x0 52; READ-NEXT: VirtualAddress: 0x0 53; READ-NEXT: Size: 0x1E 54; READ-NEXT: RawDataOffset: 0x12C 55; READ-NEXT: RelocationPointer: 0x0 56; READ-NEXT: LineNumberPointer: 0x0 57; READ-NEXT: NumberOfRelocations: 0 58; READ-NEXT: NumberOfLineNumbers: 0 59; READ-NEXT: Type: STYP_EXCEPT (0x100) 60; READ-NEXT: } 61; READ-NEXT: ] 62 63; SYMS: Index: [[#IND:]]{{.*}}{{[[:space:]] *}}Name: .sub_test 64; SYMS-NEXT: Value (RelocatableAddress): 0x0 65; SYMS-NEXT: Section: .text 66; SYMS-NEXT: Type: 0x20 67; SYMS-NEXT: StorageClass: C_EXT (0x2) 68; SYMS-NEXT: NumberOfAuxEntries: 2 69; SYMS-NEXT: Function Auxiliary Entry { 70; SYMS-NEXT: Index: [[#IND+1]] 71; SYMS-NEXT: OffsetToExceptionTable: 0x12C 72; SYMS-NEXT: SizeOfFunction: 0xC 73; SYMS-NEXT: PointerToLineNum: 0x0 74; SYMS-NEXT: SymbolIndexOfNextBeyond: [[#IND+3]] 75; SYMS-NEXT: } 76; SYMS-NEXT: CSECT Auxiliary Entry { 77; SYMS-NEXT: Index: [[#IND+2]] 78; SYMS-NEXT: ContainingCsectSymbolIndex: [[#IND-2]] 79; SYMS-NEXT: ParameterHashIndex: 0x0 80; SYMS-NEXT: TypeChkSectNum: 0x0 81; SYMS-NEXT: SymbolAlignmentLog2: 0 82; SYMS-NEXT: SymbolType: XTY_LD (0x2) 83; SYMS-NEXT: StorageMappingClass: XMC_PR (0x0) 84; SYMS-NEXT: StabInfoIndex: 0x0 85; SYMS-NEXT: StabSectNum: 0x0 86; SYMS-NEXT: } 87; SYMS-NEXT: } 88; SYMS-NEXT: Symbol { 89; SYMS-NEXT: Index: [[#IND+3]] 90; SYMS-NEXT: Name: .test__trap_annotation 91; SYMS-NEXT: Value (RelocatableAddress): 0x28 92; SYMS-NEXT: Section: .text 93; SYMS-NEXT: Type: 0x20 94; SYMS-NEXT: StorageClass: C_EXT (0x2) 95; SYMS-NEXT: NumberOfAuxEntries: 2 96; SYMS-NEXT: Function Auxiliary Entry { 97; SYMS-NEXT: Index: [[#IND+4]] 98; SYMS-NEXT: OffsetToExceptionTable: 0x138 99; SYMS-NEXT: SizeOfFunction: 0x34 100; SYMS-NEXT: PointerToLineNum: 0x0 101; SYMS-NEXT: SymbolIndexOfNextBeyond: [[#IND+6]] 102; SYMS-NEXT: } 103; SYMS-NEXT: CSECT Auxiliary Entry { 104; SYMS-NEXT: Index: [[#IND+5]] 105; SYMS-NEXT: ContainingCsectSymbolIndex: [[#IND-2]] 106; SYMS-NEXT: ParameterHashIndex: 0x0 107; SYMS-NEXT: TypeChkSectNum: 0x0 108; SYMS-NEXT: SymbolAlignmentLog2: 0 109; SYMS-NEXT: SymbolType: XTY_LD (0x2) 110; SYMS-NEXT: StorageMappingClass: XMC_PR (0x0) 111; SYMS-NEXT: StabInfoIndex: 0x0 112; SYMS-NEXT: StabSectNum: 0x0 113; SYMS-NEXT: } 114; SYMS-NEXT: } 115 116; EXCEPT64: Exception section { 117; EXCEPT64-NEXT: Symbol: .sub_test 118; EXCEPT64-NEXT: LangID: 0 119; EXCEPT64-NEXT: Reason: 0 120; EXCEPT64-NEXT: Trap Instr Addr: 0x4 121; EXCEPT64-NEXT: LangID: 1 122; EXCEPT64-NEXT: Reason: 2 123; EXCEPT64-NEXT: Symbol: .test__trap_annotation 124; EXCEPT64-NEXT: LangID: 0 125; EXCEPT64-NEXT: Reason: 0 126; EXCEPT64-NEXT: Trap Instr Addr: 0x3C 127; EXCEPT64-NEXT: LangID: 1 128; EXCEPT64-NEXT: Reason: 2 129; EXCEPT64-NEXT: Trap Instr Addr: 0x44 130; EXCEPT64-NEXT: LangID: 1 131; EXCEPT64-NEXT: Reason: 2 132; EXCEPT64-NEXT: } 133 134; READ64: Type: STYP_DATA (0x40) 135; READ64-NEXT: } 136; READ64-NEXT: Section { 137; READ64-NEXT: Index: 3 138; READ64-NEXT: Name: .except 139; READ64-NEXT: PhysicalAddress: 0x0 140; READ64-NEXT: VirtualAddress: 0x0 141; READ64-NEXT: Size: 0x32 142; READ64-NEXT: RawDataOffset: 0x1A8 143; READ64-NEXT: RelocationPointer: 0x0 144; READ64-NEXT: LineNumberPointer: 0x0 145; READ64-NEXT: NumberOfRelocations: 0 146; READ64-NEXT: NumberOfLineNumbers: 0 147; READ64-NEXT: Type: STYP_EXCEPT (0x100) 148; READ64-NEXT: } 149; READ64-NEXT: ] 150 151; SYMS64: Index: [[#IND:]]{{.*}}{{[[:space:]] *}}Name: .sub_test 152; SYMS64-NEXT: Value (RelocatableAddress): 0x0 153; SYMS64-NEXT: Section: .text 154; SYMS64-NEXT: Type: 0x0 155; SYMS64-NEXT: StorageClass: C_EXT (0x2) 156; SYMS64-NEXT: NumberOfAuxEntries: 2 157; SYMS64-NEXT: Function Auxiliary Entry { 158; SYMS64-NEXT: Index: [[#IND+1]] 159; SYMS64-NEXT: SizeOfFunction: 0x18 160; SYMS64-NEXT: PointerToLineNum: 0x0 161; SYMS64-NEXT: SymbolIndexOfNextBeyond: [[#IND+3]] 162; SYMS64-NEXT: Auxiliary Type: AUX_FCN (0xFE) 163; SYMS64-NEXT: } 164; SYMS64-NEXT: CSECT Auxiliary Entry { 165; SYMS64-NEXT: Index: [[#IND+2]] 166; SYMS64-NEXT: ContainingCsectSymbolIndex: [[#IND-2]] 167; SYMS64-NEXT: ParameterHashIndex: 0x0 168; SYMS64-NEXT: TypeChkSectNum: 0x0 169; SYMS64-NEXT: SymbolAlignmentLog2: 0 170; SYMS64-NEXT: SymbolType: XTY_LD (0x2) 171; SYMS64-NEXT: StorageMappingClass: XMC_PR (0x0) 172; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 173; SYMS64-NEXT: } 174; SYMS64-NEXT: } 175; SYMS64-NEXT: Symbol { 176; SYMS64-NEXT: Index: [[#IND+3]] 177; SYMS64-NEXT: Name: .test__trap_annotation 178; SYMS64-NEXT: Value (RelocatableAddress): 0x28 179; SYMS64-NEXT: Section: .text 180; SYMS64-NEXT: Type: 0x0 181; SYMS64-NEXT: StorageClass: C_EXT (0x2) 182; SYMS64-NEXT: NumberOfAuxEntries: 2 183; SYMS64-NEXT: Function Auxiliary Entry { 184; SYMS64-NEXT: Index: [[#IND+4]] 185; SYMS64-NEXT: SizeOfFunction: 0x68 186; SYMS64-NEXT: PointerToLineNum: 0x0 187; SYMS64-NEXT: SymbolIndexOfNextBeyond: [[#IND+6]] 188; SYMS64-NEXT: Auxiliary Type: AUX_FCN (0xFE) 189; SYMS64-NEXT: } 190; SYMS64-NEXT: CSECT Auxiliary Entry { 191; SYMS64-NEXT: Index: [[#IND+5]] 192; SYMS64-NEXT: ContainingCsectSymbolIndex: [[#IND-2]] 193; SYMS64-NEXT: ParameterHashIndex: 0x0 194; SYMS64-NEXT: TypeChkSectNum: 0x0 195; SYMS64-NEXT: SymbolAlignmentLog2: 0 196; SYMS64-NEXT: SymbolType: XTY_LD (0x2) 197; SYMS64-NEXT: StorageMappingClass: XMC_PR (0x0) 198; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) 199; SYMS64-NEXT: } 200; SYMS64-NEXT: } 201