157 lines
4.2 KiB
ArmAsm
157 lines
4.2 KiB
ArmAsm
|
@ Tests for group relocations.
|
||
|
@
|
||
|
@ Beware when editing this file: it is carefully crafted so that
|
||
|
@ specific PC- and SB-relative offsets arise.
|
||
|
@
|
||
|
@ Note that the gas tests have already checked that group relocations are
|
||
|
@ handled in the same way for local and external symbols.
|
||
|
|
||
|
@ We will place .text at 0x8000.
|
||
|
|
||
|
.text
|
||
|
.globl _start
|
||
|
|
||
|
_start:
|
||
|
@ ALU, PC-relative
|
||
|
|
||
|
@ Instructions start at .text + 0x0
|
||
|
add r0, r15, #:pc_g0:(one_group_needed_alu_pc)
|
||
|
|
||
|
@ Instructions start at .text + 0x4
|
||
|
add r0, r15, #:pc_g0_nc:(two_groups_needed_alu_pc)
|
||
|
add r0, r0, #:pc_g1:(two_groups_needed_alu_pc + 4)
|
||
|
|
||
|
@ Instructions start at .text + 0xc
|
||
|
add r0, r15, #:pc_g0_nc:(three_groups_needed_alu_pc)
|
||
|
add r0, r0, #:pc_g1_nc:(three_groups_needed_alu_pc + 4)
|
||
|
add r0, r0, #:pc_g2:(three_groups_needed_alu_pc + 8)
|
||
|
|
||
|
@ ALU, SB-relative
|
||
|
|
||
|
add r0, r0, #:sb_g0:(one_group_needed_alu_sb)
|
||
|
|
||
|
add r0, r15, #:sb_g0_nc:(two_groups_needed_alu_sb)
|
||
|
add r0, r0, #:sb_g1:(two_groups_needed_alu_sb)
|
||
|
|
||
|
add r0, r0, #:sb_g0_nc:(three_groups_needed_alu_sb)
|
||
|
add r0, r0, #:sb_g1_nc:(three_groups_needed_alu_sb)
|
||
|
add r0, r0, #:sb_g2:(three_groups_needed_alu_sb)
|
||
|
|
||
|
@ LDR, PC-relative
|
||
|
|
||
|
@ Instructions start at .text + 0x30
|
||
|
add r0, r0, #:pc_g0_nc:(two_groups_needed_ldr_pc)
|
||
|
ldr r1, [r0, #:pc_g1:(two_groups_needed_ldr_pc + 4)]
|
||
|
|
||
|
@ Instructions start at .text + 0x38
|
||
|
add r0, r0, #:pc_g0_nc:(three_groups_needed_ldr_pc)
|
||
|
add r0, r0, #:pc_g1_nc:(three_groups_needed_ldr_pc + 4)
|
||
|
ldr r1, [r0, #:pc_g2:(three_groups_needed_ldr_pc + 8)]
|
||
|
|
||
|
@ LDR, SB-relative
|
||
|
|
||
|
ldr r1, [r0, #:sb_g0:(one_group_needed_ldr_sb)]
|
||
|
|
||
|
add r0, r0, #:sb_g0_nc:(two_groups_needed_ldr_sb)
|
||
|
ldr r1, [r0, #:sb_g1:(two_groups_needed_ldr_sb)]
|
||
|
|
||
|
add r0, r0, #:sb_g0_nc:(three_groups_needed_ldr_sb)
|
||
|
add r0, r0, #:sb_g1_nc:(three_groups_needed_ldr_sb)
|
||
|
ldr r1, [r0, #:sb_g2:(three_groups_needed_ldr_sb)]
|
||
|
|
||
|
@ LDRS, PC-relative
|
||
|
|
||
|
@ Instructions start at .text + 0x5c
|
||
|
ldrd r2, [r0, #:pc_g0:(one_group_needed_ldrs_pc)]
|
||
|
|
||
|
@ Instructions start at .text + 0x60
|
||
|
add r0, r0, #:pc_g0_nc:(two_groups_needed_ldrs_pc)
|
||
|
ldrd r2, [r0, #:pc_g1:(two_groups_needed_ldrs_pc + 4)]
|
||
|
|
||
|
@ Instructions start at .text + 0x68
|
||
|
add r0, r0, #:pc_g0_nc:(three_groups_needed_ldrs_pc)
|
||
|
add r0, r0, #:pc_g1_nc:(three_groups_needed_ldrs_pc + 4)
|
||
|
ldrd r2, [r0, #:pc_g2:(three_groups_needed_ldrs_pc + 8)]
|
||
|
|
||
|
@ LDRS, SB-relative
|
||
|
|
||
|
ldrd r2, [r0, #:sb_g0:(one_group_needed_ldrs_sb)]
|
||
|
|
||
|
add r0, r0, #:sb_g0_nc:(two_groups_needed_ldrs_sb)
|
||
|
ldrd r2, [r0, #:sb_g1:(two_groups_needed_ldrs_sb)]
|
||
|
|
||
|
add r0, r0, #:sb_g0_nc:(three_groups_needed_ldrs_sb)
|
||
|
add r0, r0, #:sb_g1_nc:(three_groups_needed_ldrs_sb)
|
||
|
ldrd r2, [r0, #:sb_g2:(three_groups_needed_ldrs_sb)]
|
||
|
|
||
|
@ LDC, PC-relative
|
||
|
|
||
|
@ Instructions start at .text + 0x8c
|
||
|
ldc 0, c0, [r0, #:pc_g0:(one_group_needed_ldc_pc)]
|
||
|
|
||
|
@ Instructions start at .text + 0x90
|
||
|
add r0, r0, #:pc_g0_nc:(two_groups_needed_ldc_pc)
|
||
|
ldc 0, c0, [r0, #:pc_g1:(two_groups_needed_ldc_pc + 4)]
|
||
|
|
||
|
@ Instructions start at .text + 0x98
|
||
|
add r0, r0, #:pc_g0_nc:(three_groups_needed_ldc_pc)
|
||
|
add r0, r0, #:pc_g1_nc:(three_groups_needed_ldc_pc + 4)
|
||
|
ldc 0, c0, [r0, #:pc_g2:(three_groups_needed_ldc_pc + 8)]
|
||
|
|
||
|
@ LDC, SB-relative
|
||
|
|
||
|
ldc 0, c0, [r0, #:sb_g0:(one_group_needed_ldc_sb)]
|
||
|
|
||
|
add r0, r0, #:sb_g0_nc:(two_groups_needed_ldc_sb)
|
||
|
ldc 0, c0, [r0, #:sb_g1:(two_groups_needed_ldc_sb)]
|
||
|
|
||
|
add r0, r0, #:sb_g0_nc:(three_groups_needed_ldc_sb)
|
||
|
add r0, r0, #:sb_g1_nc:(three_groups_needed_ldc_sb)
|
||
|
ldc 0, c0, [r0, #:sb_g2:(three_groups_needed_ldc_sb)]
|
||
|
|
||
|
@ This point in the file is .text + 0xbc.
|
||
|
|
||
|
one_group_needed_alu_pc:
|
||
|
one_group_needed_ldrs_pc:
|
||
|
one_group_needed_ldc_pc:
|
||
|
mov r0, #0
|
||
|
|
||
|
@ We will place the section zero at 0x0.
|
||
|
|
||
|
.section zero
|
||
|
|
||
|
one_group_needed_alu_sb:
|
||
|
one_group_needed_ldr_sb:
|
||
|
one_group_needed_ldrs_sb:
|
||
|
one_group_needed_ldc_sb:
|
||
|
mov r0, #0
|
||
|
|
||
|
@ We will place the section alpha at 0xeef0.
|
||
|
|
||
|
.section alpha
|
||
|
|
||
|
two_groups_needed_alu_sb:
|
||
|
two_groups_needed_ldr_sb:
|
||
|
two_groups_needed_ldrs_sb:
|
||
|
two_groups_needed_ldc_sb:
|
||
|
two_groups_needed_alu_pc:
|
||
|
two_groups_needed_ldr_pc:
|
||
|
two_groups_needed_ldrs_pc:
|
||
|
two_groups_needed_ldc_pc:
|
||
|
mov r0, #0
|
||
|
|
||
|
@ We will place the section beta at 0xffeef0.
|
||
|
|
||
|
.section beta
|
||
|
|
||
|
three_groups_needed_alu_sb:
|
||
|
three_groups_needed_ldr_sb:
|
||
|
three_groups_needed_ldrs_sb:
|
||
|
three_groups_needed_ldc_sb:
|
||
|
three_groups_needed_alu_pc:
|
||
|
three_groups_needed_ldr_pc:
|
||
|
three_groups_needed_ldrs_pc:
|
||
|
three_groups_needed_ldc_pc:
|
||
|
mov r0, #0
|
||
|
|