330 lines
8.5 KiB
ArmAsm
330 lines
8.5 KiB
ArmAsm
|
@ RUN: llvm-mc -triple armv7-linux-eabi -filetype obj %s -o %t
|
||
|
@ RUN: llvm-readobj -u %t | FileCheck --check-prefixes=CHECK,SYM %s
|
||
|
|
||
|
@@ If .symtab doesn't exist, we can still dump some information.
|
||
|
@ RUN: llvm-objcopy --allow-broken-links --strip-all %t - | llvm-readobj -u - | FileCheck %s
|
||
|
|
||
|
.syntax unified
|
||
|
|
||
|
.cpu cortex-a8
|
||
|
.fpu neon
|
||
|
|
||
|
.section .personality
|
||
|
|
||
|
.type __personality,%function
|
||
|
__personality:
|
||
|
.fnstart
|
||
|
bkpt
|
||
|
.fnend
|
||
|
|
||
|
|
||
|
.section .personality0
|
||
|
|
||
|
.type personality0,%function
|
||
|
personality0:
|
||
|
.fnstart
|
||
|
bx lr
|
||
|
.fnend
|
||
|
|
||
|
|
||
|
.section .personality1
|
||
|
|
||
|
.type personality1,%function
|
||
|
personality1:
|
||
|
.fnstart
|
||
|
.pad #0x100
|
||
|
sub sp, sp, #0x100
|
||
|
.save {r0-r11}
|
||
|
push {r0-r11}
|
||
|
pop {r0-r11}
|
||
|
add sp, sp, #0x100
|
||
|
bx lr
|
||
|
.fnend
|
||
|
|
||
|
|
||
|
.section .custom_personality
|
||
|
|
||
|
.type custom_personality,%function
|
||
|
custom_personality:
|
||
|
.fnstart
|
||
|
.personality __personality
|
||
|
bx lr
|
||
|
.fnend
|
||
|
|
||
|
|
||
|
.section .opcodes
|
||
|
|
||
|
.type opcodes,%function
|
||
|
opcodes:
|
||
|
.fnstart
|
||
|
.vsave {d8-d12}
|
||
|
vpush {d8-d12}
|
||
|
vpop {d8-d12}
|
||
|
bx lr
|
||
|
.fnend
|
||
|
|
||
|
|
||
|
.section .multiple
|
||
|
|
||
|
.type function0,%function
|
||
|
function0:
|
||
|
.fnstart
|
||
|
bx lr
|
||
|
.fnend
|
||
|
|
||
|
.type function1,%function
|
||
|
function1:
|
||
|
.fnstart
|
||
|
.personality __personality
|
||
|
bx lr
|
||
|
.fnend
|
||
|
|
||
|
.type function2,%function
|
||
|
function2:
|
||
|
.fnstart
|
||
|
bx lr
|
||
|
.fnend
|
||
|
|
||
|
.section .raw
|
||
|
|
||
|
.type raw,%function
|
||
|
.thumb_func
|
||
|
raw:
|
||
|
.fnstart
|
||
|
.unwind_raw 12, 0x02
|
||
|
.unwind_raw -12, 0x42
|
||
|
.unwind_raw 0, 0x80, 0x00
|
||
|
.unwind_raw 4, 0x81, 0x00
|
||
|
.unwind_raw 4, 0x80, 0x01
|
||
|
.unwind_raw 8, 0x80, 0xc0
|
||
|
.unwind_raw 12, 0x84, 0xc0
|
||
|
.unwind_raw 0, 0x91
|
||
|
.unwind_raw 8, 0xa1
|
||
|
.unwind_raw 12, 0xa9
|
||
|
.unwind_raw 0, 0xb0
|
||
|
.unwind_raw 4, 0xb1, 0x01
|
||
|
.unwind_raw 0xa04, 0xb2, 0x80, 0x04
|
||
|
.unwind_raw 24, 0xb3, 0x12
|
||
|
.unwind_raw 24, 0xba
|
||
|
.unwind_raw 24, 0xc2
|
||
|
.unwind_raw 24, 0xc6, 0x02
|
||
|
.unwind_raw 8, 0xc7, 0x03
|
||
|
.unwind_raw 24, 0xc8, 0x02
|
||
|
.unwind_raw 24, 0xc9, 0x02
|
||
|
.unwind_raw 64, 0xd7
|
||
|
.fnend
|
||
|
|
||
|
.section .spare
|
||
|
|
||
|
.type spare,%function
|
||
|
spare:
|
||
|
.fnstart
|
||
|
.unwind_raw 4, 0x00
|
||
|
.unwind_raw -4, 0x40
|
||
|
.unwind_raw 0, 0x80, 0x00
|
||
|
.unwind_raw 4, 0x88, 0x00
|
||
|
.unwind_raw 0, 0x91
|
||
|
.unwind_raw 0, 0x9d
|
||
|
.unwind_raw 0, 0x9f
|
||
|
.unwind_raw 0, 0xa0
|
||
|
.unwind_raw 0, 0xa8
|
||
|
.unwind_raw 0, 0xb0
|
||
|
.unwind_raw 0, 0xb1, 0x00
|
||
|
.unwind_raw 4, 0xb1, 0x01
|
||
|
.unwind_raw 0, 0xb1, 0x10
|
||
|
.unwind_raw 0x204, 0xb2, 0x00
|
||
|
.unwind_raw 16, 0xb3, 0x00
|
||
|
.unwind_raw 0, 0xb4
|
||
|
.unwind_raw 16, 0xb8
|
||
|
.unwind_raw 4, 0xc0
|
||
|
.unwind_raw 4, 0xc6, 0x00
|
||
|
.unwind_raw 4, 0xc7, 0x00
|
||
|
.unwind_raw 4, 0xc7, 0x01
|
||
|
.unwind_raw 0, 0xc7, 0x10
|
||
|
.unwind_raw 16, 0xc8, 0x00
|
||
|
.unwind_raw 16, 0xc9, 0x00
|
||
|
.unwind_raw 0, 0xca
|
||
|
.unwind_raw 16, 0xd0
|
||
|
.unwind_raw 0, 0xd8
|
||
|
.fnend
|
||
|
|
||
|
@ CHECK: UnwindInformation {
|
||
|
@ CHECK: UnwindIndexTable {
|
||
|
@ CHECK: SectionName: .ARM.exidx.personality
|
||
|
@ CHECK: Entries [
|
||
|
@ CHECK: Entry {
|
||
|
@ CHECK: FunctionAddress: 0x0
|
||
|
@ SYM: FunctionName: __personality
|
||
|
@ CHECK: Model: Compact (Inline)
|
||
|
@ CHECK: PersonalityIndex: 0
|
||
|
@ CHECK: Opcodes [
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: UnwindIndexTable {
|
||
|
@ CHECK: SectionName: .ARM.exidx.personality0
|
||
|
@ CHECK: Entries [
|
||
|
@ CHECK: Entry {
|
||
|
@ CHECK: FunctionAddress: 0x0
|
||
|
@ SYM: FunctionName: personality0
|
||
|
@ CHECK: Model: Compact (Inline)
|
||
|
@ CHECK: PersonalityIndex: 0
|
||
|
@ CHECK: Opcodes [
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: UnwindIndexTable {
|
||
|
@ CHECK: SectionName: .ARM.exidx.personality1
|
||
|
@ CHECK: Entries [
|
||
|
@ CHECK: Entry {
|
||
|
@ CHECK: FunctionAddress: 0x0
|
||
|
@ SYM: FunctionName: personality1
|
||
|
@ SYM: ExceptionHandlingTable: .ARM.extab.personality1
|
||
|
@ SYM: TableEntryOffset: 0x0
|
||
|
@ SYM: Model: Compact
|
||
|
@ SYM: PersonalityIndex: 1
|
||
|
@ SYM: Opcodes [
|
||
|
@ SYM: 0xB1 0x0F ; pop {r0, r1, r2, r3}
|
||
|
@ SYM: 0xA7 ; pop {r4, r5, r6, r7, r8, r9, r10, fp}
|
||
|
@ SYM: 0x3F ; vsp = vsp + 256
|
||
|
@ SYM: 0xB0 ; finish
|
||
|
@ SYM: 0xB0 ; finish
|
||
|
@ SYM: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: UnwindIndexTable {
|
||
|
@ CHECK: SectionName: .ARM.exidx.custom_personality
|
||
|
@ CHECK: Entries [
|
||
|
@ CHECK: Entry {
|
||
|
@ CHECK: FunctionAddress: 0x0
|
||
|
@ SYM: FunctionName: custom_personality
|
||
|
@ SYM: ExceptionHandlingTable: .ARM.extab.custom_personality
|
||
|
@ SYM: TableEntryOffset: 0x0
|
||
|
@ SYM: Model: Generic
|
||
|
@ SYM: PersonalityRoutineAddress: 0x0
|
||
|
@ CHECK: }
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: UnwindIndexTable {
|
||
|
@ CHECK: SectionName: .ARM.exidx.opcodes
|
||
|
@ CHECK: Entries [
|
||
|
@ CHECK: Entry {
|
||
|
@ CHECK: FunctionAddress: 0x0
|
||
|
@ SYM: FunctionName: opcodes
|
||
|
@ CHECK: Model: Compact (Inline)
|
||
|
@ CHECK: PersonalityIndex: 0
|
||
|
@ CHECK: Opcodes [
|
||
|
@ CHECK: 0xC9 0x84 ; pop {d8, d9, d10, d11, d12}
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: UnwindIndexTable {
|
||
|
@ CHECK: SectionName: .ARM.exidx.multiple
|
||
|
@ CHECK: Entries [
|
||
|
@ CHECK: Entry {
|
||
|
@ CHECK: FunctionAddress: 0x0
|
||
|
@ SYM: FunctionName: function0
|
||
|
@ CHECK: Model: Compact (Inline)
|
||
|
@ CHECK: PersonalityIndex: 0
|
||
|
@ CHECK: Opcodes [
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: Entry {
|
||
|
@ CHECK: FunctionAddress: 0x4
|
||
|
@ SYM: FunctionName: function1
|
||
|
@ SYM: ExceptionHandlingTable: .ARM.extab.multiple
|
||
|
@ SYM: Model: Generic
|
||
|
@ SYM: PersonalityRoutineAddress: 0x0
|
||
|
@ CHECK: }
|
||
|
@ CHECK: Entry {
|
||
|
@ CHECK: FunctionAddress: 0x8
|
||
|
@ SYM: FunctionName: function2
|
||
|
@ CHECK: Model: Compact (Inline)
|
||
|
@ CHECK: PersonalityIndex: 0
|
||
|
@ CHECK: Opcodes [
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: 0xB0 ; finish
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: UnwindIndexTable {
|
||
|
@ CHECK: SectionName: .ARM.exidx.raw
|
||
|
@ CHECK: Entries [
|
||
|
@ SYM: Opcodes [
|
||
|
@ SYM: 0xD7 ; pop {d8, d9, d10, d11, d12, d13, d14, d15}
|
||
|
@ SYM: 0xC9 0x02 ; pop {d0, d1, d2}
|
||
|
@ SYM: 0xC8 0x02 ; pop {d16, d17, d18}
|
||
|
@ SYM: 0xC7 0x03 ; pop {wCGR0, wCGR1}
|
||
|
@ SYM: 0xC6 0x02 ; pop {wR0, wR1, wR2}
|
||
|
@ SYM: 0xC2 ; pop {wR10, wR11, wR12}
|
||
|
@ SYM: 0xBA ; pop {d8, d9, d10}
|
||
|
@ SYM: 0xB3 0x12 ; pop {d1, d2, d3}
|
||
|
@ SYM: 0xB2 0x80 0x04 ; vsp = vsp + 2564
|
||
|
@ SYM: 0xB1 0x01 ; pop {r0}
|
||
|
@ SYM: 0xB0 ; finish
|
||
|
@ SYM: 0xA9 ; pop {r4, r5, lr}
|
||
|
@ SYM: 0xA1 ; pop {r4, r5}
|
||
|
@ SYM: 0x91 ; vsp = r1
|
||
|
@ SYM: 0x84 0xC0 ; pop {r10, fp, lr}
|
||
|
@ SYM: 0x80 0xC0 ; pop {r10, fp}
|
||
|
@ SYM: 0x80 0x01 ; pop {r4}
|
||
|
@ SYM: 0x81 0x00 ; pop {ip}
|
||
|
@ SYM: 0x80 0x00 ; refuse to unwind
|
||
|
@ SYM: 0x42 ; vsp = vsp - 12
|
||
|
@ SYM: 0x02 ; vsp = vsp + 12
|
||
|
@ SYM: ]
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: UnwindIndexTable {
|
||
|
@ CHECK: SectionName: .ARM.exidx.spare
|
||
|
@ CHECK: Entries [
|
||
|
@ SYM: Opcodes [
|
||
|
@ SYM: 0xD8 ; spare
|
||
|
@ SYM: 0xD0 ; pop {d8}
|
||
|
@ SYM: 0xCA ; spare
|
||
|
@ SYM: 0xC9 0x00 ; pop {d0}
|
||
|
@ SYM: 0xC8 0x00 ; pop {d16}
|
||
|
@ SYM: 0xC7 0x10 ; spare
|
||
|
@ SYM: 0xC7 0x01 ; pop {wCGR0}
|
||
|
@ SYM: 0xC7 0x00 ; spare
|
||
|
@ SYM: 0xC6 0x00 ; pop {wR0}
|
||
|
@ SYM: 0xC0 ; pop {wR10}
|
||
|
@ SYM: 0xB8 ; pop {d8}
|
||
|
@ SYM: 0xB4 ; spare
|
||
|
@ SYM: 0xB3 0x00 ; pop {d0}
|
||
|
@ SYM: 0xB2 0x00 ; vsp = vsp + 516
|
||
|
@ SYM: 0xB1 0x10 ; spare
|
||
|
@ SYM: 0xB1 0x01 ; pop {r0}
|
||
|
@ SYM: 0xB1 0x00 ; spare
|
||
|
@ SYM: 0xB0 ; finish
|
||
|
@ SYM: 0xA8 ; pop {r4, lr}
|
||
|
@ SYM: 0xA0 ; pop {r4}
|
||
|
@ SYM: 0x9F ; reserved (WiMMX MOVrr)
|
||
|
@ SYM: 0x9D ; reserved (ARM MOVrr)
|
||
|
@ SYM: 0x91 ; vsp = r1
|
||
|
@ SYM: 0x88 0x00 ; pop {pc}
|
||
|
@ SYM: 0x80 0x00 ; refuse to unwind
|
||
|
@ SYM: 0x40 ; vsp = vsp - 4
|
||
|
@ SYM: 0x00 ; vsp = vsp + 4
|
||
|
@ SYM: ]
|
||
|
@ CHECK: ]
|
||
|
@ CHECK: }
|
||
|
@ CHECK: }
|
||
|
|