220 lines · plain
1# RUN: llvm-mc %s -triple=sparc | FileCheck %s --check-prefix=ASM2# RUN: llvm-mc %s --defsym V9=1 -triple=sparcv9 | FileCheck %s --check-prefixes=ASM,ASM-V93 4# RUN: llvm-mc %s -triple=sparc -filetype=obj -o %t5# RUN: llvm-objdump -dr %t | FileCheck %s --check-prefix=OBJDUMP6# RUN: llvm-readelf -s - < %t | FileCheck %s --check-prefix=READELF --implicit-check-not=TLS7# RUN: llvm-mc %s --defsym V9=1 -triple=sparcv9 -filetype=obj -o %t8# RUN: llvm-objdump -dr %t | FileCheck %s --check-prefixes=OBJDUMP,OBJDUMP-V99# RUN: llvm-readelf -s - < %t | FileCheck %s --check-prefixes=READELF,READELF-V9 --implicit-check-not=TLS10 11# READELF: TLS LOCAL DEFAULT [[#]] s_tle_hix2212# READELF: TLS LOCAL DEFAULT [[#]] s_tldo_hix2213# READELF: TLS GLOBAL DEFAULT UND s_tle_lox1014# READELF-V9: TLS GLOBAL DEFAULT UND s_tie_hi2215# READELF-V9: TLS GLOBAL DEFAULT UND s_tie_lo1016# READELF-V9: TLS GLOBAL DEFAULT UND s_tie_ld17# READELF-V9: TLS GLOBAL DEFAULT UND s_tie_ldx18# READELF-V9: TLS GLOBAL DEFAULT UND s_tie_add19# READELF: TLS GLOBAL DEFAULT UND s_tldm_hi2220# READELF: TLS GLOBAL DEFAULT UND s_tldm_lo1021# READELF: TLS GLOBAL DEFAULT UND s_tldm_add22# READELF: TLS GLOBAL DEFAULT UND s_tldo_lox1023# READELF: TLS GLOBAL DEFAULT UND s_tldo_add24# READELF: TLS GLOBAL DEFAULT UND s_tgd_hi2225# READELF: TLS GLOBAL DEFAULT UND s_tgd_lo1026# READELF: TLS GLOBAL DEFAULT UND s_tgd_add27 28main:29 30# ASM: or %g1, %lo(sym), %g331# ASM-NEXT: sethi %hi(sym), %l032# ASM-NEXT: sethi %h44(sym), %l033# ASM-NEXT: or %g1, %m44(sym), %g334# ASM-NEXT: or %g1, %l44(sym), %g335# OBJDUMP: 0000000: R_SPARC_LO10 sym36# OBJDUMP: 0000004: R_SPARC_HI22 sym37# OBJDUMP: 0000008: R_SPARC_H44 sym38# OBJDUMP: 000000c: R_SPARC_M44 sym39# OBJDUMP: 0000010: R_SPARC_L44 sym40or %g1, %lo(sym), %g341sethi %hi(sym), %l042sethi %h44(sym), %l043or %g1, %m44(sym), %g344or %g1, %l44(sym), %g345 46## FIXME: Emit %pc22/%pc1047# ASM: sethi %hi(sym), %o148# ASM-NEXT: or %o1, %lo(sym), %o149# OBJDUMP: sethi 0x0, %o150# OBJDUMP-NEXT: R_SPARC_PC22 sym51# OBJDUMP-NEXT: or %o1, 0x0, %o152# OBJDUMP-NEXT: R_SPARC_PC10 sym53# OBJDUMP-NEXT: sethi 0x3fffff, %o154# OBJDUMP-NEXT: or %o1, 0x3e0, %o155sethi %pc22(sym), %o156or %o1, %pc10(sym), %o157sethi %pc22(main), %o158or %o1, %pc10(main), %o159 60# ASM: sethi %hh(sym), %l061# ASM-NEXT: sethi %hh(sym), %l062# ASM-NEXT: or %g1, %hm(sym), %g363# ASM-NEXT: or %g1, %hm(sym), %g364# ASM-NEXT: sethi %lm(sym), %l065# OBJDUMP: R_SPARC_HH22 sym66# OBJDUMP: R_SPARC_HH22 sym67# OBJDUMP: R_SPARC_HM10 sym68# OBJDUMP: R_SPARC_HM10 sym69# OBJDUMP: R_SPARC_LM22 sym70sethi %hh(sym), %l071sethi %uhi(sym), %l072or %g1, %hm(sym), %g373or %g1, %ulo(sym), %g374sethi %lm(sym), %l075 76.ifdef V977# ASM-V9: sethi %hix(sym), %g178# ASM-V9-NEXT: xor %g1, %lox(sym), %g179# ASM-V9-NEXT: sethi %gdop_hix22(sym), %l180# ASM-V9-NEXT: or %l1, %gdop_lox10(sym), %l181# ASM-V9-NEXT: ldx [%l7+%l1], %l2, %gdop(sym)82# OBJDUMP-V9: sethi 0x3fffff, %g083# OBJDUMP-V9-NEXT: xor %g0, -0x400, %g084# OBJDUMP-V9-NEXT: sethi 0x0, %g185# OBJDUMP-V9-NEXT: R_SPARC_HIX22 sym86# OBJDUMP-V9-NEXT: xor %g1, 0x0, %g187# OBJDUMP-V9-NEXT: R_SPARC_LOX10 sym88# OBJDUMP-V9-NEXT: sethi 0x0, %l189# OBJDUMP-V9-NEXT: R_SPARC_GOTDATA_OP_HIX22 sym90# OBJDUMP-V9-NEXT: or %l1, 0x0, %l191# OBJDUMP-V9-NEXT: R_SPARC_GOTDATA_OP_LOX10 sym92# OBJDUMP-V9-NEXT: ldx [%l7+%l1], %l293# OBJDUMP-V9-NEXT: R_SPARC_GOTDATA_OP sym94sethi %hix(zero), %g095xor %g0, %lox(zero), %g096sethi %hix(sym), %g197xor %g1, %lox(sym), %g198sethi %gdop_hix22(sym), %l199or %l1, %gdop_lox10(sym), %l1100ldx [%l7 + %l1], %l2, %gdop(sym)101.endif102 103.set abs, 0xfedcba98104.set abs48, 0xfedcba987654105zero = 0106 107## FIXME: Don't emit GOT relocations when -position-independent is specified.108# NOPIC: sethi 0x3fb72e, %o0109# NOPIC-NEXT: xor %o0, 0x298, %o0110# NOPIC-NEXT: sethi 0x3b72ea, %o1111# NOPIC-NEXT: xor %o0, 0x188, %o1112sethi %hi(abs), %o0113xor %o0, %lo(abs), %o0114sethi %hi(-0x12345678), %o1115xor %o0, %lo(-0x12345678), %o1116 117# OBJDUMP: ld [%o0+0x7], %o0118ld [%o0 + seven], %o0119seven = 7120 121# OBJDUMP: sethi 0x3b72ea, %o0122# OBJDUMP-NEXT: or %o0, 0x187, %o0123# OBJDUMP-NEXT: ld [%o0+0x654], %o0124sethi %h44(abs48), %o0125or %o0, %m44(abs48), %o0126ld [%o0 + %l44(abs48)], %o0127 128# OBJDUMP-NEXT: sethi 0x0, %o0129# OBJDUMP-NEXT: sethi 0x3fb72e, %o0130# OBJDUMP-NEXT: or %o0, 0x0, %o0131sethi %hh(abs), %o0132sethi %lm(abs), %o0133or %o0, %hm(abs), %o0134 135# OBJDUMP-NEXT: sethi 0x48d1, %o0136# OBJDUMP-NEXT: xor %o0, -0x168, %o0137sethi %hix(abs), %o0138xor %o0, %lox(abs), %o0139 140# OBJDUMP-LABEL: <.tls>:141.section .tls,"ax"142## Local Executable model:143# ASM: sethi %tle_hix22(s_tle_hix22), %i0144# ASM-NEXT: xor %i0, %tle_lox10(s_tle_lox10), %i0145 146# OBJDUMP: 31 00 00 00 sethi 0x0, %i0147# OBJDUMP-NEXT: 00000000: R_SPARC_TLS_LE_HIX22 s_tle_hix22148# OBJDUMP-NEXT: b0 1e 20 00 xor %i0, 0x0, %i0149# OBJDUMP-NEXT: 00000004: R_SPARC_TLS_LE_LOX10 s_tle_lox10150 sethi %tle_hix22(s_tle_hix22), %i0151 xor %i0, %tle_lox10(s_tle_lox10), %i0152 153.ifdef V9154## Initial Executable model155# ASM-V9: sethi %tie_hi22(s_tie_hi22), %i1156# ASM-V9-NEXT: add %i1, %tie_lo10(s_tie_lo10), %i1157# ASM-V9-NEXT: ld [%i0+%i1], %i0, %tie_ld(s_tie_ld)158# ASM-V9-NEXT: ldx [%i0+%i1], %i0, %tie_ldx(s_tie_ldx)159# ASM-V9-NEXT: add %g7, %i0, %o0, %tie_add(s_tie_add)160 161# OBJDUMP-V9: R_SPARC_TLS_IE_HI22 s_tie_hi22162# OBJDUMP-V9: R_SPARC_TLS_IE_LO10 s_tie_lo10163# OBJDUMP-V9: R_SPARC_TLS_IE_LD s_tie_ld164# OBJDUMP-V9: R_SPARC_TLS_IE_LDX s_tie_ldx165# OBJDUMP-V9: R_SPARC_TLS_IE_ADD s_tie_add166 sethi %tie_hi22(s_tie_hi22), %i1167 add %i1, %tie_lo10(s_tie_lo10), %i1168 ld [%i0+%i1], %i0, %tie_ld(s_tie_ld)169 ldx [%i0+%i1], %i0, %tie_ldx(s_tie_ldx)170 add %g7, %i0, %o0, %tie_add(s_tie_add)171.endif172 173## Local Dynamic model174# ASM: sethi %tldo_hix22(s_tldo_hix22), %i1175# ASM-NEXT: sethi %tldm_hi22(s_tldm_hi22), %i2176# ASM-NEXT: add %i2, %tldm_lo10(s_tldm_lo10), %i2177# ASM-NEXT: add %i0, %i2, %o0, %tldm_add(s_tldm_add)178# ASM-NEXT: xor %i1, %tldo_lox10(s_tldo_lox10), %i0179# ASM-NEXT: call __tls_get_addr, %tldm_call(s_tldm_call)180# ASM-NEXT: nop181# ASM-NEXT: add %o0, %i0, %o0, %tldo_add(s_tldo_add)182 183# OBJDUMP: R_SPARC_TLS_LDO_HIX22 s_tldo_hix22184# OBJDUMP: R_SPARC_TLS_LDM_HI22 s_tldm_hi22185# OBJDUMP: R_SPARC_TLS_LDM_LO10 s_tldm_lo10186# OBJDUMP: R_SPARC_TLS_LDM_ADD s_tldm_add187# OBJDUMP: R_SPARC_TLS_LDO_LOX10 s_tldo_lox10188# OBJDUMP: R_SPARC_TLS_LDM_CALL s_tldm_call189# OBJDUMP: R_SPARC_TLS_LDO_ADD s_tldo_add190 sethi %tldo_hix22(s_tldo_hix22), %i1191 sethi %tldm_hi22(s_tldm_hi22), %i2192 add %i2, %tldm_lo10(s_tldm_lo10), %i2193 add %i0, %i2, %o0, %tldm_add(s_tldm_add)194 xor %i1, %tldo_lox10(s_tldo_lox10), %i0195 call __tls_get_addr, %tldm_call(s_tldm_call)196 nop197 add %o0, %i0, %o0, %tldo_add(s_tldo_add)198 199## General Dynamic model200# ASM: sethi %tgd_hi22(s_tgd_hi22), %i1201# ASM-NEXT: add %i1, %tgd_lo10(s_tgd_lo10), %i1202# ASM-NEXT: add %i0, %i1, %o0, %tgd_add(s_tgd_add)203# ASM-NEXT: call __tls_get_addr, %tgd_call(s_tgd_call)204 205# OBJDUMP: R_SPARC_TLS_GD_HI22 s_tgd_hi22206# OBJDUMP: R_SPARC_TLS_GD_LO10 s_tgd_lo10207# OBJDUMP: R_SPARC_TLS_GD_ADD s_tgd_add208# OBJDUMP: R_SPARC_TLS_GD_CALL s_tgd_call209 sethi %tgd_hi22(s_tgd_hi22), %i1210 add %i1, %tgd_lo10(s_tgd_lo10), %i1211 add %i0, %i1, %o0, %tgd_add(s_tgd_add)212 call __tls_get_addr, %tgd_call(s_tgd_call)213 214 .type Local,@object215 .section .tbss,#alloc,#write,#tls216s_tle_hix22:217s_tldo_hix22:218 .word 0219 .size Local, 4220