diff options
| author | Khem Raj <kraj@mvista.com> | 2008-07-12 00:10:28 +0000 |
|---|---|---|
| committer | Khem Raj <kraj@mvista.com> | 2008-07-12 00:10:28 +0000 |
| commit | 32c5dde1e30fd8dc1fbac830cd8c92f8e4c11ef7 (patch) | |
| tree | b69cc803bd8455f16f8933306cb1bfafbab75b75 /test/tls/tls-macros-arm.h | |
| parent | 360004f5edf8113866ec2d3a02212b3c60a0ddb7 (diff) | |
| download | uClibc-alpine-32c5dde1e30fd8dc1fbac830cd8c92f8e4c11ef7.tar.bz2 uClibc-alpine-32c5dde1e30fd8dc1fbac830cd8c92f8e4c11ef7.tar.xz | |
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Add NTPL testing support for ARM.
Diffstat (limited to 'test/tls/tls-macros-arm.h')
| -rw-r--r-- | test/tls/tls-macros-arm.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/test/tls/tls-macros-arm.h b/test/tls/tls-macros-arm.h new file mode 100644 index 000000000..94aa3a83b --- /dev/null +++ b/test/tls/tls-macros-arm.h @@ -0,0 +1,51 @@ +#define TLS_LE(x) \ + ({ int *__result; \ + void *tp = __builtin_thread_pointer (); \ + asm ("ldr %0, 1f; " \ + "add %0, %1, %0; " \ + "b 2f; " \ + "1: .word " #x "(tpoff); " \ + "2: " \ + : "=&r" (__result) : "r" (tp)); \ + __result; }) + +#define TLS_IE(x) \ + ({ int *__result; \ + void *tp = __builtin_thread_pointer (); \ + asm ("ldr %0, 1f; " \ + "3: ldr %0, [pc, %0];" \ + "add %0, %1, %0; " \ + "b 2f; " \ + "1: .word " #x "(gottpoff) + (. - 3b - 8); " \ + "2: " \ + : "=&r" (__result) : "r" (tp)); \ + __result; }) + +#define TLS_LD(x) \ + ({ char *__result; \ + int __offset; \ + extern void *__tls_get_addr (void *); \ + asm ("ldr %0, 2f; " \ + "1: add %0, pc, %0; " \ + "b 3f; " \ + "2: .word " #x "(tlsldm) + (. - 1b - 8); " \ + "3: " \ + : "=r" (__result)); \ + __result = (char *)__tls_get_addr (__result); \ + asm ("ldr %0, 1f; " \ + "b 2f; " \ + "1: .word " #x "(tlsldo); " \ + "2: " \ + : "=r" (__offset)); \ + (int *) (__result + __offset); }) + +#define TLS_GD(x) \ + ({ int *__result; \ + extern void *__tls_get_addr (void *); \ + asm ("ldr %0, 2f; " \ + "1: add %0, pc, %0; " \ + "b 3f; " \ + "2: .word " #x "(tlsgd) + (. - 1b - 8); " \ + "3: " \ + : "=r" (__result)); \ + (int *)__tls_get_addr (__result); }) |
