From 90d62fd90024b879ac8783afce0c1fa2fb2c051f Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 29 Aug 2022 23:26:19 -0400 Subject: [PATCH] TLS.h: Drop inline assembly from the header. This was a holdover from BeOS, which did this as inline assembly. We do not on any platform other than 32-bit x86, and even there we may have preferred to do things a little differently on non-BeOS ABIs. Most things ported from other systems, or even native apps, are going to use _Thread_local variables anyway, which will bypass this system altogether. --- headers/os/support/TLS.h | 39 +---------------------- src/system/libroot/os/arch/arm/tls.c | 7 ---- src/system/libroot/os/arch/m68k/tls.c | 7 +--- src/system/libroot/os/arch/ppc/tls.c | 7 +--- src/system/libroot/os/arch/sparc/tls.c | 7 +--- src/system/libroot/os/arch/x86/tls.c | 5 --- src/system/libroot/os/arch/x86_64/tls.cpp | 4 --- 7 files changed, 4 insertions(+), 72 deletions(-) diff --git a/headers/os/support/TLS.h b/headers/os/support/TLS.h index 87c1f9b4e8..0a1b55215f 100644 --- a/headers/os/support/TLS.h +++ b/headers/os/support/TLS.h @@ -1,12 +1,11 @@ /* - * Copyright 2003-2007 Haiku, Inc. All rights reserved. + * Copyright 2003-2021, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _TLS_H #define _TLS_H -#include #include @@ -22,46 +21,10 @@ extern "C" { #endif /* __cplusplus */ extern int32 tls_allocate(void); - -#if !_NO_INLINE_ASM && __i386__ && __GNUC__ - -static inline void * -tls_get(int32 index) -{ - void *ret; - __asm__ __volatile__ ( - "movl %%fs:(, %1, 4), %0" - : "=r" (ret) : "r" (index)); - return ret; -} - -static inline void ** -tls_address(int32 index) -{ - void **ret; - __asm__ __volatile__ ( - "movl %%fs:0, %0\n\t" - "leal (%0, %1, 4), %0\n\t" - : "=&r" (ret) : "r" (index)); - return ret; -} - -static inline void -tls_set(int32 index, void *value) -{ - __asm__ __volatile__ ( - "movl %1, %%fs:(, %0, 4)" - : : "r" (index), "r" (value)); -} - -#else /* !_NO_INLINE_ASM && __i386__ && __GNUC__ */ - extern void *tls_get(int32 index); extern void **tls_address(int32 index); extern void tls_set(int32 index, void *value); -#endif /* !_NO_INLINE_ASM && __i386__ && __GNUC__ */ - #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/src/system/libroot/os/arch/arm/tls.c b/src/system/libroot/os/arch/arm/tls.c index 1286a28b61..c14ee33113 100644 --- a/src/system/libroot/os/arch/arm/tls.c +++ b/src/system/libroot/os/arch/arm/tls.c @@ -1,15 +1,9 @@ /* * Copyright 2019-2022, Haiku, Inc. All Rights Reserved. - * Distributed under the terms of the MIT License. - * * Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. * Distributed under the terms of the MIT License. */ -#ifndef _NO_INLINE_ASM -# define _NO_INLINE_ASM 1 -#endif - #include #include @@ -71,4 +65,3 @@ __tls_get_addr(struct tls_index *ti) { return __gRuntimeLoader->get_tls_address(ti->ti_module, ti->ti_offset); } - diff --git a/src/system/libroot/os/arch/m68k/tls.c b/src/system/libroot/os/arch/m68k/tls.c index dbc2eecee5..de625b00f5 100644 --- a/src/system/libroot/os/arch/m68k/tls.c +++ b/src/system/libroot/os/arch/m68k/tls.c @@ -1,4 +1,4 @@ -/* +/* ** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. ** Distributed under the terms of the MIT License. */ @@ -9,11 +9,6 @@ #warning FIXME: M68K -// we don't want to have the inline assembly included here -#ifndef _NO_INLINE_ASM -# define _NO_INLINE_ASM 1 -#endif - #include #include "support/TLS.h" diff --git a/src/system/libroot/os/arch/ppc/tls.c b/src/system/libroot/os/arch/ppc/tls.c index 79c0a5a632..adf1d77e51 100644 --- a/src/system/libroot/os/arch/ppc/tls.c +++ b/src/system/libroot/os/arch/ppc/tls.c @@ -1,4 +1,4 @@ -/* +/* ** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. ** Distributed under the terms of the MIT License. */ @@ -7,11 +7,6 @@ // to decide how this should be done, so it's just broken now (okay for single // threaded apps, though). -// we don't want to have the inline assembly included here -#ifndef _NO_INLINE_ASM -# define _NO_INLINE_ASM 1 -#endif - #include "support/TLS.h" #include "tls.h" diff --git a/src/system/libroot/os/arch/sparc/tls.c b/src/system/libroot/os/arch/sparc/tls.c index 79c0a5a632..adf1d77e51 100644 --- a/src/system/libroot/os/arch/sparc/tls.c +++ b/src/system/libroot/os/arch/sparc/tls.c @@ -1,4 +1,4 @@ -/* +/* ** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. ** Distributed under the terms of the MIT License. */ @@ -7,11 +7,6 @@ // to decide how this should be done, so it's just broken now (okay for single // threaded apps, though). -// we don't want to have the inline assembly included here -#ifndef _NO_INLINE_ASM -# define _NO_INLINE_ASM 1 -#endif - #include "support/TLS.h" #include "tls.h" diff --git a/src/system/libroot/os/arch/x86/tls.c b/src/system/libroot/os/arch/x86/tls.c index cdf94da3d7..4b4d13014e 100644 --- a/src/system/libroot/os/arch/x86/tls.c +++ b/src/system/libroot/os/arch/x86/tls.c @@ -5,11 +5,6 @@ */ -// we don't want to have the inline assembly included here -#ifndef _NO_INLINE_ASM -# define _NO_INLINE_ASM 1 -#endif - #include #include "support/TLS.h" diff --git a/src/system/libroot/os/arch/x86_64/tls.cpp b/src/system/libroot/os/arch/x86_64/tls.cpp index 48be9078fc..45a5489785 100644 --- a/src/system/libroot/os/arch/x86_64/tls.cpp +++ b/src/system/libroot/os/arch/x86_64/tls.cpp @@ -5,10 +5,6 @@ */ -#ifndef _NO_INLINE_ASM -# define _NO_INLINE_ASM 1 -#endif - #include #include