| ; Testing 32-bit and 64-bit exception section entries, no exception auxilliary | |
| ; entries should be produced as no debug information is specified. | |
| ; RUN: llc -mtriple=powerpc-ibm-aix-xcoff -mcpu=ppc -filetype=obj -o %t_32.o < %s | |
| ; RUN: llvm-readobj --exception-section %t_32.o | FileCheck %s --check-prefix=EXCEPT | |
| ; RUN: llvm-readobj --section-headers %t_32.o | FileCheck %s --check-prefix=READ | |
| ; RUN: llvm-readobj --syms %t_32.o | FileCheck %s --check-prefix=SYMS | |
| ; RUN: llc -mtriple=powerpc64-unknown-aix -mcpu=ppc -filetype=obj -o %t_64.o < %s | |
| ; RUN: llvm-readobj --exception-section %t_64.o | FileCheck %s --check-prefix=EXCEPT64 | |
| ; RUN: llvm-readobj --section-headers %t_64.o | FileCheck %s --check-prefix=READ64 | |
| ; RUN: llvm-readobj --syms %t_64.o | FileCheck %s --check-prefix=SYMS64 | |
| !1 = !{!"ppc-trap-reason", !"1", !"2"} | |
| declare void @llvm.ppc.trap(i32 %a) | |
| define dso_local void @sub_test() { | |
| call void @llvm.ppc.trap(i32 1), !annotation !1 | |
| ret void | |
| } | |
| define dso_local void @test__trap_annotation(i32 %a) { | |
| call void @llvm.ppc.trap(i32 %a), !annotation !1 | |
| call void @sub_test() | |
| call void @llvm.ppc.trap(i32 %a), !annotation !1 | |
| ret void | |
| } | |
| ; EXCEPT: Exception section { | |
| ; EXCEPT-NEXT: Symbol: .sub_test | |
| ; EXCEPT-NEXT: LangID: 0 | |
| ; EXCEPT-NEXT: Reason: 0 | |
| ; EXCEPT-NEXT: Trap Instr Addr: 0x4 | |
| ; EXCEPT-NEXT: LangID: 1 | |
| ; EXCEPT-NEXT: Reason: 2 | |
| ; EXCEPT-NEXT: Symbol: .test__trap_annotation | |
| ; EXCEPT-NEXT: LangID: 0 | |
| ; EXCEPT-NEXT: Reason: 0 | |
| ; EXCEPT-NEXT: Trap Instr Addr: 0x3C | |
| ; EXCEPT-NEXT: LangID: 1 | |
| ; EXCEPT-NEXT: Reason: 2 | |
| ; EXCEPT-NEXT: Trap Instr Addr: 0x44 | |
| ; EXCEPT-NEXT: LangID: 1 | |
| ; EXCEPT-NEXT: Reason: 2 | |
| ; EXCEPT-NEXT: } | |
| ; There are multiple "Section {" lines in the readobj output so we need to start this READ check | |
| ; on a unique line (Type: STYP_DATA (0x40)) so that the checks know where to start reading | |
| ; READ: Type: STYP_DATA (0x40) | |
| ; READ-NEXT: } | |
| ; READ-NEXT: Section { | |
| ; READ-NEXT: Index: 3 | |
| ; READ-NEXT: Name: .except | |
| ; READ-NEXT: PhysicalAddress: 0x0 | |
| ; READ-NEXT: VirtualAddress: 0x0 | |
| ; READ-NEXT: Size: 0x1E | |
| ; READ-NEXT: RawDataOffset: 0x12C | |
| ; READ-NEXT: RelocationPointer: 0x0 | |
| ; READ-NEXT: LineNumberPointer: 0x0 | |
| ; READ-NEXT: NumberOfRelocations: 0 | |
| ; READ-NEXT: NumberOfLineNumbers: 0 | |
| ; READ-NEXT: Type: STYP_EXCEPT (0x100) | |
| ; READ-NEXT: } | |
| ; READ-NEXT: ] | |
| ; SYMS: Index: [[#IND:]]{{.*}}{{[[:space:]] *}}Name: .sub_test | |
| ; SYMS-NEXT: Value (RelocatableAddress): 0x0 | |
| ; SYMS-NEXT: Section: .text | |
| ; SYMS-NEXT: Type: 0x20 | |
| ; SYMS-NEXT: StorageClass: C_EXT (0x2) | |
| ; SYMS-NEXT: NumberOfAuxEntries: 2 | |
| ; SYMS-NEXT: Function Auxiliary Entry { | |
| ; SYMS-NEXT: Index: [[#IND+1]] | |
| ; SYMS-NEXT: OffsetToExceptionTable: 0x12C | |
| ; SYMS-NEXT: SizeOfFunction: 0xC | |
| ; SYMS-NEXT: PointerToLineNum: 0x0 | |
| ; SYMS-NEXT: SymbolIndexOfNextBeyond: [[#IND+3]] | |
| ; SYMS-NEXT: } | |
| ; SYMS-NEXT: CSECT Auxiliary Entry { | |
| ; SYMS-NEXT: Index: [[#IND+2]] | |
| ; SYMS-NEXT: ContainingCsectSymbolIndex: [[#IND-2]] | |
| ; SYMS-NEXT: ParameterHashIndex: 0x0 | |
| ; SYMS-NEXT: TypeChkSectNum: 0x0 | |
| ; SYMS-NEXT: SymbolAlignmentLog2: 0 | |
| ; SYMS-NEXT: SymbolType: XTY_LD (0x2) | |
| ; SYMS-NEXT: StorageMappingClass: XMC_PR (0x0) | |
| ; SYMS-NEXT: StabInfoIndex: 0x0 | |
| ; SYMS-NEXT: StabSectNum: 0x0 | |
| ; SYMS-NEXT: } | |
| ; SYMS-NEXT: } | |
| ; SYMS-NEXT: Symbol { | |
| ; SYMS-NEXT: Index: [[#IND+3]] | |
| ; SYMS-NEXT: Name: .test__trap_annotation | |
| ; SYMS-NEXT: Value (RelocatableAddress): 0x28 | |
| ; SYMS-NEXT: Section: .text | |
| ; SYMS-NEXT: Type: 0x20 | |
| ; SYMS-NEXT: StorageClass: C_EXT (0x2) | |
| ; SYMS-NEXT: NumberOfAuxEntries: 2 | |
| ; SYMS-NEXT: Function Auxiliary Entry { | |
| ; SYMS-NEXT: Index: [[#IND+4]] | |
| ; SYMS-NEXT: OffsetToExceptionTable: 0x138 | |
| ; SYMS-NEXT: SizeOfFunction: 0x34 | |
| ; SYMS-NEXT: PointerToLineNum: 0x0 | |
| ; SYMS-NEXT: SymbolIndexOfNextBeyond: [[#IND+6]] | |
| ; SYMS-NEXT: } | |
| ; SYMS-NEXT: CSECT Auxiliary Entry { | |
| ; SYMS-NEXT: Index: [[#IND+5]] | |
| ; SYMS-NEXT: ContainingCsectSymbolIndex: [[#IND-2]] | |
| ; SYMS-NEXT: ParameterHashIndex: 0x0 | |
| ; SYMS-NEXT: TypeChkSectNum: 0x0 | |
| ; SYMS-NEXT: SymbolAlignmentLog2: 0 | |
| ; SYMS-NEXT: SymbolType: XTY_LD (0x2) | |
| ; SYMS-NEXT: StorageMappingClass: XMC_PR (0x0) | |
| ; SYMS-NEXT: StabInfoIndex: 0x0 | |
| ; SYMS-NEXT: StabSectNum: 0x0 | |
| ; SYMS-NEXT: } | |
| ; SYMS-NEXT: } | |
| ; EXCEPT64: Exception section { | |
| ; EXCEPT64-NEXT: Symbol: .sub_test | |
| ; EXCEPT64-NEXT: LangID: 0 | |
| ; EXCEPT64-NEXT: Reason: 0 | |
| ; EXCEPT64-NEXT: Trap Instr Addr: 0x4 | |
| ; EXCEPT64-NEXT: LangID: 1 | |
| ; EXCEPT64-NEXT: Reason: 2 | |
| ; EXCEPT64-NEXT: Symbol: .test__trap_annotation | |
| ; EXCEPT64-NEXT: LangID: 0 | |
| ; EXCEPT64-NEXT: Reason: 0 | |
| ; EXCEPT64-NEXT: Trap Instr Addr: 0x3C | |
| ; EXCEPT64-NEXT: LangID: 1 | |
| ; EXCEPT64-NEXT: Reason: 2 | |
| ; EXCEPT64-NEXT: Trap Instr Addr: 0x44 | |
| ; EXCEPT64-NEXT: LangID: 1 | |
| ; EXCEPT64-NEXT: Reason: 2 | |
| ; EXCEPT64-NEXT: } | |
| ; READ64: Type: STYP_DATA (0x40) | |
| ; READ64-NEXT: } | |
| ; READ64-NEXT: Section { | |
| ; READ64-NEXT: Index: 3 | |
| ; READ64-NEXT: Name: .except | |
| ; READ64-NEXT: PhysicalAddress: 0x0 | |
| ; READ64-NEXT: VirtualAddress: 0x0 | |
| ; READ64-NEXT: Size: 0x32 | |
| ; READ64-NEXT: RawDataOffset: 0x1A8 | |
| ; READ64-NEXT: RelocationPointer: 0x0 | |
| ; READ64-NEXT: LineNumberPointer: 0x0 | |
| ; READ64-NEXT: NumberOfRelocations: 0 | |
| ; READ64-NEXT: NumberOfLineNumbers: 0 | |
| ; READ64-NEXT: Type: STYP_EXCEPT (0x100) | |
| ; READ64-NEXT: } | |
| ; READ64-NEXT: ] | |
| ; SYMS64: Index: [[#IND:]]{{.*}}{{[[:space:]] *}}Name: .sub_test | |
| ; SYMS64-NEXT: Value (RelocatableAddress): 0x0 | |
| ; SYMS64-NEXT: Section: .text | |
| ; SYMS64-NEXT: Type: 0x0 | |
| ; SYMS64-NEXT: StorageClass: C_EXT (0x2) | |
| ; SYMS64-NEXT: NumberOfAuxEntries: 2 | |
| ; SYMS64-NEXT: Function Auxiliary Entry { | |
| ; SYMS64-NEXT: Index: [[#IND+1]] | |
| ; SYMS64-NEXT: SizeOfFunction: 0x18 | |
| ; SYMS64-NEXT: PointerToLineNum: 0x0 | |
| ; SYMS64-NEXT: SymbolIndexOfNextBeyond: [[#IND+3]] | |
| ; SYMS64-NEXT: Auxiliary Type: AUX_FCN (0xFE) | |
| ; SYMS64-NEXT: } | |
| ; SYMS64-NEXT: CSECT Auxiliary Entry { | |
| ; SYMS64-NEXT: Index: [[#IND+2]] | |
| ; SYMS64-NEXT: ContainingCsectSymbolIndex: [[#IND-2]] | |
| ; SYMS64-NEXT: ParameterHashIndex: 0x0 | |
| ; SYMS64-NEXT: TypeChkSectNum: 0x0 | |
| ; SYMS64-NEXT: SymbolAlignmentLog2: 0 | |
| ; SYMS64-NEXT: SymbolType: XTY_LD (0x2) | |
| ; SYMS64-NEXT: StorageMappingClass: XMC_PR (0x0) | |
| ; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) | |
| ; SYMS64-NEXT: } | |
| ; SYMS64-NEXT: } | |
| ; SYMS64-NEXT: Symbol { | |
| ; SYMS64-NEXT: Index: [[#IND+3]] | |
| ; SYMS64-NEXT: Name: .test__trap_annotation | |
| ; SYMS64-NEXT: Value (RelocatableAddress): 0x28 | |
| ; SYMS64-NEXT: Section: .text | |
| ; SYMS64-NEXT: Type: 0x0 | |
| ; SYMS64-NEXT: StorageClass: C_EXT (0x2) | |
| ; SYMS64-NEXT: NumberOfAuxEntries: 2 | |
| ; SYMS64-NEXT: Function Auxiliary Entry { | |
| ; SYMS64-NEXT: Index: [[#IND+4]] | |
| ; SYMS64-NEXT: SizeOfFunction: 0x68 | |
| ; SYMS64-NEXT: PointerToLineNum: 0x0 | |
| ; SYMS64-NEXT: SymbolIndexOfNextBeyond: [[#IND+6]] | |
| ; SYMS64-NEXT: Auxiliary Type: AUX_FCN (0xFE) | |
| ; SYMS64-NEXT: } | |
| ; SYMS64-NEXT: CSECT Auxiliary Entry { | |
| ; SYMS64-NEXT: Index: [[#IND+5]] | |
| ; SYMS64-NEXT: ContainingCsectSymbolIndex: [[#IND-2]] | |
| ; SYMS64-NEXT: ParameterHashIndex: 0x0 | |
| ; SYMS64-NEXT: TypeChkSectNum: 0x0 | |
| ; SYMS64-NEXT: SymbolAlignmentLog2: 0 | |
| ; SYMS64-NEXT: SymbolType: XTY_LD (0x2) | |
| ; SYMS64-NEXT: StorageMappingClass: XMC_PR (0x0) | |
| ; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) | |
| ; SYMS64-NEXT: } | |
| ; SYMS64-NEXT: } |