You've already forked linux-packaging-mono
							
							
		
			
	
	
		
			150 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			150 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
|   | // 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) |