package/uclibc-ng-test: fix TLS for nios2
authorFabrice Fontaine <fontaine.fabrice@gmail.com>
Tue, 1 Dec 2020 19:30:57 +0000 (20:30 +0100)
committerArnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Tue, 15 Dec 2020 21:03:16 +0000 (22:03 +0100)
Fix TLS for nios2 to avoid the following build failure:

In file included from tst-tls1.c:6:
tls-macros.h:101:3: error: #error "No support for this architecture so far."
 # error "No support for this architecture so far."
   ^~~~~

Fixes:
 - http://autobuild.buildroot.org/results/303e50d996b7261896f163418831fabb40779ff5

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
package/uclibc-ng-test/0001-add-nios2-tls-macros-from-glibc.patch [new file with mode: 0644]

diff --git a/package/uclibc-ng-test/0001-add-nios2-tls-macros-from-glibc.patch b/package/uclibc-ng-test/0001-add-nios2-tls-macros-from-glibc.patch
new file mode 100644 (file)
index 0000000..574d10c
--- /dev/null
@@ -0,0 +1,84 @@
+From bf6fcd59d1ff51584a703b1d78c9e8fd4f808917 Mon Sep 17 00:00:00 2001
+From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+Date: Sat, 28 Nov 2020 11:44:00 +0100
+Subject: [PATCH] add nios2 tls macros from glibc
+
+Retrieved from
+https://github.com/bminor/glibc/blob/master/sysdeps/nios2/tls-macros.h
+
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+[Retrieved from:
+https://github.com/wbx-github/uclibc-ng-test/commit/bf6fcd59d1ff51584a703b1d78c9e8fd4f808917]
+---
+ test/tls/tls-macros-nios2.h | 46 +++++++++++++++++++++++++++++++++++++
+ test/tls/tls-macros.h       |  4 ++++
+ 2 files changed, 50 insertions(+)
+ create mode 100644 test/tls/tls-macros-nios2.h
+
+diff --git a/test/tls/tls-macros-nios2.h b/test/tls/tls-macros-nios2.h
+new file mode 100644
+index 0000000..7029530
+--- /dev/null
++++ b/test/tls/tls-macros-nios2.h
+@@ -0,0 +1,46 @@
++#define TLS_LE(x)                                     \
++  ({ int *__result;                                   \
++     asm ("addi %0, r23, %%tls_le(" #x ")"            \
++        : "=r" (__result));                           \
++     __result; })
++
++#define TLS_IE(x)                                     \
++  ({ int *__result;                                   \
++     int __tmp;                                         \
++     asm ("nextpc %0 ; "                                \
++          "1: movhi %1, %%hiadj(_gp_got - 1b) ; "     \
++          "addi %1, %1, %%lo(_gp_got - 1b) ; "                \
++          "add %0, %0, %1 ; "                           \
++          "ldw %1, %%tls_ie(" #x ")(%0) ; "           \
++        "add %1, r23, %1"                             \
++          : "=&r" (__tmp), "=&r" (__result));           \
++     __result; })
++
++#define TLS_LD(x)                                     \
++  ({ char *__result;                                  \
++     char *__result2;                                   \
++     int *__result3;                                    \
++     int __tmp;                                         \
++     extern void *__tls_get_addr (void *);            \
++     asm ("nextpc %0 ; "                                \
++          "1: movhi %1, %%hiadj(_gp_got - 1b) ; "     \
++          "addi %1, %1, %%lo(_gp_got - 1b) ; "                \
++          "add %0, %0, %1 ; "                           \
++          "addi %0, %0, %%tls_ldm(" #x ")"              \
++          : "=r" (__result), "=r" (__tmp));             \
++     __result2 = (char *)__tls_get_addr (__result);   \
++     asm ("addi %0, %1, %%tls_ldo(" #x ")"              \
++        : "=r" (__result3) : "r" (__result2));        \
++     __result3; })
++
++#define TLS_GD(x)                                     \
++  ({ int *__result;                                   \
++     int __tmp;                                         \
++     extern void *__tls_get_addr (void *);            \
++     asm ("nextpc %0 ; "                                \
++          "1: movhi %1, %%hiadj(_gp_got - 1b) ; "     \
++          "addi %1, %1, %%lo(_gp_got - 1b) ; "                \
++          "add %0, %0, %1 ; "                           \
++          "addi %0, %0, %%tls_gd(" #x ")"             \
++        : "=r" (__result), "=r" (__tmp));             \
++     (int *)__tls_get_addr (__result); })
+diff --git a/test/tls/tls-macros.h b/test/tls/tls-macros.h
+index 4a4e916..087b365 100644
+--- a/test/tls/tls-macros.h
++++ b/test/tls/tls-macros.h
+@@ -64,6 +64,10 @@
+ #include <tls-macros-mips.h>
+ #endif
++#ifdef __nios2__
++#include <tls-macros-nios2.h>
++#endif
++
+ #if defined(__powerpc__) && !defined(__powerpc64__)
+ #include <tls-macros-powerpc.h>
+ #endif