1/* IBM Z support code for TLS offsets. 2 Copyright (C) 2020-2022 Free Software Foundation, Inc. 3 4This file is part of GCC. 5 6GCC is free software; you can redistribute it and/or modify it under 7the terms of the GNU General Public License as published by the Free 8Software Foundation; either version 3, or (at your option) any later 9version. 10 11GCC is distributed in the hope that it will be useful, but WITHOUT ANY 12WARRANTY; without even the implied warranty of MERCHANTABILITY or 13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14for more details. 15 16Under Section 7 of GPL version 3, you are granted additional 17permissions described in the GCC Runtime Library Exception, version 183.1, as published by the Free Software Foundation. 19 20You should have received a copy of the GNU General Public License and 21a copy of the GCC Runtime Library Exception along with this program; 22see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23<http://www.gnu.org/licenses/>. */ 24 25/* __tls_get_offset expects the GOT pointer in %r12 and adds 26 it to its argument in %r2. In order to get the offset of 27 ti, we load it into %r2, subtract the current %r12 from %r2 28 so the addition will result in a nop (%r2 - %r12 + %r12). 29 30 Note: This file is shared between systemz and s390 as the 31 same file is used in multilib case for s390x and s390. */ 32 33#include "../common/threadasm.S" 34 35 .text 36 .globl CSYM(__ibmz_get_tls_offset) 37 .type CSYM(__ibmz_get_tls_offset), @function 38 .align 8 39CSYM(__ibmz_get_tls_offset): 40 .cfi_startproc 41 42#ifdef __s390x__ 43 .machinemode zarch 44 stmg %r14,%r15,112(%r15) 45 .cfi_offset 14, -48 46 .cfi_offset 15, -40 47 aghi %r15,-160 48 .cfi_def_cfa_offset 320 49 sgr %r2,%r12 50 brasl %r14,__tls_get_offset@PLT 51 lg %r4,272(%r15) 52 lmg %r14,%r15,272(%r15) 53 .cfi_restore 15 54 .cfi_restore 14 55 .cfi_def_cfa_offset 160 56 br %r4 57#else 58 .machinemode esa 59 stm %r12,%r15,48(%r15) 60 .cfi_offset 12, -48 61 .cfi_offset 13, -44 62 .cfi_offset 14, -40 63 .cfi_offset 15, -36 64 ahi %r15,-96 65 .cfi_def_cfa_offset 192 66 larl %r12,_GLOBAL_OFFSET_TABLE_ 67 sr %r2,%r12 68 brasl %r14,__tls_get_offset@PLT 69 l %r4,152(%r15) 70 lm %r12,%r15,144(%r15) 71 .cfi_restore 15 72 .cfi_restore 14 73 .cfi_restore 13 74 .cfi_restore 12 75 .cfi_def_cfa_offset 96 76 br %r4 77#endif 78 .cfi_endproc 79 .size __ibmz_get_tls_offset, .-__ibmz_get_tls_offset 80