| @ 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 |
| |