## Check that we dump the unwind information for a non-relocatable input properly. ## Check that we correctly decode function addresses and that we are able to ## locate corresponding STT_FUNC symbols and dump function names properly. # RUN: yaml2obj %s -o %t # RUN: llvm-readobj -u %t | FileCheck --check-prefix=UNWIND %s # RUN: llvm-readelf -u %t | FileCheck --check-prefix=UNWIND %s # UNWIND: UnwindInformation { # UNWIND-NEXT: UnwindIndexTable { # UNWIND-NEXT: SectionIndex: 2 # UNWIND-NEXT: SectionName: .ARM.exidx # UNWIND-NEXT: SectionOffset: 0x34 # UNWIND-NEXT: Entries [ # UNWIND-NEXT: Entry { # UNWIND-NEXT: FunctionAddress: 0x230 # UNWIND-NEXT: FunctionName: func1 # UNWIND-NEXT: Model: Compact (Inline) # UNWIND-NEXT: PersonalityIndex: 0 # UNWIND-NEXT: Opcodes [ # UNWIND-NEXT: 0xB0 ; finish # UNWIND-NEXT: 0xB0 ; finish # UNWIND-NEXT: 0xB0 ; finish # UNWIND-NEXT: ] # UNWIND-NEXT: } # UNWIND-NEXT: Entry { # UNWIND-NEXT: FunctionAddress: 0x234 # UNWIND-NEXT: FunctionName: func2 # UNWIND-NEXT: Model: Compact (Inline) # UNWIND-NEXT: PersonalityIndex: 0 # UNWIND-NEXT: Opcodes [ # UNWIND-NEXT: 0x9B ; vsp = r11 # UNWIND-NEXT: 0x84 0x80 ; pop {fp, lr} # UNWIND-NEXT: ] # UNWIND-NEXT: } # UNWIND-NEXT: Entry { # UNWIND-NEXT: FunctionAddress: 0x248 # UNWIND-NEXT: FunctionName: func3 # UNWIND-NEXT: Model: Compact (Inline) # UNWIND-NEXT: PersonalityIndex: 0 # UNWIND-NEXT: Opcodes [ # UNWIND-NEXT: 0xB0 ; finish # UNWIND-NEXT: 0xB0 ; finish # UNWIND-NEXT: 0xB0 ; finish # UNWIND-NEXT: ] # UNWIND-NEXT: } # UNWIND-NEXT: Entry { # UNWIND-NEXT: FunctionAddress: 0x24C # UNWIND-NEXT: Model: CantUnwind # UNWIND-NEXT: } # UNWIND-NEXT: Entry { # UNWIND-NEXT: FunctionAddress: 0x4000026B # UNWIND-NEXT: FunctionName: func4 # UNWIND-NEXT: Model: Compact (Inline) # UNWIND-NEXT: PersonalityIndex: 0 # UNWIND-NEXT: Opcodes [ # UNWIND-NEXT: 0xB0 ; finish # UNWIND-NEXT: 0xB0 ; finish # UNWIND-NEXT: 0xB0 ; finish # UNWIND-NEXT: ] # UNWIND-NEXT: } # UNWIND-NEXT: Entry { # UNWIND-NEXT: FunctionAddress: 0x25C # UNWIND-NEXT: FunctionName: func5 # UNWIND-NEXT: ExceptionHandlingTable: .ARM.extab # UNWIND-NEXT: TableEntryAddress: 0xAABE44 # UNWIND-NEXT: Model: Generic # UNWIND-NEXT: PersonalityRoutineAddress: 0x33CCCF44 # UNWIND-NEXT: PersonalityRoutineName: personality1 # UNWIND-NEXT: } # UNWIND-NEXT: Entry { # UNWIND-NEXT: FunctionAddress: 0x25C # UNWIND-NEXT: FunctionName: func5 # UNWIND-NEXT: ExceptionHandlingTable: .ARM.extab # UNWIND-NEXT: TableEntryAddress: 0xAABE48 # UNWIND-NEXT: Model: Generic # UNWIND-NEXT: PersonalityRoutineAddress: 0xFFFFFFFFF811138C # UNWIND-NEXT: } # UNWIND-NEXT: ] # UNWIND-NEXT: } # UNWIND-NEXT: } --- !ELF FileHeader: Class: ELFCLASS32 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_ARM Sections: - Name: .text Type: SHT_PROGBITS Address: 0x230 - Name: .ARM.exidx Type: SHT_ARM_EXIDX Address: 0x24C Entries: ## A. Address of .ARM.exidx (0x24C) + entry offset (0) + 0x7fffffe4 (31 bit) == 0x230 (func1). - Offset: 0x7FFFFFE4 Value: 0x80B0B0B0 ## arbitrary opcodes. ## B. Address of .ARM.exidx (0x24C) + entry offset (8) + 0x7fffffe0 (31 bit) == 0x234 (func2). - Offset: 0x7FFFFFE0 Value: 0x809B8480 ## arbitrary opcodes. ## C. Address of .ARM.exidx (0x24C) + entry offset (16) + 0x7fffffec (31 bit) == 0x248 (func3). - Offset: 0x7FFFFFEC Value: 0x80B0B0B0 ## arbitrary opcodes. ## D. Address of .ARM.exidx (0x24C) + entry offset (24) + 0x7fffffe8 (31 bit) == 0x24C. - Offset: 0x7FFFFFE8 Value: EXIDX_CANTUNWIND ## E. Address of .ARM.exidx (0x24C) + entry offset (32) + 0x3FFFFFFF (31 bit) == 0x4000026b (func4). - Offset: 0x3FFFFFFF Value: 0x80B0B0B0 ## arbitrary opcodes. ## F. Address of .ARM.exidx (0x24C) + entry offset (40) + 0x7FFFFFE8 (31 bit) == 0x25c (func5). - Offset: 0x7FFFFFE8 ## Generic model. .ARM.exidx (0x24C) + entry offset (40 + 4) + 0x00AABBCC == ## 0x00AABE44 == address of entry [0] in the .ARM.extab section. ## 0x00AABE44 + 0x33221100 (31 bit, signed, .ARM.extab entry [0] value) == ## 0x33cccf44 == personality1 routine address. Value: 0x00AABBCC ## G. Address of .ARM.exidx (0x24C) + entry offset (48) + 0x7FFFFFE0 (31 bit) == 0x25c (func5). - Offset: 0x7FFFFFE0 ## Generic model. .ARM.exidx (0x24C) + entry offset (48 + 4) + 0x00AABBC8 == ## 0x00AABE48 == address of entry [1] in the .ARM.extab section. ## 0x00AABE48 + 0x77665544 (31 bit, signed, .ARM.extab entry [1] value) == ## 0xFFFFFFFFF811138C == the address of a personality routine function that does not exist. Value: 0x00AABBC8 - Name: .ARM.extab Type: SHT_PROGBITS Address: 0x00AABE44 Content: "0011223344556677" Symbols: - Name: func1 Type: STT_FUNC Section: .text Value: 0x230 - Name: func2 Type: STT_FUNC Section: .text Value: 0x234 - Name: func3 Type: STT_FUNC Section: .text Value: 0x248 - Name: func4 Type: STT_FUNC Section: .text Value: 0x4000026b - Name: func5 Type: STT_FUNC Section: .text Value: 0x25c - Name: personality1 Type: STT_FUNC Value: 0x33cccf44