git: 228d8c9efe1e - main - libc: split libc and syscall interposing (2/2)

From: Brooks Davis <brooks_at_FreeBSD.org>
Date: Mon, 05 Feb 2024 20:38:24 UTC
The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/src/commit/?id=228d8c9efe1e9a2946a5e64ff33362a54b9c3b5d

commit 228d8c9efe1e9a2946a5e64ff33362a54b9c3b5d
Author:     Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2024-01-16 22:51:40 +0000
Commit:     Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2024-02-05 20:34:55 +0000

    libc: split libc and syscall interposing (2/2)
    
    Move the __libc_interposing implementation to libc/gen so it doesn't end
    up in libsys.
    
    Reviewed by:    kib, emaste, imp
    Pull Request:   https://github.com/freebsd/freebsd-src/pull/908
---
 lib/libc/gen/Makefile.inc             |  1 +
 lib/libc/gen/Symbol.map               |  2 ++
 lib/libc/gen/libc_interposing_table.c | 56 +++++++++++++++++++++++++++++++++++
 lib/libc/sys/Symbol.map               |  1 -
 lib/libc/sys/interposing_table.c      | 20 -------------
 5 files changed, 59 insertions(+), 21 deletions(-)

diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc
index f657bd949cb7..5c3f029586b8 100644
--- a/lib/libc/gen/Makefile.inc
+++ b/lib/libc/gen/Makefile.inc
@@ -98,6 +98,7 @@ SRCS+=	__getosreldate.c \
 	kqueue1.c \
 	lcong48.c \
 	libc_dlopen.c \
+	libc_interposing_table.c  \
 	lockf.c \
 	lrand48.c \
 	memalign.c \
diff --git a/lib/libc/gen/Symbol.map b/lib/libc/gen/Symbol.map
index 51c7348c5cc4..ee23d6112e44 100644
--- a/lib/libc/gen/Symbol.map
+++ b/lib/libc/gen/Symbol.map
@@ -567,6 +567,8 @@ FBSDprivate_1.0 {
 	__waitpid;
 	_waitpid;
 
+	__libc_interposing_slot;
+
 	_libc_sem_init_compat;
 	_libc_sem_destroy_compat;
 	_libc_sem_open_compat;
diff --git a/lib/libc/gen/libc_interposing_table.c b/lib/libc/gen/libc_interposing_table.c
new file mode 100644
index 000000000000..6997dce86569
--- /dev/null
+++ b/lib/libc/gen/libc_interposing_table.c
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2014 The FreeBSD Foundation.
+ *
+ * Portions of this software were developed by Konstantin Belousov
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice(s), this list of conditions and the following disclaimer as
+ *    the first lines of this file unmodified other than the possible
+ *    addition of one or more copyright notices.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice(s), this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <stddef.h>
+#include "libc_private.h"
+
+#define	SLOT(a, b) \
+	[INTERPOS_##a] = (interpos_func_t)b
+interpos_func_t __libc_interposing[INTERPOS_MAX] = {
+	SLOT(system, __libc_system),
+	SLOT(tcdrain, __libc_tcdrain),
+	SLOT(_pthread_mutex_init_calloc_cb, _pthread_mutex_init_calloc_cb_stub),
+	SLOT(spinlock, __libc_spinlock_stub),
+	SLOT(spinunlock, __libc_spinunlock_stub),
+	SLOT(map_stacks_exec, __libc_map_stacks_exec),
+	SLOT(distribute_static_tls, __libc_distribute_static_tls),
+};
+#undef SLOT
+
+interpos_func_t *
+__libc_interposing_slot(int interposno)
+{
+	/* XXX: forward compat. Remove after 15.0-RELEASE. */
+	if (__libc_interposing[interposno] == NULL)
+		return (__libsys_interposing_slot(interposno));
+	return (&__libc_interposing[interposno]);
+}
diff --git a/lib/libc/sys/Symbol.map b/lib/libc/sys/Symbol.map
index ff35693d808d..3b207e59fec6 100644
--- a/lib/libc/sys/Symbol.map
+++ b/lib/libc/sys/Symbol.map
@@ -1049,7 +1049,6 @@ FBSDprivate_1.0 {
 	__sys_writev;
 
 	/* Things that aren't system calls (in sort(1) order) */
-	__libc_interposing_slot;
 	__libc_sigwait;
 	__libsys_interposing_slot;
 	__set_error_selector;
diff --git a/lib/libc/sys/interposing_table.c b/lib/libc/sys/interposing_table.c
index f7678a1352ff..4ee36da4c4c4 100644
--- a/lib/libc/sys/interposing_table.c
+++ b/lib/libc/sys/interposing_table.c
@@ -30,21 +30,10 @@
  */
 
 #include <sys/types.h>
-#include <stddef.h>
 #include "libc_private.h"
 
 #define	SLOT(a, b) \
 	[INTERPOS_##a] = (interpos_func_t)b
-interpos_func_t __libc_interposing[INTERPOS_MAX] = {
-	SLOT(system, __libc_system),
-	SLOT(tcdrain, __libc_tcdrain),
-	SLOT(_pthread_mutex_init_calloc_cb, _pthread_mutex_init_calloc_cb_stub),
-	SLOT(spinlock, __libc_spinlock_stub),
-	SLOT(spinunlock, __libc_spinunlock_stub),
-	SLOT(map_stacks_exec, __libc_map_stacks_exec),
-	SLOT(distribute_static_tls, __libc_distribute_static_tls),
-};
-
 interpos_func_t __libsys_interposing[INTERPOS_MAX] = {
 	SLOT(accept, __sys_accept),
 	SLOT(accept4, __sys_accept4),
@@ -86,15 +75,6 @@ interpos_func_t __libsys_interposing[INTERPOS_MAX] = {
 };
 #undef SLOT
 
-interpos_func_t *
-__libc_interposing_slot(int interposno)
-{
-	/* XXX: forward compat. Remove after 15.0-RELEASE. */
-	if (__libc_interposing[interposno] == NULL)
-		return (__libsys_interposing_slot(interposno));
-	return (&__libc_interposing[interposno]);
-}
-
 interpos_func_t *
 __libsys_interposing_slot(int interposno)
 {