196 lines
6.7 KiB
YAML
196 lines
6.7 KiB
YAML
# Test reading an ExceptionRecord which is referenced in different ways:
|
|
# - Relocation against base of .xdata record, immediate offset in .pdata
|
|
# (what LLVM produces)
|
|
# - Relocation against symbol in .xdata, no immediate offset in .pdata
|
|
# (what MSVC produces)
|
|
# - Combination of the two above (unlikely to occur in the wild, but for
|
|
# testing the consistency of the code)
|
|
|
|
# RUN: yaml2obj %s -o %t.obj
|
|
# RUN: llvm-readobj --unwind %t.obj | FileCheck %s
|
|
|
|
# CHECK: UnwindInformation [
|
|
# CHECK-NEXT: RuntimeFunction {
|
|
# CHECK-NEXT: Function: func (0x0)
|
|
# CHECK-NEXT: ExceptionRecord: .xdata (0x0)
|
|
# CHECK-NEXT: ExceptionData {
|
|
# CHECK-NEXT: FunctionLength: 4
|
|
# CHECK-NEXT: Version: 0
|
|
# CHECK-NEXT: ExceptionData: No
|
|
# CHECK-NEXT: EpiloguePacked: No
|
|
# CHECK-NEXT: EpilogueScopes: 0
|
|
# CHECK-NEXT: ByteCodeLength: 4
|
|
# CHECK-NEXT: Prologue [
|
|
# CHECK-NEXT: 0xd400 ; str x19, [sp, #-8]!
|
|
# CHECK-NEXT: 0xe4 ; end
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: EpilogueScopes [
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: RuntimeFunction {
|
|
# CHECK-NEXT: Function: func2 (0x4)
|
|
# CHECK-NEXT: ExceptionRecord: .xdata +0x8 (0x8)
|
|
# CHECK-NEXT: ExceptionData {
|
|
# CHECK-NEXT: FunctionLength: 4
|
|
# CHECK-NEXT: Version: 0
|
|
# CHECK-NEXT: ExceptionData: No
|
|
# CHECK-NEXT: EpiloguePacked: No
|
|
# CHECK-NEXT: EpilogueScopes: 0
|
|
# CHECK-NEXT: ByteCodeLength: 4
|
|
# CHECK-NEXT: Prologue [
|
|
# CHECK-NEXT: 0xdc01 ; str d8, [sp, #8]
|
|
# CHECK-NEXT: 0xe4 ; end
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: EpilogueScopes [
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: RuntimeFunction {
|
|
# CHECK-NEXT: Function: func3 (0x8)
|
|
# CHECK-NEXT: ExceptionRecord: func3_xdata (0x10)
|
|
# CHECK-NEXT: ExceptionData {
|
|
# CHECK-NEXT: FunctionLength: 4
|
|
# CHECK-NEXT: Version: 0
|
|
# CHECK-NEXT: ExceptionData: No
|
|
# CHECK-NEXT: EpiloguePacked: No
|
|
# CHECK-NEXT: EpilogueScopes: 0
|
|
# CHECK-NEXT: ByteCodeLength: 4
|
|
# CHECK-NEXT: Prologue [
|
|
# CHECK-NEXT: 0xe1 ; mov fp, sp
|
|
# CHECK-NEXT: 0xe4 ; end
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: EpilogueScopes [
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: RuntimeFunction {
|
|
# CHECK-NEXT: Function: func4 (0xC)
|
|
# CHECK-NEXT: ExceptionRecord: func3_xdata +0x8 (0x18)
|
|
# CHECK-NEXT: ExceptionData {
|
|
# CHECK-NEXT: FunctionLength: 4
|
|
# CHECK-NEXT: Version: 0
|
|
# CHECK-NEXT: ExceptionData: No
|
|
# CHECK-NEXT: EpiloguePacked: No
|
|
# CHECK-NEXT: EpilogueScopes: 0
|
|
# CHECK-NEXT: ByteCodeLength: 4
|
|
# CHECK-NEXT: Prologue [
|
|
# CHECK-NEXT: 0x81 ; stp x29, x30, [sp, #-16]!
|
|
# CHECK-NEXT: 0xe4 ; end
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: EpilogueScopes [
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: ]
|
|
|
|
--- !COFF
|
|
header:
|
|
Machine: IMAGE_FILE_MACHINE_ARM64
|
|
Characteristics: [ ]
|
|
sections:
|
|
- Name: .text
|
|
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
|
|
Alignment: 4
|
|
SectionData: F38F1FF8E80700FDFD030091FD7BBFA9
|
|
- Name: .xdata
|
|
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
|
|
Alignment: 4
|
|
SectionData: 01000008D400E4E301000008DC01E4E301000008E1E4E3E30100000881E4E3E3
|
|
- Name: .pdata
|
|
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
|
|
Alignment: 4
|
|
SectionData: '0000000000000000000000000800000000000000000000000000000008000000'
|
|
Relocations:
|
|
- VirtualAddress: 0
|
|
SymbolName: func
|
|
Type: IMAGE_REL_ARM64_ADDR32NB
|
|
- VirtualAddress: 4
|
|
SymbolName: .xdata
|
|
Type: IMAGE_REL_ARM64_ADDR32NB
|
|
- VirtualAddress: 8
|
|
SymbolName: func2
|
|
Type: IMAGE_REL_ARM64_ADDR32NB
|
|
- VirtualAddress: 12
|
|
SymbolName: .xdata
|
|
Type: IMAGE_REL_ARM64_ADDR32NB
|
|
- VirtualAddress: 16
|
|
SymbolName: func3
|
|
Type: IMAGE_REL_ARM64_ADDR32NB
|
|
- VirtualAddress: 20
|
|
SymbolName: func3_xdata
|
|
Type: IMAGE_REL_ARM64_ADDR32NB
|
|
- VirtualAddress: 24
|
|
SymbolName: func4
|
|
Type: IMAGE_REL_ARM64_ADDR32NB
|
|
- VirtualAddress: 28
|
|
SymbolName: func3_xdata
|
|
Type: IMAGE_REL_ARM64_ADDR32NB
|
|
symbols:
|
|
- Name: .text
|
|
Value: 0
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
SectionDefinition:
|
|
Length: 16
|
|
NumberOfRelocations: 0
|
|
NumberOfLinenumbers: 0
|
|
CheckSum: 2581817939
|
|
Number: 1
|
|
- Name: .xdata
|
|
Value: 0
|
|
SectionNumber: 2
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
SectionDefinition:
|
|
Length: 32
|
|
NumberOfRelocations: 0
|
|
NumberOfLinenumbers: 0
|
|
CheckSum: 3086971960
|
|
Number: 2
|
|
- Name: .pdata
|
|
Value: 0
|
|
SectionNumber: 3
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
SectionDefinition:
|
|
Length: 32
|
|
NumberOfRelocations: 8
|
|
NumberOfLinenumbers: 0
|
|
CheckSum: 0
|
|
Number: 3
|
|
- Name: func
|
|
Value: 0
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
- Name: func2
|
|
Value: 4
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
- Name: func3
|
|
Value: 8
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
- Name: func4
|
|
Value: 12
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
- Name: func3_xdata
|
|
Value: 16
|
|
SectionNumber: 2
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
...
|