182c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// RUN: llvm-mc -triple=powerpc64-pc-linux -filetype=obj %s -o - | \
282c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// RUN: llvm-readobj -r | FileCheck %s
382c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola
482c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// Test correct relocation generation for thread-local storage using
582c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// the general dynamic model and integrated assembly.
682c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola
782c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola
882c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.file	"/home/espindola/llvm/llvm/test/CodeGen/PowerPC/tls-gd-obj.ll"
982c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.text
1082c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.globl	main
1182c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.align	2
1282c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.type	main,@function
1382c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.section	.opd,"aw",@progbits
1482c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindolamain:                                   # @main
1582c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.align	3
1682c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.quad	.L.main
1782c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.quad	.TOC.@tocbase
1882c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.quad	0
1982c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.text
2082c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola.L.main:
2182c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola# BB#0:                                 # %entry
2282c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	addis 3, 2, a@got@tlsgd@ha
2382c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	addi 3, 3, a@got@tlsgd@l
2482c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	li 4, 0
2582c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	bl __tls_get_addr(a@tlsgd)
2682c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	nop
2782c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	stw 4, -4(1)
2882c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	lwz 4, 0(3)
2982c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	extsw 3, 4
3082c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	blr
3182c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.long	0
3282c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.quad	0
3382c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola.Ltmp0:
3482c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.size	main, .Ltmp0-.L.main
3582c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola
3682c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.type	a,@object               # @a
3782c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.section	.tbss,"awT",@nobits
3882c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.globl	a
3982c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.align	2
4082c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindolaa:
4182c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.long	0                       # 0x0
4282c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola	.size	a, 4
4382c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola
4482c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola
4582c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// Verify generation of R_PPC64_GOT_TLSGD16_HA, R_PPC64_GOT_TLSGD16_LO,
4682c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// and R_PPC64_TLSGD for accessing external variable a, and R_PPC64_REL24
4782c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// for the call to __tls_get_addr.
4882c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola//
4982c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// CHECK: Relocations [
5082c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// CHECK:   Section (2) .rela.text {
5182c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// CHECK:     0x{{[0-9,A-F]+}} R_PPC64_GOT_TLSGD16_HA a
5282c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// CHECK:     0x{{[0-9,A-F]+}} R_PPC64_GOT_TLSGD16_LO a
5382c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// CHECK:     0x{{[0-9,A-F]+}} R_PPC64_TLSGD          a
5482c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// CHECK:     0x{{[0-9,A-F]+}} R_PPC64_REL24          __tls_get_addr
5582c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// CHECK:   }
5682c2703167bcc4132ff6eeff128268d8d13029a1Rafael Espindola// CHECK: ]
57