279 lines · plain
1// REQUIRES: arm2// RUN: llvm-mc -filetype=obj -triple=armv7a-unknown-linux-gnueabi %s -o %t3// RUN: ld.lld %t -o %t24// RUN: llvm-objdump --no-print-imm-hex -d %t2 --triple=armv7a-unknown-linux-gnueabi --no-show-raw-insn | FileCheck %s5// RUN: llvm-mc -filetype=obj -triple=thumbv7a-unknown-linux-gnueabi %s -o %t36// RUN: ld.lld %t3 -o %t47// RUN: llvm-objdump --no-print-imm-hex -d %t4 --triple=thumbv7a-unknown-linux-gnueabi --no-show-raw-insn | FileCheck %s8 9// RUN: llvm-mc -filetype=obj -triple=armv7aeb-unknown-linux-gnueabi -mcpu=cortex-a8 %s -o %t10// RUN: ld.lld %t -o %t211// RUN: llvm-objdump --no-print-imm-hex -d %t2 --triple=armv7aeb-unknown-linux-gnueabi --no-show-raw-insn | FileCheck %s12// RUN: llvm-mc -filetype=obj -triple=thumbv7aeb-unknown-linux-gnueabi -mcpu=cortex-a8 %s -o %t313// RUN: ld.lld %t3 -o %t414// RUN: llvm-objdump --no-print-imm-hex -d %t4 --triple=thumbv7aeb-unknown-linux-gnueabi --no-show-raw-insn | FileCheck %s15 16// RUN: ld.lld --be8 %t -o %t217// RUN: llvm-objdump --no-print-imm-hex -d %t2 --triple=armv7aeb-unknown-linux-gnueabi --no-show-raw-insn | FileCheck %s18// RUN: ld.lld --be8 %t3 -o %t419// RUN: llvm-objdump --no-print-imm-hex -d %t4 --triple=thumbv7aeb-unknown-linux-gnueabi --no-show-raw-insn | FileCheck %s20 21/// Test the following relocation pairs:22/// * R_ARM_MOVW_ABS_NC and R_ARM_MOVT_ABS23/// * R_ARM_MOVW_PREL_NC and R_ARM_MOVT_PREL24/// * R_ARM_MOVW_BREL_NC and R_ARM_MOVT_BREL25///26/// * R_ARM_THM_MOVW_ABS_NC and R_ARM_THM_MOVT_ABS27/// * R_ARM_THM_MOVW_PREL_NC and R_ARM_THM_MOVT_PREL28/// * R_ARM_THM_MOVW_BREL_NC and R_ARM_THM_MOVT_BREL29 30 .syntax unified31 .globl _start32 .align 1233_start:34 .section .R_ARM_MOVW_ABS_NC, "ax",%progbits35 .align 836 movw r0, :lower16:label37 movw r1, :lower16:label138 movw r2, :lower16:label2 + 439 movw r3, :lower16:label340 movw r4, :lower16:label3 + 441// CHECK-LABEL: Disassembly of section .R_ARM_MOVW_ABS_NC42// CHECK-EMPTY:43// CHECK: 21000: movw r0, #044// CHECK: movw r1, #445// CHECK: movw r2, #1246// CHECK: movw r3, #6553247/// :lower16:label3 + 4 = :lower16:0x30000 = 048// CHECK: movw r4, #049 50 .section .R_ARM_MOVT_ABS, "ax",%progbits51 .align 852 movt r0, :upper16:label53 movt r1, :upper16:label154 movt r2, :upper16:label2 + 455 movt r3, :upper16:label356 movt r4, :upper16:label3 + 457// CHECK-LABEL: Disassembly of section .R_ARM_MOVT_ABS58// CHECK-EMPTY:59// CHECK: 21100: movt r0, #460// CHECK: movt r1, #461// CHECK: movt r2, #462// CHECK: movt r3, #463/// :upper16:label3 + 4 = :upper16:0x30000 = 364// CHECK: movt r4, #565 66.section .R_ARM_MOVW_PREL_NC, "ax",%progbits67.align 868 movw r0, :lower16:label - .69 movw r1, :lower16:label1 - .70 movw r2, :lower16:label2 + 4 - .71 movw r3, :lower16:label3 - .72 movw r4, :lower16:label3 + 0x2214 - .73// CHECK-LABEL: Disassembly of section .R_ARM_MOVW_PREL_NC74// CHECK-EMPTY:75/// :lower16:label - . = 5683276// CHECK: 21200: movw r0, #6092877/// :lower16:label1 - . = 5683278// CHECK: movw r1, #6092879/// :lower16:label2 - . + 4 = 6093280// CHECK: movw r2, #6093281/// :lower16:label3 - . = 6091282// CHECK: movw r3, #6091283/// :lower16:label3 - . + 0x2214 = :lower16:0x20000 = 409684// CHECK: movw r4, #409685 86.section .R_ARM_MOVT_PREL, "ax",%progbits87.align 888 movt r0, :upper16:label - .89 movt r1, :upper16:label1 - .90 movt r2, :upper16:label2 + 0x4 - .91 movt r3, :upper16:label3 - .92 movt r4, :upper16:label3 + 0x2314 - .93// CHECK-LABEL: Disassembly of section .R_ARM_MOVT_PREL94// CHECK-EMPTY:95/// :upper16:label - . = :upper16:0xdd00 = 196// CHECK: 21300: movt r0, #197/// :upper16:label1 - . = :upper16:0xdd00 = 198// CHECK: movt r1, #199/// :upper16:label2 - . + 4 = :upper16:0xdd04 = 1100// CHECK: movt r2, #1101/// :upper16:label3 - . = :upper16:0x1dcf0 = 2102// CHECK: movt r3, #2103/// :upper16:label3 - . + 0x2314 = :upper16:0x20000 = 3104// CHECK: movt r4, #3105 106.section .R_ARM_MOVW_BREL_NC, "ax",%progbits107.align 8108 movw r0, :lower16:label(sbrel)109 movw r1, :lower16:label1(sbrel)110 movw r2, :lower16:label2(sbrel)111 movw r3, :lower16:label3(sbrel)112 movw r4, :lower16:label3.4(sbrel)113// CHECK-LABEL: Disassembly of section .R_ARM_MOVW_BREL_NC114// CHECK-EMPTY:115// SB = .destination116/// :lower16:label - SB = 0117// CHECK: 21400: movw r0, #0118/// :lower16:label1 - SB = 4119// CHECK: movw r1, #4120/// :lower16:label2 - SB = 8121// CHECK: movw r2, #8122/// :lower16:label3 - SB = 0xfffc123// CHECK: movw r3, #65532124/// :lower16:label3.4 - SB = :lower16:0x10000 = 0125// CHECK: movw r4, #0126 127.section .R_ARM_MOVT_BREL, "ax",%progbits128.align 8129 movt r0, :upper16:label(sbrel)130 movt r1, :upper16:label1(sbrel)131 movt r2, :upper16:label2(sbrel)132 movt r3, :upper16:label3(sbrel)133 movt r4, :upper16:label3.4(sbrel)134// CHECK-LABEL: Disassembly of section .R_ARM_MOVT_BREL135// CHECK-EMPTY:136// SB = .destination137/// :upper16:label - SB = 0138// CHECK: 21500: movt r0, #0139/// :upper16:label1 - SB = 0140// CHECK: movt r1, #0141/// :upper16:label2 - SB = 0142// CHECK: movt r2, #0143/// :upper16:label3 - SB = 0144// CHECK: movt r3, #0145/// :upper16:label3.4 - SB = :upper16:0x10000 = 1146// CHECK: movt r4, #1147 148.section .R_ARM_THM_MOVW_ABS_NC, "ax",%progbits149.align 8150 movw r0, :lower16:label151 movw r1, :lower16:label1152 movw r2, :lower16:label2 + 4153 movw r3, :lower16:label3154 movw r4, :lower16:label3 + 4155// CHECK-LABEL: Disassembly of section .R_ARM_THM_MOVW_ABS_NC156// CHECK-EMPTY:157// CHECK: 21600: movw r0, #0158// CHECK: movw r1, #4159// CHECK: movw r2, #12160// CHECK: movw r3, #65532161// CHECK: movw r4, #0162 163.section .R_ARM_THM_MOVT_ABS, "ax",%progbits164.align 8165 movt r0, :upper16:label166 movt r1, :upper16:label1167 movt r2, :upper16:label2 + 4168 movt r3, :upper16:label3169 movt r4, :upper16:label3 + 4170// CHECK-LABEL: Disassembly of section .R_ARM_THM_MOVT_ABS171// CHECK-EMPTY:172// CHECK: 21700: movt r0, #4173// CHECK: movt r1, #4174// CHECK: movt r2, #4175// CHECK: movt r3, #4176// CHECK: movt r4, #5177 178.section .R_ARM_THM_MOVW_PREL_NC, "ax",%progbits179.align 8180 movw r0, :lower16:label - .181 movw r1, :lower16:label1 - .182 movw r2, :lower16:label2 + 4 - .183 movw r3, :lower16:label3 - .184 movw r4, :lower16:label3 + 0x2814 - .185// CHECK-LABEL: Disassembly of section .R_ARM_THM_MOVW_PREL_NC186// CHECK-EMPTY:187/// :lower16:label - . = 59392188// CHECK: 21800: movw r0, #59392189/// :lower16:label1 - . = 59392190// CHECK: movw r1, #59392191/// :lower16:label2 - . + 4 = 59396192// CHECK: movw r2, #59396193/// :lower16:label3 - . = 59376194// CHECK: movw r3, #59376195/// :lower16:label3 - . + 0x2814 = 0x20000196// CHECK: movw r4, #4096197 198.section .R_ARM_THM_MOVT_PREL, "ax",%progbits199.align 8200 movt r0, :upper16:label - .201 movt r1, :upper16:label1 - .202 movt r2, :upper16:label2 + 0x4 - .203 movt r3, :upper16:label3 - .204 movt r4, :upper16:label3 + 0x2914 - .205// CHECK-LABEL: Disassembly of section .R_ARM_THM_MOVT_PREL206// CHECK-EMPTY:207/// :upper16:label - . = :upper16:0xd700 = 1208// CHECK: 21900: movt r0, #1209/// :upper16:label1 - . = :upper16:0xd700 = 1210// CHECK: movt r1, #1211/// :upper16:label2 - . + 4 = :upper16:0xd704 = 1212// CHECK: movt r2, #1213/// :upper16:label3 - . = :upper16:0x1d6f0 = 2214// CHECK: movt r3, #2215/// :upper16:label3 - . + 0x2914 = :upper16:0x20000 = 3216// CHECK: movt r4, #3217 218.section .R_ARM_THM_MOVW_BREL_NC, "ax",%progbits219.align 8220 movw r0, :lower16:label(sbrel)221 movw r1, :lower16:label1(sbrel)222 movw r2, :lower16:label2(sbrel)223 movw r3, :lower16:label3(sbrel)224 movw r4, :lower16:label3.4(sbrel)225// CHECK-LABEL: Disassembly of section .R_ARM_THM_MOVW_BREL_NC226// CHECK-EMPTY:227// SB = .destination228/// :lower16:label - SB = 0229// CHECK: 21a00: movw r0, #0230/// :lower16:label1 - SB = 4231// CHECK: movw r1, #4232/// :lower16:label2 - SB = 8233// CHECK: movw r2, #8234/// :lower16:label3 - SB = 0xfffc235// CHECK: movw r3, #65532236/// :lower16:label3.4 - SB = :lower16:0x10000 = 0237// CHECK: movw r4, #0238 239.section .R_ARM_THM_MOVT_BREL, "ax",%progbits240.align 8241 movt r0, :upper16:label(sbrel)242 movt r1, :upper16:label1(sbrel)243 movt r2, :upper16:label2(sbrel)244 movt r3, :upper16:label3(sbrel)245 movt r4, :upper16:label3.4(sbrel)246// CHECK-LABEL: Disassembly of section .R_ARM_THM_MOVT_BREL247// CHECK-EMPTY:248/// SB = .destination249/// :upper16:label - SB = 0250// CHECK: 21b00: movt r0, #0251/// :upper16:label1 - SB = 0252// CHECK: movt r1, #0253/// :upper16:label2 - SB = 0254// CHECK: movt r2, #0255/// :upper16:label3 - SB = 0256// CHECK: movt r3, #0257/// :upper16:label3.4 - SB = :upper16:0x10000 = 1258// CHECK: movt r4, #1259 260 .section .destination, "aw",%progbits261 .balign 65536262/// 0x20000263label:264 .word 0265/// 0x20004266label1:267 .word 1268/// 0x20008269label2:270 .word 2271/// Test label3 is immediately below 2^16 alignment boundary272 .space 65536 - 16273/// 0x2fffc274label3:275 .word 3276/// label3 + 4 is on a 2^16 alignment boundary277label3.4:278 .word 4279