// RUN: llvm-mc -triple thumbv7-windows-itanium -filetype obj -o %t.obj %s // RUN: llvm-rtdyld -triple thumbv7-windows -dummy-extern OutputDebugStringW=0x01310061 -dummy-extern OutputDebugStringA=0x78563413 -dummy-extern ExitProcess=0x54769891 -dummy-extern unnamed_addr=0x00001024 -verify -check %s %t.obj .text .syntax unified .def unnamed_addr .scl 2 .type 32 .endef .global unnamed_addr .def branch24t .scl 2 .type 32 .endef .global branch24t .p2align 1 .code 16 .thumb_func branch24t: @ rel1: # b unnamed_addr @ IMAGE_REL_ARM_BRANCH24T .def function .scl 2 .type 32 .endef .globl function .p2align 1 .code 16 .thumb_func function: push.w {r11, lr} mov r11, sp rel2: @ IMAGE_REL_ARM_MOV32T movw r0, :lower16:__imp_OutputDebugStringA # rtdyld-check: decode_operand(rel2, 1) = (__imp_OutputDebugStringA&0x0000ffff) movt r0, :upper16:__imp_OutputDebugStringA # TODO rtdyld-check: decode_operand(rel2, 1) = (__imp_OutputDebugStringA&0xffff0000>>16) ldr r1, [r0] rel3: @ IMAGE_REL_ARM_MOV32T movw r0, :lower16:string # rtdyld-check: decode_operand(rel3, 1) = (string&0x0000ffff) movt r0, :upper16:string # TODO rtdyld-check: decode_operand(rel3, 1) = (string&0xffff0000>>16) blx r1 rel4: @ IMAGE_REL_ARM_MOV32T movw r0, :lower16:__imp_ExitProcess # rtdyld-check: decode_operand(rel4, 1) = (__imp_ExitProcess&0x0000ffff) movt r0, :upper16:__imp_ExitProcess # TODO rtdyld-check: decode_operand(rel4, 1) = (__imp_ExitProcess&0xffff0000>>16) ldr r1, [r0] movs r0, #0 pop.w {r11, lr} bx r1 .def main .scl 2 .type 32 .endef .globl main .p2align 1 .code 16 .thumb_func main: push.w {r11, lr} mov r11, sp rel5: # bl function @ IMAGE_REL_ARM_BLX23T movs r0, #0 pop.w {r11, pc} .section .rdata,"dr" .global string string: .asciz "Hello World\n" .data .p2align 2 __imp_OutputDebugStringA: @ rel6: .long OutputDebugStringA @ IMAGE_REL_ARM_ADDR32 # rtdyld-check: *{4}__imp_OutputDebugStringA = 0x78563413 .p2align 2 __imp_ExitProcess: @ rel7: .long ExitProcess @ IMAGE_REL_ARM_ADDR32 # rtdyld-check: *{4}__imp_ExitProcess = 0x54769891 .global relocations relocations: @ rel8: .long function(imgrel) @ IMAGE_REL_ARM_ADDR32NB # rtdyld-check: *{4}relocations = function - section_addr(COFF_Thumb.s.tmp.obj, .text) rel9: .secidx __imp_OutputDebugStringA @ IMAGE_REL_ARM_SECTION # rtdyld-check: *{2}rel9 = 1 rel10: .long relocations(secrel32) @ IMAGE_REL_ARM_SECREL # rtdyld-check: *{4}rel10 = relocations - section_addr(COFF_Thumb.s.tmp.obj, .data) rel11: .secrel32 relocations @ IMAGE_REL_ARM_SECREL # rtdyld-check: *{4}rel11 = relocations - section_addr(COFF_Thumb.s.tmp.obj, .data) rel12: @ IMAGE_REL_ARM_MOV32T movw r0, :lower16:__imp_OutputDebugStringW # rtdyld-check: decode_operand(rel12, 1) = (__imp_OutputDebugStringW&0x0000ffff) movt r0, :upper16:__imp_OutputDebugStringW # TODO rtdyld-check: decode_operand(rel12, 1) = (__imp_OutputDebugStringW&0xffff0000>>16) bx r0 trap .data .p2align 2 __imp_OutputDebugStringW: @ rel13: .long OutputDebugStringW @ IMAGE_REL_ARM_ADDR32 # rtdyld-check: *{4}__imp_OutputDebugStringW = 0x01310061 .p2align 2 branch_to_thumb_func: @ rel14: @ IMAGE_REL_ARM_MOV32T movw r0, :lower16:function # rtdyld-check: decode_operand(branch_to_thumb_func, 1) = (function&0x0000ffff|1) movt r0, :upper16:function # TODO rtdyld-check: decode_operand(branch_to_thumb_func, 1) = (function&0xffff0000>>16) bx r0 trap .data .p2align 2 a_data_symbol: .long 1073741822 .p2align 2 .text ref_to_data_symbol_addr: @ rel15: @ IMAGE_REL_ARM_MOV32T movw r0, :lower16:a_data_symbol # rtdyld-check: decode_operand(ref_to_data_symbol_addr, 1) = (a_data_symbol&0x0000ffff) movt r0, :upper16:a_data_symbol # TODO rtdyld-check: decode_operand(ref_to_data_symbol_addr, 1) = (a_data_symbol&0xffff0000>>16)