brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 2b10592 Raw
191 lines · plain
1# REQUIRES: x86_64-linux2# RUN: rm -rf %t && mkdir -p %t3# RUN: split-file %s %t4# RUN: llvm-mc -triple=x86_64-unknown-linux -filetype=obj -o %t/test_runner.o %t/test_runner.s5# RUN: llvm-mc -triple=x86_64-unknown-linux -filetype=obj -o %t/external_tls.o %t/external_tls.s6# RUN: llvm-rtdyld -triple=x86_64-unknown-linux -execute %t/test_runner.o %t/external_tls.o7 8#--- test_runner.s9 10_main:11 12	push %rbx13	# load the address of the GOT in rbx for the large code model tests14	lea _GLOBAL_OFFSET_TABLE_(%rip), %rbx15 16# Test Local Exec TLS Model17	mov %fs:tls_foo@tpoff, %eax18	cmp $0x12, %eax19	je 1f20	mov $1, %eax21	jmp 2f221:23 24	mov %fs:tls_bar@tpoff, %eax25	cmp $0x34, %eax26	je 1f27	mov $2, %eax28	jmp 2f291:30 31# Test Initial Exec TLS Model32	mov tls_foo@gottpoff(%rip), %rax33	mov %fs:(%rax), %eax34	cmp $0x12, %eax35	je 1f36	mov $3, %eax37	jmp 2f381:39 40	mov tls_bar@gottpoff(%rip), %rax41	mov %fs:(%rax), %eax42	cmp $0x34, %eax43	je 1f44	mov $4, %eax45	jmp 2f461:47 48# Test Local Dynamic TLS Model (small code model)49	lea tls_foo@tlsld(%rip), %rdi50	call __tls_get_addr@plt51	mov tls_foo@dtpoff(%rax), %eax52	cmp $0x12, %eax53	je 1f54	mov $5, %eax55	jmp 2f561:57 58	lea tls_bar@tlsld(%rip), %rdi59	call __tls_get_addr@plt60	mov tls_bar@dtpoff(%rax), %eax61	cmp $0x34, %eax62	je 1f63	mov $6, %eax64	jmp 2f651:66 67# Test Local Dynamic TLS Model (large code model)68	lea tls_foo@tlsld(%rip), %rdi69	movabs $__tls_get_addr@pltoff, %rax70	add %rbx, %rax71	call *%rax72	mov tls_foo@dtpoff(%rax), %eax73	cmp $0x12, %eax74	je 1f75	mov $7, %eax76	jmp 2f771:78 79	lea tls_bar@tlsld(%rip), %rdi80	movabs $__tls_get_addr@pltoff, %rax81	add %rbx, %rax82	call *%rax83	mov tls_bar@dtpoff(%rax), %eax84	cmp $0x34, %eax85	je 1f86	mov $8, %eax87	jmp 2f881:89 90# Test Global Dynamic TLS Model (small code model)91	.byte 0x6692	leaq tls_foo@tlsgd(%rip), %rdi93	.byte 0x66, 0x66, 0x4894	call __tls_get_addr@plt95	mov (%rax), %eax96	cmp $0x12, %eax97	je 1f98	mov $9, %eax99	jmp 2f1001:101 102	.byte 0x66103	leaq tls_bar@tlsgd(%rip), %rdi104	.byte 0x66, 0x66, 0x48105	call __tls_get_addr@plt106	mov (%rax), %eax107	cmp $0x34, %eax108	je 1f109	mov $10, %eax110	jmp 2f1111:112 113# Test Global Dynamic TLS Model (large code model)114	lea tls_foo@tlsgd(%rip), %rdi115	movabs $__tls_get_addr@pltoff, %rax116	add %rbx, %rax117	call *%rax118	mov (%rax), %eax119	cmp $0x12, %eax120	je 1f121	mov $11, %eax122	jmp 2f1231:124 125	lea tls_bar@tlsgd(%rip), %rdi126	movabs $__tls_get_addr@pltoff, %rax127	add %rbx, %rax128	call *%rax129	mov (%rax), %eax130	cmp $0x34, %eax131	je 1f132	mov $12, %eax133	jmp 2f1341:135 136# External TLS variable, Local Exec TLS Model (small code model)137	mov %fs:external_tls_var@tpoff, %eax138	cmp $0x56, %eax139	je 1f140	mov $12, %eax141	jmp 2f1421:143 144# External TLS variable, Global Dynamic TLS Model (small code model)145	.byte 0x66146	leaq external_tls_var@tlsgd(%rip), %rdi147	.byte 0x66, 0x66, 0x48148	call __tls_get_addr@plt149	mov (%rax), %eax150	cmp $0x56, %eax151	je 1f152	mov $13, %eax153	jmp 2f1541:155 156 157# Return 0 if all tests are successful158	xor %eax, %eax159 1602:161	pop %rbx162	ret163 164 165	.section .tdata, "awT", @progbits166 167	.global tls_foo168	.type tls_foo, @object169	.size tls_foo, 4170	.align 4171tls_foo:172	.long 0x12173 174	.global tls_bar175	.type tls_bar, @object176	.size tls_bar, 4177	.align 4178tls_bar:179	.long 0x34180 181#--- external_tls.s182 183	.section .tdata, "awT", @progbits184 185	.global external_tls_var186	.type external_tls_var, @object187	.size external_tls_var, 4188	.align 4189external_tls_var:190	.long 0x56191