]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[ARC/LIBGCC] Add TLS support.
authorClaudiu Zissulescu <claziss@synopsys.com>
Thu, 28 Apr 2016 11:53:34 +0000 (13:53 +0200)
committerClaudiu Zissulescu <claziss@gcc.gnu.org>
Thu, 28 Apr 2016 11:53:34 +0000 (13:53 +0200)
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

libgcc/ChangeLog
libgcc/config.host
libgcc/config/arc/crttls.S [new file with mode: 0644]
libgcc/config/arc/t-arc

index b671a56692e80faf04dc3ef5b7898a5b3736ad0d..598c1a09a6179ce062ac9cb1d66caf0791df9022 100644 (file)
@@ -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.
index b61a579bea0a7e7783596b99d6bdf119cb6213ab..c5266ed82886e5bc145c517149e5ad73285a4d8c 100644 (file)
@@ -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 (file)
index 0000000..512c1df
--- /dev/null
@@ -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 */
index 7ceb694f69fd092675174963b3ac466c2f32b745..3523aedec13b777367c49b73be473a0c84f1dff7 100644 (file)
@@ -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 \