diff options
author | Claudiu Zissulescu <claziss@synopsys.com> | 2016-04-28 13:53:34 +0200 |
---|---|---|
committer | Claudiu Zissulescu <claziss@gcc.gnu.org> | 2016-04-28 13:53:34 +0200 |
commit | 8b48923bacb16526d4c719b2adfdfc1f2cf3551c (patch) | |
tree | 0b455ed4da8052e402087cf79f26d01c66105efb | |
parent | 24efbb3e41ad07504ace2e6104fc0c0a6291068e (diff) | |
download | gcc-8b48923bacb16526d4c719b2adfdfc1f2cf3551c.zip gcc-8b48923bacb16526d4c719b2adfdfc1f2cf3551c.tar.gz gcc-8b48923bacb16526d4c719b2adfdfc1f2cf3551c.tar.bz2 |
[ARC/LIBGCC] Add TLS support.
libgcc/
2016-04-28 Claudiu Zissulescu <claziss@synopsys.com>
Joern Rennecke <joern.rennecke@embecosm.com>
* config/arc/crttls.S: New file.
* config/arc/t-arc: New rule.
* config.host (arc*-*-elf*, arc*-*-linux*): Add crttls.o.
Co-Authored-By: Joern Rennecke <joern.rennecke@embecosm.com>
From-SVN: r235558
-rw-r--r-- | libgcc/ChangeLog | 7 | ||||
-rw-r--r-- | libgcc/config.host | 2 | ||||
-rw-r--r-- | libgcc/config/arc/crttls.S | 67 | ||||
-rw-r--r-- | libgcc/config/arc/t-arc | 3 |
4 files changed, 79 insertions, 0 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index b671a56..598c1a0 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,10 @@ +2016-04-28 Claudiu Zissulescu <claziss@synopsys.com> + Joern Rennecke <joern.rennecke@embecosm.com> + + * config/arc/crttls.S: New file. + * config/arc/t-arc: New rule. + * config.host (arc*-*-elf*, arc*-*-linux*): Add crttls.o. + 2016-04-25 Nick Clifton <nickc@redhat.com> * config/msp430/cmpd.c (__mspabi_cmpf): Add prototype. diff --git a/libgcc/config.host b/libgcc/config.host index b61a579..c5266ed 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -367,10 +367,12 @@ alpha*-dec-*vms*) arc*-*-elf*) tmake_file="arc/t-arc-newlib arc/t-arc" extra_parts="crti.o crtn.o crtend.o crtbegin.o crtendS.o crtbeginS.o libgmon.a crtg.o crtgend.o" + extra_parts="${extra_parts} crttls.o" ;; arc*-*-linux-uclibc*) tmake_file="${tmake_file} t-slibgcc-libgcc t-slibgcc-nolc-override arc/t-arc700-uClibc arc/t-arc" extra_parts="crti.o crtn.o crtend.o crtbegin.o crtendS.o crtbeginS.o libgmon.a crtg.o crtgend.o" + extra_parts="${extra_parts} crttls.o" ;; arm-wrs-vxworks) tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp" diff --git a/libgcc/config/arc/crttls.S b/libgcc/config/arc/crttls.S new file mode 100644 index 0000000..512c1df5 --- /dev/null +++ b/libgcc/config/arc/crttls.S @@ -0,0 +1,67 @@ +; newlib tls glue code for Synopsys DesignWare ARC cpu. + +/* Copyright (C) 2016 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. */ + + +#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 */ diff --git a/libgcc/config/arc/t-arc b/libgcc/config/arc/t-arc index 7ceb694..3523aed 100644 --- a/libgcc/config/arc/t-arc +++ b/libgcc/config/arc/t-arc @@ -68,6 +68,9 @@ crtg.o: $(srcdir)/config/arc/crtg.S crtgend.o: $(srcdir)/config/arc/crtgend.S $(crt_compile) -c -x assembler-with-cpp $< +crttls.o: $(srcdir)/config/arc/crttls.S + $(crt_compile) -c -x assembler-with-cpp $< + mcount.o: $(srcdir)/config/arc/gmon/mcount.c $(gcc_compile) -isystem $(srcdir)/config/arc/gmon -c $< \ -fcall-saved-r0 -fcall-saved-r1 -fcall-saved-r2 -fcall-saved-r3 \ |