133 lines · plain
1# RUN: rm -rf %t && mkdir -p %t2# RUN: llvm-mc -triple thumbv7-windows-itanium -filetype obj -o %t/COFF_Thumb.o %s3# RUN: llvm-rtdyld -triple thumbv7-windows \4# RUN: -dummy-extern ExitProcess=0x54769891 \5# RUN: -dummy-extern unnamed_addr=0x00001024 -verify -check %s %t/COFF_Thumb.o6 7 .text8 .syntax unified9 10 .def unnamed_addr11 .scl 212 .type 3213 .endef14 .global unnamed_addr15 16 .def branch24t17 .scl 218 .type 3219 .endef20 .global branch24t21 .p2align 122 .code 1623 .thumb_func24branch24t:25@ rel1:26# b unnamed_addr @ IMAGE_REL_ARM_BRANCH24T27 28 .def function29 .scl 230 .type 3231 .endef32 .globl function33 .p2align 134 .code 1635 .thumb_func36function:37 push.w {r11, lr}38 mov r11, sp39rel3: @ IMAGE_REL_ARM_MOV32T40 movw r0, :lower16:string41# rtdyld-check: decode_operand(rel3, 1) = (string&0x0000ffff)42 movt r0, :upper16:string43# TODO rtdyld-check: decode_operand(rel3, 1) = (string&0xffff0000>>16)44 blx r145load_from_dllimport_lo: @ IMAGE_REL_ARM_MOV32T46 movw r0, :lower16:__imp_ExitProcess47# (1) Check stub content.48# rtdyld-check: *{4}(stub_addr(COFF_Thumb.o/.text, __imp_ExitProcess)) = \49# rtdyld-check: ExitProcess50#51# (2) Check lo bits of stub address.52# rtdyld-check: decode_operand(load_from_dllimport_lo, 1) = \53# rtdyld-check: stub_addr(COFF_Thumb.o/.text, __imp_ExitProcess)[15:0]54load_from_dllimport_hi:55 movt r0, :upper16:__imp_ExitProcess56# (3) Check hi bits of stub address.57# rtdyld-check: decode_operand(load_from_dllimport_hi, 2) = \58# rtdyld-check: stub_addr(COFF_Thumb.o/.text, __imp_ExitProcess)[31:16]59 ldr r1, [r0]60 movs r0, #061 pop.w {r11, lr}62 bx r163 64 .def main65 .scl 266 .type 3267 .endef68 .globl main69 .p2align 170 .code 1671 .thumb_func72main:73 push.w {r11, lr}74 mov r11, sp75rel5:76# bl function @ IMAGE_REL_ARM_BLX23T77 movs r0, #078 pop.w {r11, pc}79 80 .section .rdata,"dr"81 .global string82string:83 .asciz "Hello World\n"84 85 .data86 87 .global relocations88relocations:89@ rel8:90 .long function(imgrel) @ IMAGE_REL_ARM_ADDR32NB91# rtdyld-check: *{4}relocations = function - section_addr(COFF_Thumb.o, .text)92rel9:93 .secidx __imp_ExitProcess @ IMAGE_REL_ARM_SECTION94# rtdyld-check: *{2}rel9 = 295rel10:96 .long relocations(secrel32) @ IMAGE_REL_ARM_SECREL97# rtdyld-check: *{4}rel10 = relocations - section_addr(COFF_Thumb.o, .data)98rel11:99 .secrel32 relocations @ IMAGE_REL_ARM_SECREL100# rtdyld-check: *{4}rel11 = relocations - section_addr(COFF_Thumb.o, .data)101 bx r0102 trap103 104 .text105 106 .p2align 2107 108branch_to_thumb_func:109@ rel14: @ IMAGE_REL_ARM_MOV32T110 movw r0, :lower16:function111# rtdyld-check: decode_operand(branch_to_thumb_func, 1) = (function&0x0000ffff|1)112 movt r0, :upper16:function113# TODO rtdyld-check: decode_operand(branch_to_thumb_func, 1) = (function&0xffff0000>>16)114 bx r0115 trap116 117 .data118 119 .p2align 2120a_data_symbol:121 .long 1073741822122 123 .p2align 2124 125 .text126 127ref_to_data_symbol_addr:128@ rel15: @ IMAGE_REL_ARM_MOV32T129 movw r0, :lower16:a_data_symbol130# rtdyld-check: decode_operand(ref_to_data_symbol_addr, 1) = (a_data_symbol&0x0000ffff)131 movt r0, :upper16:a_data_symbol132# TODO rtdyld-check: decode_operand(ref_to_data_symbol_addr, 1) = (a_data_symbol&0xffff0000>>16)133