diff options
author | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2016-11-03 12:14:54 +0100 |
---|---|---|
committer | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2016-11-03 12:14:54 +0100 |
commit | 8ccb533ea3d117ff216100b0989ac75c2509a671 (patch) | |
tree | 14a89191b4a80ad1f83c80aac16eb4e1b8b0dc80 /test/tls | |
parent | 37d6ab14503fba883ed81678ef05e0bc71eb51d8 (diff) |
tls: add microblaze macros
Diffstat (limited to 'test/tls')
-rw-r--r-- | test/tls/tls-macros-microblaze.h | 46 | ||||
-rw-r--r-- | test/tls/tls-macros.h | 4 |
2 files changed, 50 insertions, 0 deletions
diff --git a/test/tls/tls-macros-microblaze.h b/test/tls/tls-macros-microblaze.h new file mode 100644 index 0000000..bb70cbf --- /dev/null +++ b/test/tls/tls-macros-microblaze.h @@ -0,0 +1,46 @@ +/* Copyright (C) 2009-2016 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#define TLS_LD(x) \ + ({ \ + char *__result; \ + int __offset; \ + extern void *__tls_get_addr (void *); \ + __asm__ ("mfs r20,rpc \n" \ + "addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n" \ + "addik %0,r20," #x "@TLSLDM" \ + : "=r" (__result)); \ + __result = (char *) __tls_get_addr (__result); \ + __asm__ ("addik %0,r0,"#x"@TLSDTPREL" \ + : "=r" (__offset)); \ + (int *) (__result + __offset); }) + + +#define TLS_GD(x) \ + ({ \ + int *__result; \ + extern void *__tls_get_addr (void *); \ + __asm__ ("mfs r20,rpc\n" \ + "addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n" \ + "addik %0,r20," #x "@TLSGD" \ + : "=r" (__result)); \ + (int *) __tls_get_addr (__result); }) + +#define TLS_LE(x) TLS_LD(x) + +#define TLS_IE(x) TLS_GD(x) diff --git a/test/tls/tls-macros.h b/test/tls/tls-macros.h index 0300dba..bd510a2 100644 --- a/test/tls/tls-macros.h +++ b/test/tls/tls-macros.h @@ -44,6 +44,10 @@ #include <tls-macros-metag.h> #endif +#ifdef __microblaze__ +#include <tls-macros-microblaze.h> +#endif + #ifdef __mips__ #include <tls-macros-mips.h> #endif |