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>
/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
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
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
# SPDX-License-Identifier: LGPL-2.1-only
SUBDIRS = \
+ lttng-ust-fork \
+ lttng-ust-cyg-profile \
lttng-ust-libc-wrapper
if ENABLE_PYTHON_AGENT
--- /dev/null
+# 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
--- /dev/null
+/*
+ * 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);
+}
--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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);
+}
--- /dev/null
+/*
+ * 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
--- /dev/null
+#!/bin/sh
+#
+# SPDX-License-Identifier: LGPL-2.1-only
+
+LD_VERBOSE=1 LD_PRELOAD=.libs/liblttng-ust-cyg-profile.so ${*}
--- /dev/null
+#!/bin/sh
+#
+# SPDX-License-Identifier: LGPL-2.1-only
+
+LD_VERBOSE=1 LD_PRELOAD=.libs/liblttng-ust-cyg-profile-fast.so ${*}
--- /dev/null
+# 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)
--- /dev/null
+/*
+ * 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
+++ /dev/null
-# 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
+++ /dev/null
-/*
- * 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);
-}
+++ /dev/null
-/*
- * 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
+++ /dev/null
-/*
- * 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);
-}
+++ /dev/null
-/*
- * 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
+++ /dev/null
-#!/bin/sh
-#
-# SPDX-License-Identifier: LGPL-2.1-only
-
-LD_VERBOSE=1 LD_PRELOAD=.libs/liblttng-ust-cyg-profile.so ${*}
+++ /dev/null
-#!/bin/sh
-#
-# SPDX-License-Identifier: LGPL-2.1-only
-
-LD_VERBOSE=1 LD_PRELOAD=.libs/liblttng-ust-cyg-profile-fast.so ${*}
+++ /dev/null
-# 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)
+++ /dev/null
-/*
- * 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