git: 8d26a9da0c94 - main - amd64: assume the kernel supports RDFSBASE and RDGSBASE

From: Brooks Davis <brooks_at_FreeBSD.org>
Date: Fri, 08 Aug 2025 17:15:34 UTC
The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/src/commit/?id=8d26a9da0c94f314b7e37a2784b13e2f5fb8052d

commit 8d26a9da0c94f314b7e37a2784b13e2f5fb8052d
Author:     Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2025-08-08 17:15:21 +0000
Commit:     Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2025-08-08 17:15:21 +0000

    amd64: assume the kernel supports RDFSBASE and RDGSBASE
    
    There is no need to support pre-12.0 (and thus pre-ino64) kernels in a
    15.x libc.
    
    Continue to check if the CPU supports these features before using them
    and fall back as required.
    
    Reviewed by:    kib
    Differential Revision:  https://reviews.freebsd.org/D50732
---
 lib/libsys/amd64/amd64_get_fsbase.c | 7 +------
 lib/libsys/amd64/amd64_get_gsbase.c | 7 +------
 lib/libsys/amd64/amd64_set_fsbase.c | 7 +------
 lib/libsys/amd64/amd64_set_gsbase.c | 7 +------
 libexec/rtld-elf/amd64/reloc.c      | 3 +--
 5 files changed, 5 insertions(+), 26 deletions(-)

diff --git a/lib/libsys/amd64/amd64_get_fsbase.c b/lib/libsys/amd64/amd64_get_fsbase.c
index 00f16a5e404f..b5e87f8a3ce5 100644
--- a/lib/libsys/amd64/amd64_get_fsbase.c
+++ b/lib/libsys/amd64/amd64_get_fsbase.c
@@ -30,7 +30,6 @@
  * SUCH DAMAGE.
  */
 
-#define _WANT_P_OSREL
 #include <sys/param.h>
 #include <machine/cpufunc.h>
 #include <machine/specialreg.h>
@@ -41,7 +40,6 @@
 static int
 amd64_get_fsbase_cpu(void **addr)
 {
-
 	*addr = (void *)rdfsbase();
 	return (0);
 }
@@ -49,15 +47,12 @@ amd64_get_fsbase_cpu(void **addr)
 static int
 amd64_get_fsbase_syscall(void **addr)
 {
-
 	return (sysarch(AMD64_GET_FSBASE, addr));
 }
 
 DEFINE_UIFUNC(, int, amd64_get_fsbase, (void **))
 {
-
-	if (__getosreldate() >= P_OSREL_WRFSBASE &&
-	    (cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
+	if ((cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
 		return (amd64_get_fsbase_cpu);
 	return (amd64_get_fsbase_syscall);
 }
diff --git a/lib/libsys/amd64/amd64_get_gsbase.c b/lib/libsys/amd64/amd64_get_gsbase.c
index ef135b1eed7f..51be412ddd7a 100644
--- a/lib/libsys/amd64/amd64_get_gsbase.c
+++ b/lib/libsys/amd64/amd64_get_gsbase.c
@@ -30,7 +30,6 @@
  * SUCH DAMAGE.
  */
 
-#define _WANT_P_OSREL
 #include <sys/param.h>
 #include <machine/cpufunc.h>
 #include <machine/specialreg.h>
@@ -41,7 +40,6 @@
 static int
 amd64_get_gsbase_cpu(void **addr)
 {
-
 	*addr = (void *)rdgsbase();
 	return (0);
 }
@@ -49,15 +47,12 @@ amd64_get_gsbase_cpu(void **addr)
 static int
 amd64_get_gsbase_syscall(void **addr)
 {
-
 	return (sysarch(AMD64_GET_GSBASE, addr));
 }
 
 DEFINE_UIFUNC(, int, amd64_get_gsbase, (void **))
 {
-
-	if (__getosreldate() >= P_OSREL_WRFSBASE &&
-	    (cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
+	if ((cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
 		return (amd64_get_gsbase_cpu);
 	return (amd64_get_gsbase_syscall);
 }
diff --git a/lib/libsys/amd64/amd64_set_fsbase.c b/lib/libsys/amd64/amd64_set_fsbase.c
index f1690fde6e17..5265bd712f17 100644
--- a/lib/libsys/amd64/amd64_set_fsbase.c
+++ b/lib/libsys/amd64/amd64_set_fsbase.c
@@ -30,7 +30,6 @@
  * SUCH DAMAGE.
  */
 
-#define _WANT_P_OSREL
 #include <sys/param.h>
 #include <machine/cpufunc.h>
 #include <machine/specialreg.h>
@@ -41,7 +40,6 @@
 static int
 amd64_set_fsbase_cpu(void *addr)
 {
-
 	wrfsbase((uintptr_t)addr);
 	return (0);
 }
@@ -49,15 +47,12 @@ amd64_set_fsbase_cpu(void *addr)
 static int
 amd64_set_fsbase_syscall(void *addr)
 {
-
 	return (sysarch(AMD64_SET_FSBASE, &addr));
 }
 
 DEFINE_UIFUNC(, int, amd64_set_fsbase, (void *))
 {
-
-	if (__getosreldate() >= P_OSREL_WRFSBASE &&
-	    (cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
+	if ((cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
 		return (amd64_set_fsbase_cpu);
 	return (amd64_set_fsbase_syscall);
 }
diff --git a/lib/libsys/amd64/amd64_set_gsbase.c b/lib/libsys/amd64/amd64_set_gsbase.c
index 756bbae18844..94f5736ed1ab 100644
--- a/lib/libsys/amd64/amd64_set_gsbase.c
+++ b/lib/libsys/amd64/amd64_set_gsbase.c
@@ -30,7 +30,6 @@
  * SUCH DAMAGE.
  */
 
-#define _WANT_P_OSREL
 #include <sys/param.h>
 #include <machine/cpufunc.h>
 #include <machine/specialreg.h>
@@ -41,7 +40,6 @@
 static int
 amd64_set_gsbase_cpu(void *addr)
 {
-
 	wrgsbase((uintptr_t)addr);
 	return (0);
 }
@@ -49,15 +47,12 @@ amd64_set_gsbase_cpu(void *addr)
 static int
 amd64_set_gsbase_syscall(void *addr)
 {
-
 	return (sysarch(AMD64_SET_GSBASE, &addr));
 }
 
 DEFINE_UIFUNC(, int, amd64_set_gsbase, (void *))
 {
-
-	if (__getosreldate() >= P_OSREL_WRFSBASE &&
-	    (cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
+	if ((cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
 		return (amd64_set_gsbase_cpu);
 	return (amd64_set_gsbase_syscall);
 }
diff --git a/libexec/rtld-elf/amd64/reloc.c b/libexec/rtld-elf/amd64/reloc.c
index 883e3dcdff88..b1a2069edb2f 100644
--- a/libexec/rtld-elf/amd64/reloc.c
+++ b/libexec/rtld-elf/amd64/reloc.c
@@ -548,8 +548,7 @@ allocate_initial_tls(Obj_Entry *objs)
 	 */
 	if (__getosreldate() >= P_OSREL_TLSBASE)
 		sysarch(AMD64_SET_TLSBASE, &addr);
-	else if (__getosreldate() >= P_OSREL_WRFSBASE &&
-	    (cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
+	else if ((cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
 		wrfsbase((uintptr_t)addr);
 	else
 		sysarch(AMD64_SET_FSBASE, &addr);