Move liblttng-ust-cyg-profile to 'src/lib/'
authorMichael Jeanson <mjeanson@efficios.com>
Fri, 9 Apr 2021 18:17:48 +0000 (14:17 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 13 Apr 2021 18:06:01 +0000 (14:06 -0400)
Move all public libraries under 'src/lib/'.

This is part of an effort to standardize our autotools setup across
projects to simplify maintenance.

Change-Id: Ia06cfce8b57db814dc17ba01829e1498c4cb7aea
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
22 files changed:
.gitignore
configure.ac
src/Makefile.am
src/lib/Makefile.am
src/lib/lttng-ust-cyg-profile/Makefile.am [new file with mode: 0644]
src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.c [new file with mode: 0644]
src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.h [new file with mode: 0644]
src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile.c [new file with mode: 0644]
src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile.h [new file with mode: 0644]
src/lib/lttng-ust-cyg-profile/run [new file with mode: 0755]
src/lib/lttng-ust-cyg-profile/run-fast [new file with mode: 0755]
src/lib/lttng-ust-fork/Makefile.am [new file with mode: 0644]
src/lib/lttng-ust-fork/ustfork.c [new file with mode: 0644]
src/liblttng-ust-cyg-profile/Makefile.am [deleted file]
src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.c [deleted file]
src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.h [deleted file]
src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile.c [deleted file]
src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile.h [deleted file]
src/liblttng-ust-cyg-profile/run [deleted file]
src/liblttng-ust-cyg-profile/run-fast [deleted file]
src/liblttng-ust-fork/Makefile.am [deleted file]
src/liblttng-ust-fork/ustfork.c [deleted file]

index 92966cc85ffd03cd768f4da34db710d8c4e63820..714646dd1a26bdf7dbe6c427e23845192b81515a 100644 (file)
@@ -128,10 +128,10 @@ cscope.*
 /src/libcounter/Makefile
 /src/liblttng-ust-comm/Makefile
 /src/liblttng-ust-ctl/Makefile
-/src/liblttng-ust-cyg-profile/Makefile
+/src/lib/lttng-ust-cyg-profile/Makefile
 /src/liblttng-ust-dl/Makefile
 /src/liblttng-ust-fd/Makefile
-/src/liblttng-ust-fork/Makefile
+/src/lib/lttng-ust-fork/Makefile
 /src/liblttng-ust-java-agent/Makefile
 /src/liblttng-ust-java-agent/java/Makefile
 /src/liblttng-ust-java-agent/java/lttng-ust-agent-all/Makefile
index c81e17e4b1a1e2178a999d57f79cdc59bc369cb8..7c2dd90262331933451bb788701dc31a423a8ee5 100644 (file)
@@ -522,10 +522,10 @@ AC_CONFIG_FILES([
   src/libcounter/Makefile
   src/liblttng-ust-comm/Makefile
   src/liblttng-ust-ctl/Makefile
-  src/liblttng-ust-cyg-profile/Makefile
+  src/lib/lttng-ust-cyg-profile/Makefile
   src/liblttng-ust-dl/Makefile
   src/liblttng-ust-fd/Makefile
-  src/liblttng-ust-fork/Makefile
+  src/lib/lttng-ust-fork/Makefile
   src/liblttng-ust-java-agent/java/lttng-ust-agent-all/Makefile
   src/liblttng-ust-java-agent/java/lttng-ust-agent-common/Makefile
   src/liblttng-ust-java-agent/java/lttng-ust-agent-jul/Makefile
index 38c640bbe55bf74d956fa69f4e498958c4b79573..33f9ed14deb42d3549d19087f08c5e41ede30f53 100644 (file)
@@ -8,9 +8,7 @@ SUBDIRS = \
        liblttng-ust \
        liblttng-ust-ctl \
        lib \
-       liblttng-ust-fd \
-       liblttng-ust-fork \
-       liblttng-ust-cyg-profile
+       liblttng-ust-fd
 
 if ENABLE_UST_DL
 SUBDIRS += liblttng-ust-dl
index 384b8481090713410f3c7cc718890f71479c3bc8..bbaf9a01daead97ce7c92a710e96f850e77f714f 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: LGPL-2.1-only
 
 SUBDIRS = \
+       lttng-ust-fork \
+       lttng-ust-cyg-profile \
        lttng-ust-libc-wrapper
 
 if ENABLE_PYTHON_AGENT
diff --git a/src/lib/lttng-ust-cyg-profile/Makefile.am b/src/lib/lttng-ust-cyg-profile/Makefile.am
new file mode 100644 (file)
index 0000000..7e8b226
--- /dev/null
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: LGPL-2.1-only
+
+AM_CFLAGS += -I$(srcdir) -fno-strict-aliasing
+
+lib_LTLIBRARIES = liblttng-ust-cyg-profile.la \
+       liblttng-ust-cyg-profile-fast.la
+
+liblttng_ust_cyg_profile_la_SOURCES = \
+       lttng-ust-cyg-profile.c \
+       lttng-ust-cyg-profile.h
+
+liblttng_ust_cyg_profile_la_LIBADD = \
+       $(top_builddir)/src/liblttng-ust/liblttng-ust.la \
+       $(DL_LIBS)
+
+liblttng_ust_cyg_profile_la_LDFLAGS = -version-info $(LTTNG_UST_LIBRARY_VERSION)
+
+liblttng_ust_cyg_profile_fast_la_SOURCES = \
+       lttng-ust-cyg-profile-fast.c \
+       lttng-ust-cyg-profile-fast.h
+
+liblttng_ust_cyg_profile_fast_la_LIBADD = \
+       $(top_builddir)/src/liblttng-ust/liblttng-ust.la \
+       $(DL_LIBS)
+
+liblttng_ust_cyg_profile_fast_la_LDFLAGS = -version-info $(LTTNG_UST_LIBRARY_VERSION)
+
+dist_noinst_SCRIPTS = run run-fast
diff --git a/src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.c b/src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.c
new file mode 100644 (file)
index 0000000..bee7ac0
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ *
+ * Copyright (C) 2011-2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ */
+
+#define _LGPL_SOURCE
+#include <dlfcn.h>
+#include <sys/types.h>
+#include <stdio.h>
+
+#define TRACEPOINT_DEFINE
+#define TRACEPOINT_CREATE_PROBES
+#define TP_IP_PARAM func_addr
+#include "lttng-ust-cyg-profile-fast.h"
+
+void __cyg_profile_func_enter(void *this_fn, void *call_site)
+       __attribute__((no_instrument_function));
+
+void __cyg_profile_func_exit(void *this_fn, void *call_site)
+       __attribute__((no_instrument_function));
+
+void __cyg_profile_func_enter(void *this_fn, void *call_site __attribute__((unused)))
+{
+       tracepoint(lttng_ust_cyg_profile_fast, func_entry, this_fn);
+}
+
+void __cyg_profile_func_exit(void *this_fn, void *call_site __attribute__((unused)))
+{
+       tracepoint(lttng_ust_cyg_profile_fast, func_exit, this_fn);
+}
diff --git a/src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.h b/src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.h
new file mode 100644 (file)
index 0000000..f2cdaab
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2011-2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ */
+
+#undef TRACEPOINT_PROVIDER
+#define TRACEPOINT_PROVIDER lttng_ust_cyg_profile_fast
+
+#if !defined(_TRACEPOINT_LTTNG_UST_CYG_PROFILE_FAST_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define _TRACEPOINT_LTTNG_UST_CYG_PROFILE_FAST_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <lttng/tracepoint.h>
+
+TRACEPOINT_EVENT(lttng_ust_cyg_profile_fast, func_entry,
+       TP_ARGS(void *, func_addr),
+       TP_FIELDS(
+               ctf_integer_hex(unsigned long, addr,
+                       (unsigned long) func_addr)
+       )
+)
+
+TRACEPOINT_LOGLEVEL(lttng_ust_cyg_profile_fast, func_entry,
+       TRACE_DEBUG_FUNCTION)
+
+TRACEPOINT_EVENT(lttng_ust_cyg_profile_fast, func_exit,
+       TP_ARGS(void *, func_addr),
+       TP_FIELDS(
+               ctf_unused(func_addr)
+       )
+)
+
+TRACEPOINT_LOGLEVEL(lttng_ust_cyg_profile_fast, func_exit,
+       TRACE_DEBUG_FUNCTION)
+
+#endif /* _TRACEPOINT_LTTNG_UST_CYG_PROFILE_FAST_H */
+
+#undef TRACEPOINT_INCLUDE
+#define TRACEPOINT_INCLUDE "./lttng-ust-cyg-profile-fast.h"
+
+/* This part must be outside ifdef protection */
+#include <lttng/tracepoint-event.h>
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile.c b/src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile.c
new file mode 100644 (file)
index 0000000..e81e115
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ *
+ * Copyright (C) 2011-2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ */
+
+#define _LGPL_SOURCE
+#include <dlfcn.h>
+#include <sys/types.h>
+#include <stdio.h>
+
+#define TRACEPOINT_DEFINE
+#define TRACEPOINT_CREATE_PROBES
+#define TP_IP_PARAM func_addr
+#include "lttng-ust-cyg-profile.h"
+
+void __cyg_profile_func_enter(void *this_fn, void *call_site)
+       __attribute__((no_instrument_function));
+
+void __cyg_profile_func_exit(void *this_fn, void *call_site)
+       __attribute__((no_instrument_function));
+
+void __cyg_profile_func_enter(void *this_fn, void *call_site)
+{
+       tracepoint(lttng_ust_cyg_profile, func_entry, this_fn, call_site);
+}
+
+void __cyg_profile_func_exit(void *this_fn, void *call_site)
+{
+       tracepoint(lttng_ust_cyg_profile, func_exit, this_fn, call_site);
+}
diff --git a/src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile.h b/src/lib/lttng-ust-cyg-profile/lttng-ust-cyg-profile.h
new file mode 100644 (file)
index 0000000..8e98237
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2011-2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ */
+
+#undef TRACEPOINT_PROVIDER
+#define TRACEPOINT_PROVIDER lttng_ust_cyg_profile
+
+#if !defined(_TRACEPOINT_LTTNG_UST_CYG_PROFILE_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define _TRACEPOINT_LTTNG_UST_CYG_PROFILE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <lttng/tracepoint.h>
+
+TRACEPOINT_EVENT_CLASS(lttng_ust_cyg_profile, func_class,
+       TP_ARGS(void *, func_addr, void *, call_site),
+       TP_FIELDS(
+               ctf_integer_hex(unsigned long, addr,
+                       (unsigned long) func_addr)
+               ctf_integer_hex(unsigned long, call_site,
+                       (unsigned long) call_site)
+       )
+)
+
+TRACEPOINT_EVENT_INSTANCE(lttng_ust_cyg_profile, func_class,
+       func_entry,
+       TP_ARGS(void *, func_addr, void *, call_site)
+)
+
+TRACEPOINT_LOGLEVEL(lttng_ust_cyg_profile, func_entry,
+       TRACE_DEBUG_FUNCTION)
+
+TRACEPOINT_EVENT_INSTANCE(lttng_ust_cyg_profile, func_class,
+       func_exit,
+       TP_ARGS(void *, func_addr, void *, call_site)
+)
+
+TRACEPOINT_LOGLEVEL(lttng_ust_cyg_profile, func_exit,
+       TRACE_DEBUG_FUNCTION)
+
+#endif /* _TRACEPOINT_LTTNG_UST_CYG_PROFILE_H */
+
+#undef TRACEPOINT_INCLUDE
+#define TRACEPOINT_INCLUDE "./lttng-ust-cyg-profile.h"
+
+/* This part must be outside ifdef protection */
+#include <lttng/tracepoint-event.h>
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/lib/lttng-ust-cyg-profile/run b/src/lib/lttng-ust-cyg-profile/run
new file mode 100755 (executable)
index 0000000..8df97ff
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+#
+# SPDX-License-Identifier: LGPL-2.1-only
+
+LD_VERBOSE=1 LD_PRELOAD=.libs/liblttng-ust-cyg-profile.so ${*}
diff --git a/src/lib/lttng-ust-cyg-profile/run-fast b/src/lib/lttng-ust-cyg-profile/run-fast
new file mode 100755 (executable)
index 0000000..3506bb8
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+#
+# SPDX-License-Identifier: LGPL-2.1-only
+
+LD_VERBOSE=1 LD_PRELOAD=.libs/liblttng-ust-cyg-profile-fast.so ${*}
diff --git a/src/lib/lttng-ust-fork/Makefile.am b/src/lib/lttng-ust-fork/Makefile.am
new file mode 100644 (file)
index 0000000..b5feca4
--- /dev/null
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: LGPL-2.1-only
+
+AM_CFLAGS += -fno-strict-aliasing
+
+lib_LTLIBRARIES = liblttng-ust-fork.la
+liblttng_ust_fork_la_SOURCES = ustfork.c
+liblttng_ust_fork_la_LIBADD = \
+       $(top_builddir)/src/liblttng-ust/liblttng-ust.la \
+       $(DL_LIBS)
+
+liblttng_ust_fork_la_CFLAGS = -DUST_COMPONENT=liblttng-ust-fork $(AM_CFLAGS)
+
+liblttng_ust_fork_la_LDFLAGS = -version-info $(LTTNG_UST_LIBRARY_VERSION)
diff --git a/src/lib/lttng-ust-fork/ustfork.c b/src/lib/lttng-ust-fork/ustfork.c
new file mode 100644 (file)
index 0000000..3eb62d2
--- /dev/null
@@ -0,0 +1,442 @@
+/*
+ * SPDX-License-Identifier: LGPL-2.1-only
+ *
+ * Copyright (C) 2009  Pierre-Marc Fournier
+ * Copyright (C) 2011-2012  Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ */
+
+/* Has to be included first to override dlfcn.h */
+#include <common/compat/dlfcn.h>
+
+#include <unistd.h>
+#include <stdio.h>
+#include <signal.h>
+#include <sched.h>
+#include <stdarg.h>
+#include <errno.h>
+
+#include <lttng/ust-fork.h>
+
+pid_t fork(void)
+{
+       static pid_t (*plibc_func)(void) = NULL;
+       sigset_t sigset;
+       pid_t retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "fork");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"fork\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       lttng_ust_before_fork(&sigset);
+       /* Do the real fork */
+       retval = plibc_func();
+       saved_errno = errno;
+       if (retval == 0) {
+               /* child */
+               lttng_ust_after_fork_child(&sigset);
+       } else {
+               lttng_ust_after_fork_parent(&sigset);
+       }
+       errno = saved_errno;
+       return retval;
+}
+
+int daemon(int nochdir, int noclose)
+{
+       static int (*plibc_func)(int nochdir, int noclose) = NULL;
+       sigset_t sigset;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "daemon");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"daemon\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       lttng_ust_before_fork(&sigset);
+       /* Do the real daemon call */
+       retval = plibc_func(nochdir, noclose);
+       saved_errno = errno;
+       if (retval == 0) {
+               /* child, parent called _exit() directly */
+               lttng_ust_after_fork_child(&sigset);
+       } else {
+               /* on error in the parent */
+               lttng_ust_after_fork_parent(&sigset);
+       }
+       errno = saved_errno;
+       return retval;
+}
+
+int setuid(uid_t uid)
+{
+       static int (*plibc_func)(uid_t uid) = NULL;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "setuid");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"setuid\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       /* Do the real setuid */
+       retval = plibc_func(uid);
+       saved_errno = errno;
+
+       lttng_ust_after_setuid();
+
+       errno = saved_errno;
+       return retval;
+}
+
+int setgid(gid_t gid)
+{
+       static int (*plibc_func)(gid_t gid) = NULL;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "setgid");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"setgid\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       /* Do the real setgid */
+       retval = plibc_func(gid);
+       saved_errno = errno;
+
+       lttng_ust_after_setgid();
+
+       errno = saved_errno;
+       return retval;
+}
+
+int seteuid(uid_t euid)
+{
+       static int (*plibc_func)(uid_t euid) = NULL;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "seteuid");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"seteuid\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       /* Do the real seteuid */
+       retval = plibc_func(euid);
+       saved_errno = errno;
+
+       lttng_ust_after_seteuid();
+
+       errno = saved_errno;
+       return retval;
+}
+
+int setegid(gid_t egid)
+{
+       static int (*plibc_func)(gid_t egid) = NULL;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "setegid");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"setegid\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       /* Do the real setegid */
+       retval = plibc_func(egid);
+       saved_errno = errno;
+
+       lttng_ust_after_setegid();
+
+       errno = saved_errno;
+       return retval;
+}
+
+int setreuid(uid_t ruid, uid_t euid)
+{
+       static int (*plibc_func)(uid_t ruid, uid_t euid) = NULL;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "setreuid");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"setreuid\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       /* Do the real setreuid */
+       retval = plibc_func(ruid, euid);
+       saved_errno = errno;
+
+       lttng_ust_after_setreuid();
+
+       errno = saved_errno;
+       return retval;
+}
+
+int setregid(gid_t rgid, gid_t egid)
+{
+       static int (*plibc_func)(gid_t rgid, gid_t egid) = NULL;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "setregid");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"setregid\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       /* Do the real setregid */
+       retval = plibc_func(rgid, egid);
+       saved_errno = errno;
+
+       lttng_ust_after_setregid();
+
+       errno = saved_errno;
+       return retval;
+}
+
+#ifdef __linux__
+
+struct user_desc;
+
+struct ustfork_clone_info {
+       int (*fn)(void *);
+       void *arg;
+       sigset_t sigset;
+};
+
+static int clone_fn(void *arg)
+{
+       struct ustfork_clone_info *info = (struct ustfork_clone_info *) arg;
+
+       /* clone is now done and we are in child */
+       lttng_ust_after_fork_child(&info->sigset);
+       return info->fn(info->arg);
+}
+
+int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...)
+{
+       static int (*plibc_func)(int (*fn)(void *), void *child_stack,
+                       int flags, void *arg, pid_t *ptid,
+                       struct user_desc *tls, pid_t *ctid) = NULL;
+       /* var args */
+       pid_t *ptid;
+       struct user_desc *tls;
+       pid_t *ctid;
+       /* end of var args */
+       va_list ap;
+       int retval;
+       int saved_errno;
+
+       va_start(ap, arg);
+       ptid = va_arg(ap, pid_t *);
+       tls = va_arg(ap, struct user_desc *);
+       ctid = va_arg(ap, pid_t *);
+       va_end(ap);
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "clone");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"clone\" symbol.\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       if (flags & CLONE_VM) {
+               /*
+                * Creating a thread, no need to intervene, just pass on
+                * the arguments.
+                */
+               retval = plibc_func(fn, child_stack, flags, arg, ptid,
+                               tls, ctid);
+               saved_errno = errno;
+       } else {
+               /* Creating a real process, we need to intervene. */
+               struct ustfork_clone_info info = { .fn = fn, .arg = arg };
+
+               lttng_ust_before_fork(&info.sigset);
+               retval = plibc_func(clone_fn, child_stack, flags, &info,
+                               ptid, tls, ctid);
+               saved_errno = errno;
+               /* The child doesn't get here. */
+               lttng_ust_after_fork_parent(&info.sigset);
+       }
+       errno = saved_errno;
+       return retval;
+}
+
+int setns(int fd, int nstype)
+{
+       static int (*plibc_func)(int fd, int nstype) = NULL;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "setns");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"setns\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       /* Do the real setns */
+       retval = plibc_func(fd, nstype);
+       saved_errno = errno;
+
+       lttng_ust_after_setns();
+
+       errno = saved_errno;
+       return retval;
+}
+
+int unshare(int flags)
+{
+       static int (*plibc_func)(int flags) = NULL;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "unshare");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"unshare\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       /* Do the real setns */
+       retval = plibc_func(flags);
+       saved_errno = errno;
+
+       lttng_ust_after_unshare();
+
+       errno = saved_errno;
+       return retval;
+}
+
+int setresuid(uid_t ruid, uid_t euid, uid_t suid)
+{
+       static int (*plibc_func)(uid_t ruid, uid_t euid, uid_t suid) = NULL;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "setresuid");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"setresuid\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       /* Do the real setresuid */
+       retval = plibc_func(ruid, euid, suid);
+       saved_errno = errno;
+
+       lttng_ust_after_setresuid();
+
+       errno = saved_errno;
+       return retval;
+}
+
+int setresgid(gid_t rgid, gid_t egid, gid_t sgid)
+{
+       static int (*plibc_func)(gid_t rgid, gid_t egid, gid_t sgid) = NULL;
+       int retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "setresgid");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"setresgid\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       /* Do the real setresgid */
+       retval = plibc_func(rgid, egid, sgid);
+       saved_errno = errno;
+
+       lttng_ust_after_setresgid();
+
+       errno = saved_errno;
+       return retval;
+}
+
+#elif defined (__FreeBSD__)
+
+pid_t rfork(int flags)
+{
+       static pid_t (*plibc_func)(void) = NULL;
+       sigset_t sigset;
+       pid_t retval;
+       int saved_errno;
+
+       if (plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "rfork");
+               if (plibc_func == NULL) {
+                       fprintf(stderr, "libustfork: unable to find \"rfork\" symbol\n");
+                       errno = ENOSYS;
+                       return -1;
+               }
+       }
+
+       lttng_ust_before_fork(&sigset);
+       /* Do the real rfork */
+       retval = plibc_func();
+       saved_errno = errno;
+       if (retval == 0) {
+               /* child */
+               lttng_ust_after_fork_child(&sigset);
+       } else {
+               lttng_ust_after_fork_parent(&sigset);
+       }
+       errno = saved_errno;
+       return retval;
+}
+
+/*
+ * On BSD, no need to override vfork, because it runs in the context of
+ * the parent, with parent waiting until execve or exit is executed in
+ * the child.
+ */
+
+#else
+#warning "Unknown OS. You might want to ensure that fork/clone/vfork/fork handling is complete."
+#endif
diff --git a/src/liblttng-ust-cyg-profile/Makefile.am b/src/liblttng-ust-cyg-profile/Makefile.am
deleted file mode 100644 (file)
index 7e8b226..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-only
-
-AM_CFLAGS += -I$(srcdir) -fno-strict-aliasing
-
-lib_LTLIBRARIES = liblttng-ust-cyg-profile.la \
-       liblttng-ust-cyg-profile-fast.la
-
-liblttng_ust_cyg_profile_la_SOURCES = \
-       lttng-ust-cyg-profile.c \
-       lttng-ust-cyg-profile.h
-
-liblttng_ust_cyg_profile_la_LIBADD = \
-       $(top_builddir)/src/liblttng-ust/liblttng-ust.la \
-       $(DL_LIBS)
-
-liblttng_ust_cyg_profile_la_LDFLAGS = -version-info $(LTTNG_UST_LIBRARY_VERSION)
-
-liblttng_ust_cyg_profile_fast_la_SOURCES = \
-       lttng-ust-cyg-profile-fast.c \
-       lttng-ust-cyg-profile-fast.h
-
-liblttng_ust_cyg_profile_fast_la_LIBADD = \
-       $(top_builddir)/src/liblttng-ust/liblttng-ust.la \
-       $(DL_LIBS)
-
-liblttng_ust_cyg_profile_fast_la_LDFLAGS = -version-info $(LTTNG_UST_LIBRARY_VERSION)
-
-dist_noinst_SCRIPTS = run run-fast
diff --git a/src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.c b/src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.c
deleted file mode 100644 (file)
index bee7ac0..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * SPDX-License-Identifier: LGPL-2.1-or-later
- *
- * Copyright (C) 2011-2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- */
-
-#define _LGPL_SOURCE
-#include <dlfcn.h>
-#include <sys/types.h>
-#include <stdio.h>
-
-#define TRACEPOINT_DEFINE
-#define TRACEPOINT_CREATE_PROBES
-#define TP_IP_PARAM func_addr
-#include "lttng-ust-cyg-profile-fast.h"
-
-void __cyg_profile_func_enter(void *this_fn, void *call_site)
-       __attribute__((no_instrument_function));
-
-void __cyg_profile_func_exit(void *this_fn, void *call_site)
-       __attribute__((no_instrument_function));
-
-void __cyg_profile_func_enter(void *this_fn, void *call_site __attribute__((unused)))
-{
-       tracepoint(lttng_ust_cyg_profile_fast, func_entry, this_fn);
-}
-
-void __cyg_profile_func_exit(void *this_fn, void *call_site __attribute__((unused)))
-{
-       tracepoint(lttng_ust_cyg_profile_fast, func_exit, this_fn);
-}
diff --git a/src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.h b/src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile-fast.h
deleted file mode 100644 (file)
index f2cdaab..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * SPDX-License-Identifier: MIT
- *
- * Copyright (C) 2011-2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- */
-
-#undef TRACEPOINT_PROVIDER
-#define TRACEPOINT_PROVIDER lttng_ust_cyg_profile_fast
-
-#if !defined(_TRACEPOINT_LTTNG_UST_CYG_PROFILE_FAST_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
-#define _TRACEPOINT_LTTNG_UST_CYG_PROFILE_FAST_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <lttng/tracepoint.h>
-
-TRACEPOINT_EVENT(lttng_ust_cyg_profile_fast, func_entry,
-       TP_ARGS(void *, func_addr),
-       TP_FIELDS(
-               ctf_integer_hex(unsigned long, addr,
-                       (unsigned long) func_addr)
-       )
-)
-
-TRACEPOINT_LOGLEVEL(lttng_ust_cyg_profile_fast, func_entry,
-       TRACE_DEBUG_FUNCTION)
-
-TRACEPOINT_EVENT(lttng_ust_cyg_profile_fast, func_exit,
-       TP_ARGS(void *, func_addr),
-       TP_FIELDS(
-               ctf_unused(func_addr)
-       )
-)
-
-TRACEPOINT_LOGLEVEL(lttng_ust_cyg_profile_fast, func_exit,
-       TRACE_DEBUG_FUNCTION)
-
-#endif /* _TRACEPOINT_LTTNG_UST_CYG_PROFILE_FAST_H */
-
-#undef TRACEPOINT_INCLUDE
-#define TRACEPOINT_INCLUDE "./lttng-ust-cyg-profile-fast.h"
-
-/* This part must be outside ifdef protection */
-#include <lttng/tracepoint-event.h>
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile.c b/src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile.c
deleted file mode 100644 (file)
index e81e115..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * SPDX-License-Identifier: LGPL-2.1-or-later
- *
- * Copyright (C) 2011-2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- */
-
-#define _LGPL_SOURCE
-#include <dlfcn.h>
-#include <sys/types.h>
-#include <stdio.h>
-
-#define TRACEPOINT_DEFINE
-#define TRACEPOINT_CREATE_PROBES
-#define TP_IP_PARAM func_addr
-#include "lttng-ust-cyg-profile.h"
-
-void __cyg_profile_func_enter(void *this_fn, void *call_site)
-       __attribute__((no_instrument_function));
-
-void __cyg_profile_func_exit(void *this_fn, void *call_site)
-       __attribute__((no_instrument_function));
-
-void __cyg_profile_func_enter(void *this_fn, void *call_site)
-{
-       tracepoint(lttng_ust_cyg_profile, func_entry, this_fn, call_site);
-}
-
-void __cyg_profile_func_exit(void *this_fn, void *call_site)
-{
-       tracepoint(lttng_ust_cyg_profile, func_exit, this_fn, call_site);
-}
diff --git a/src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile.h b/src/liblttng-ust-cyg-profile/lttng-ust-cyg-profile.h
deleted file mode 100644 (file)
index 8e98237..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * SPDX-License-Identifier: MIT
- *
- * Copyright (C) 2011-2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- */
-
-#undef TRACEPOINT_PROVIDER
-#define TRACEPOINT_PROVIDER lttng_ust_cyg_profile
-
-#if !defined(_TRACEPOINT_LTTNG_UST_CYG_PROFILE_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
-#define _TRACEPOINT_LTTNG_UST_CYG_PROFILE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <lttng/tracepoint.h>
-
-TRACEPOINT_EVENT_CLASS(lttng_ust_cyg_profile, func_class,
-       TP_ARGS(void *, func_addr, void *, call_site),
-       TP_FIELDS(
-               ctf_integer_hex(unsigned long, addr,
-                       (unsigned long) func_addr)
-               ctf_integer_hex(unsigned long, call_site,
-                       (unsigned long) call_site)
-       )
-)
-
-TRACEPOINT_EVENT_INSTANCE(lttng_ust_cyg_profile, func_class,
-       func_entry,
-       TP_ARGS(void *, func_addr, void *, call_site)
-)
-
-TRACEPOINT_LOGLEVEL(lttng_ust_cyg_profile, func_entry,
-       TRACE_DEBUG_FUNCTION)
-
-TRACEPOINT_EVENT_INSTANCE(lttng_ust_cyg_profile, func_class,
-       func_exit,
-       TP_ARGS(void *, func_addr, void *, call_site)
-)
-
-TRACEPOINT_LOGLEVEL(lttng_ust_cyg_profile, func_exit,
-       TRACE_DEBUG_FUNCTION)
-
-#endif /* _TRACEPOINT_LTTNG_UST_CYG_PROFILE_H */
-
-#undef TRACEPOINT_INCLUDE
-#define TRACEPOINT_INCLUDE "./lttng-ust-cyg-profile.h"
-
-/* This part must be outside ifdef protection */
-#include <lttng/tracepoint-event.h>
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/src/liblttng-ust-cyg-profile/run b/src/liblttng-ust-cyg-profile/run
deleted file mode 100755 (executable)
index 8df97ff..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-#
-# SPDX-License-Identifier: LGPL-2.1-only
-
-LD_VERBOSE=1 LD_PRELOAD=.libs/liblttng-ust-cyg-profile.so ${*}
diff --git a/src/liblttng-ust-cyg-profile/run-fast b/src/liblttng-ust-cyg-profile/run-fast
deleted file mode 100755 (executable)
index 3506bb8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-#
-# SPDX-License-Identifier: LGPL-2.1-only
-
-LD_VERBOSE=1 LD_PRELOAD=.libs/liblttng-ust-cyg-profile-fast.so ${*}
diff --git a/src/liblttng-ust-fork/Makefile.am b/src/liblttng-ust-fork/Makefile.am
deleted file mode 100644 (file)
index b5feca4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-only
-
-AM_CFLAGS += -fno-strict-aliasing
-
-lib_LTLIBRARIES = liblttng-ust-fork.la
-liblttng_ust_fork_la_SOURCES = ustfork.c
-liblttng_ust_fork_la_LIBADD = \
-       $(top_builddir)/src/liblttng-ust/liblttng-ust.la \
-       $(DL_LIBS)
-
-liblttng_ust_fork_la_CFLAGS = -DUST_COMPONENT=liblttng-ust-fork $(AM_CFLAGS)
-
-liblttng_ust_fork_la_LDFLAGS = -version-info $(LTTNG_UST_LIBRARY_VERSION)
diff --git a/src/liblttng-ust-fork/ustfork.c b/src/liblttng-ust-fork/ustfork.c
deleted file mode 100644 (file)
index 3eb62d2..0000000
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * SPDX-License-Identifier: LGPL-2.1-only
- *
- * Copyright (C) 2009  Pierre-Marc Fournier
- * Copyright (C) 2011-2012  Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- */
-
-/* Has to be included first to override dlfcn.h */
-#include <common/compat/dlfcn.h>
-
-#include <unistd.h>
-#include <stdio.h>
-#include <signal.h>
-#include <sched.h>
-#include <stdarg.h>
-#include <errno.h>
-
-#include <lttng/ust-fork.h>
-
-pid_t fork(void)
-{
-       static pid_t (*plibc_func)(void) = NULL;
-       sigset_t sigset;
-       pid_t retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "fork");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"fork\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       lttng_ust_before_fork(&sigset);
-       /* Do the real fork */
-       retval = plibc_func();
-       saved_errno = errno;
-       if (retval == 0) {
-               /* child */
-               lttng_ust_after_fork_child(&sigset);
-       } else {
-               lttng_ust_after_fork_parent(&sigset);
-       }
-       errno = saved_errno;
-       return retval;
-}
-
-int daemon(int nochdir, int noclose)
-{
-       static int (*plibc_func)(int nochdir, int noclose) = NULL;
-       sigset_t sigset;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "daemon");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"daemon\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       lttng_ust_before_fork(&sigset);
-       /* Do the real daemon call */
-       retval = plibc_func(nochdir, noclose);
-       saved_errno = errno;
-       if (retval == 0) {
-               /* child, parent called _exit() directly */
-               lttng_ust_after_fork_child(&sigset);
-       } else {
-               /* on error in the parent */
-               lttng_ust_after_fork_parent(&sigset);
-       }
-       errno = saved_errno;
-       return retval;
-}
-
-int setuid(uid_t uid)
-{
-       static int (*plibc_func)(uid_t uid) = NULL;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "setuid");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"setuid\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       /* Do the real setuid */
-       retval = plibc_func(uid);
-       saved_errno = errno;
-
-       lttng_ust_after_setuid();
-
-       errno = saved_errno;
-       return retval;
-}
-
-int setgid(gid_t gid)
-{
-       static int (*plibc_func)(gid_t gid) = NULL;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "setgid");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"setgid\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       /* Do the real setgid */
-       retval = plibc_func(gid);
-       saved_errno = errno;
-
-       lttng_ust_after_setgid();
-
-       errno = saved_errno;
-       return retval;
-}
-
-int seteuid(uid_t euid)
-{
-       static int (*plibc_func)(uid_t euid) = NULL;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "seteuid");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"seteuid\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       /* Do the real seteuid */
-       retval = plibc_func(euid);
-       saved_errno = errno;
-
-       lttng_ust_after_seteuid();
-
-       errno = saved_errno;
-       return retval;
-}
-
-int setegid(gid_t egid)
-{
-       static int (*plibc_func)(gid_t egid) = NULL;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "setegid");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"setegid\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       /* Do the real setegid */
-       retval = plibc_func(egid);
-       saved_errno = errno;
-
-       lttng_ust_after_setegid();
-
-       errno = saved_errno;
-       return retval;
-}
-
-int setreuid(uid_t ruid, uid_t euid)
-{
-       static int (*plibc_func)(uid_t ruid, uid_t euid) = NULL;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "setreuid");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"setreuid\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       /* Do the real setreuid */
-       retval = plibc_func(ruid, euid);
-       saved_errno = errno;
-
-       lttng_ust_after_setreuid();
-
-       errno = saved_errno;
-       return retval;
-}
-
-int setregid(gid_t rgid, gid_t egid)
-{
-       static int (*plibc_func)(gid_t rgid, gid_t egid) = NULL;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "setregid");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"setregid\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       /* Do the real setregid */
-       retval = plibc_func(rgid, egid);
-       saved_errno = errno;
-
-       lttng_ust_after_setregid();
-
-       errno = saved_errno;
-       return retval;
-}
-
-#ifdef __linux__
-
-struct user_desc;
-
-struct ustfork_clone_info {
-       int (*fn)(void *);
-       void *arg;
-       sigset_t sigset;
-};
-
-static int clone_fn(void *arg)
-{
-       struct ustfork_clone_info *info = (struct ustfork_clone_info *) arg;
-
-       /* clone is now done and we are in child */
-       lttng_ust_after_fork_child(&info->sigset);
-       return info->fn(info->arg);
-}
-
-int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...)
-{
-       static int (*plibc_func)(int (*fn)(void *), void *child_stack,
-                       int flags, void *arg, pid_t *ptid,
-                       struct user_desc *tls, pid_t *ctid) = NULL;
-       /* var args */
-       pid_t *ptid;
-       struct user_desc *tls;
-       pid_t *ctid;
-       /* end of var args */
-       va_list ap;
-       int retval;
-       int saved_errno;
-
-       va_start(ap, arg);
-       ptid = va_arg(ap, pid_t *);
-       tls = va_arg(ap, struct user_desc *);
-       ctid = va_arg(ap, pid_t *);
-       va_end(ap);
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "clone");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"clone\" symbol.\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       if (flags & CLONE_VM) {
-               /*
-                * Creating a thread, no need to intervene, just pass on
-                * the arguments.
-                */
-               retval = plibc_func(fn, child_stack, flags, arg, ptid,
-                               tls, ctid);
-               saved_errno = errno;
-       } else {
-               /* Creating a real process, we need to intervene. */
-               struct ustfork_clone_info info = { .fn = fn, .arg = arg };
-
-               lttng_ust_before_fork(&info.sigset);
-               retval = plibc_func(clone_fn, child_stack, flags, &info,
-                               ptid, tls, ctid);
-               saved_errno = errno;
-               /* The child doesn't get here. */
-               lttng_ust_after_fork_parent(&info.sigset);
-       }
-       errno = saved_errno;
-       return retval;
-}
-
-int setns(int fd, int nstype)
-{
-       static int (*plibc_func)(int fd, int nstype) = NULL;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "setns");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"setns\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       /* Do the real setns */
-       retval = plibc_func(fd, nstype);
-       saved_errno = errno;
-
-       lttng_ust_after_setns();
-
-       errno = saved_errno;
-       return retval;
-}
-
-int unshare(int flags)
-{
-       static int (*plibc_func)(int flags) = NULL;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "unshare");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"unshare\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       /* Do the real setns */
-       retval = plibc_func(flags);
-       saved_errno = errno;
-
-       lttng_ust_after_unshare();
-
-       errno = saved_errno;
-       return retval;
-}
-
-int setresuid(uid_t ruid, uid_t euid, uid_t suid)
-{
-       static int (*plibc_func)(uid_t ruid, uid_t euid, uid_t suid) = NULL;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "setresuid");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"setresuid\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       /* Do the real setresuid */
-       retval = plibc_func(ruid, euid, suid);
-       saved_errno = errno;
-
-       lttng_ust_after_setresuid();
-
-       errno = saved_errno;
-       return retval;
-}
-
-int setresgid(gid_t rgid, gid_t egid, gid_t sgid)
-{
-       static int (*plibc_func)(gid_t rgid, gid_t egid, gid_t sgid) = NULL;
-       int retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "setresgid");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"setresgid\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       /* Do the real setresgid */
-       retval = plibc_func(rgid, egid, sgid);
-       saved_errno = errno;
-
-       lttng_ust_after_setresgid();
-
-       errno = saved_errno;
-       return retval;
-}
-
-#elif defined (__FreeBSD__)
-
-pid_t rfork(int flags)
-{
-       static pid_t (*plibc_func)(void) = NULL;
-       sigset_t sigset;
-       pid_t retval;
-       int saved_errno;
-
-       if (plibc_func == NULL) {
-               plibc_func = dlsym(RTLD_NEXT, "rfork");
-               if (plibc_func == NULL) {
-                       fprintf(stderr, "libustfork: unable to find \"rfork\" symbol\n");
-                       errno = ENOSYS;
-                       return -1;
-               }
-       }
-
-       lttng_ust_before_fork(&sigset);
-       /* Do the real rfork */
-       retval = plibc_func();
-       saved_errno = errno;
-       if (retval == 0) {
-               /* child */
-               lttng_ust_after_fork_child(&sigset);
-       } else {
-               lttng_ust_after_fork_parent(&sigset);
-       }
-       errno = saved_errno;
-       return retval;
-}
-
-/*
- * On BSD, no need to override vfork, because it runs in the context of
- * the parent, with parent waiting until execve or exit is executed in
- * the child.
- */
-
-#else
-#warning "Unknown OS. You might want to ensure that fork/clone/vfork/fork handling is complete."
-#endif
This page took 0.043754 seconds and 4 git commands to generate.