73 lines
2.3 KiB
ArmAsm
73 lines
2.3 KiB
ArmAsm
; newlib tls glue code for Synopsys DesignWare ARC cpu.
|
|
|
|
/* Copyright (C) 2016-2022 Free Software Foundation, Inc.
|
|
Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
|
|
on behalf of Synopsys Inc.
|
|
|
|
This file is part of GCC.
|
|
|
|
GCC is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free
|
|
Software Foundation; either version 3, or (at your option) any later
|
|
version.
|
|
|
|
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
Under Section 7 of GPL version 3, you are granted additional
|
|
permissions described in the GCC Runtime Library Exception, version
|
|
3.1, as published by the Free Software Foundation.
|
|
|
|
You should have received a copy of the GNU General Public License and
|
|
a copy of the GCC Runtime Library Exception along with this program;
|
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
/* As a special exception, if you link this library with other files,
|
|
some of which are compiled with GCC, to produce an executable,
|
|
this library does not by itself cause the resulting executable
|
|
to be covered by the GNU General Public License.
|
|
This exception does not however invalidate any other reasons why
|
|
the executable file might be covered by the GNU General Public License. */
|
|
|
|
|
|
#ifdef __ARC_RF16__
|
|
/* Use object attributes to inform other tools this file is
|
|
safe for RF16 configuration. */
|
|
.arc_attribute Tag_ARC_ABI_rf16, 1
|
|
#endif
|
|
|
|
#if (__ARC_TLS_REGNO__ != -1)
|
|
/* ANSI concatenation macros. */
|
|
|
|
#define CONCAT1(a, b) CONCAT2(a, b)
|
|
#define CONCAT2(a, b) a ## b
|
|
|
|
/* Use the right prefix for global labels. */
|
|
|
|
#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
|
|
|
|
#define FUNC(X) .type SYM(X),@function
|
|
#define ENDFUNC0(X) .Lfe_##X: .size X,.Lfe_##X-X
|
|
#define ENDFUNC(X) ENDFUNC0(X)
|
|
|
|
.global SYM(__read_tp)
|
|
SYM(__read_tp):
|
|
FUNC(__read_tp)
|
|
mov r0, CONCAT1 (r, __ARC_TLS_REGNO__)
|
|
nop
|
|
j [blink]
|
|
ENDFUNC(__read_tp)
|
|
|
|
.section .init
|
|
mov CONCAT1 (r, __ARC_TLS_REGNO__),__main_tcb_end+256
|
|
|
|
.section .tbss
|
|
__main_tcb:
|
|
.long 0
|
|
.long 0
|
|
__main_tcb_end:
|
|
|
|
#endif /*__ARC_TLS_REGNO__ != -1 */
|