| 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 |