[DTrace-devel] [PATCH v4 13/25] usdt: common infrastructure
Nick Alcock
nick.alcock at oracle.com
Fri Oct 7 10:25:12 UTC 2022
USDT will include a daemon that implements a CUSE device that programs
containing USDT probes issue ioctl()s to. This daemon needs to create
uprobes, and this needs to use libproc to extract information about the
processes (like mapping addresses, etc). This is something the rest of
DTrace can already do: so split out infrastructure needed by libproc and
infrastructure needed to create uprobes into a new libcommon (static)
library that the daemon can use. Make tiny adjustments to libproc and
triggers that use it so that libproc can stand independent of libdtrace
(it was very nearly there already: only one debugging statement change
and a move of dt_list into the common library is needed).
A future commit will adjust DTrace to use this library to create uprobes
too.
Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
---
libcommon/Build | 13 +++++++++++++
libcommon/GNUmakefile | 5 +++++
{libdtrace => libcommon}/dt_list.c | 0
{libdtrace => libcommon}/dt_list.h | 0
libdtrace/Build | 5 ++---
libproc/Build | 5 ++++-
libproc/Pcontrol.c | 4 ++--
test/triggers/Build | 16 ++++++++--------
test/utils/Build | 4 ++--
9 files changed, 36 insertions(+), 16 deletions(-)
create mode 100644 libcommon/Build
create mode 100644 libcommon/GNUmakefile
rename {libdtrace => libcommon}/dt_list.c (100%)
rename {libdtrace => libcommon}/dt_list.h (100%)
diff --git a/libcommon/Build b/libcommon/Build
new file mode 100644
index 000000000000..f4cf3ba5cb88
--- /dev/null
+++ b/libcommon/Build
@@ -0,0 +1,13 @@
+# Oracle Linux DTrace.
+# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
+# Licensed under the Universal Permissive License v 1.0 as shown at
+# http://oss.oracle.com/licenses/upl.
+
+BUILDLIBS += libcommon
+LIBS += libcommon
+
+libcommon_TARGET = libcommon
+libcommon_DIR := $(current-dir)
+libcommon_CPPFLAGS := -Ilibcommon -Ilibproc
+libcommon_SOURCES = dt_list.c
+libcommon_LIBSOURCES = libcommon
diff --git a/libcommon/GNUmakefile b/libcommon/GNUmakefile
new file mode 100644
index 000000000000..4a27e08b8a8a
--- /dev/null
+++ b/libcommon/GNUmakefile
@@ -0,0 +1,5 @@
+%:
+ $(MAKE) -C .. $@
+
+all::
+ $(MAKE) -C .. all
diff --git a/libdtrace/dt_list.c b/libcommon/dt_list.c
similarity index 100%
rename from libdtrace/dt_list.c
rename to libcommon/dt_list.c
diff --git a/libdtrace/dt_list.h b/libcommon/dt_list.h
similarity index 100%
rename from libdtrace/dt_list.h
rename to libcommon/dt_list.h
diff --git a/libdtrace/Build b/libdtrace/Build
index ff8c6180e073..2e553c67b634 100644
--- a/libdtrace/Build
+++ b/libdtrace/Build
@@ -4,7 +4,7 @@
# http://oss.oracle.com/licenses/upl.
BUILDLIBS += libdtrace-build
-libdtrace-build_CPPFLAGS = -Ilibdtrace -Ilibproc -Iuts/intel -Ilibdtrace/$(ARCHINC) \
+libdtrace-build_CPPFLAGS = -Ilibdtrace -Ilibproc -Ilibcommon -Iuts/intel -Ilibdtrace/$(ARCHINC) \
-DDTRACE_LIBDIR="\"$(LIBDIR)/dtrace\"" -DDTRACE_USER_UID=$(USER_UID) \
-DUNPRIV_UID=$(UNPRIV_UID) -DDUMPCAP_GROUP=\"$(DUMPCAP_GROUP)\" \
-DUNPRIV_HOME=\"$(UNPRIV_HOME)\"
@@ -32,7 +32,6 @@ libdtrace-build_SOURCES = dt_aggregate.c \
dt_lex.c \
dt_link.c \
dt_kernel_module.c \
- dt_list.c \
dt_map.c \
dt_module.c \
dt_open.c \
@@ -77,7 +76,7 @@ endif
libdtrace_VERSION := 2.0.0
libdtrace_SONAME := libdtrace.so.2
libdtrace_VERSCRIPT := libdtrace.ver
-libdtrace_LIBSOURCES := libdtrace-build libproc libport
+libdtrace_LIBSOURCES := libdtrace-build libproc libport libcommon
libdtrace_SECONDARY := libproc libport
# Disable certain warnings for these files
diff --git a/libproc/Build b/libproc/Build
index af268f2832b9..983ff92eefcc 100644
--- a/libproc/Build
+++ b/libproc/Build
@@ -4,10 +4,13 @@
# http://oss.oracle.com/licenses/upl.
BUILDLIBS += libproc
-libproc_CPPFLAGS = -Ilibproc -Ilibdtrace -I$(objdir) -Iuts/intel -Ilibproc/$(ARCHINC)
+LIBS += libproc
+libproc_CPPFLAGS = -Ilibproc -Ilibdtrace -Ilibcommon -I$(objdir) -Iuts/intel -Ilibproc/$(ARCHINC)
libproc_TARGET = libproc
libproc_DIR := $(current-dir)
libproc_SOURCES = Pcontrol.c elfish.c elfish_64.c elfish_32.c Psymtab.c rtld_db.c rtld_offsets.c wrap.c isadep_dispatch.c $(ARCHINC)/isadep.c
+libproc_LIBSOURCES := libproc libcommon
+libproc_SECONDARY := libcommon
libproc_SRCDEPS := $(objdir)/rtld_offsets.stamp
rtld_offsets.c_CFLAGS := -Wno-prio-ctor-dtor
diff --git a/libproc/Pcontrol.c b/libproc/Pcontrol.c
index 8c129a7f8c1e..9bdf2068478c 100644
--- a/libproc/Pcontrol.c
+++ b/libproc/Pcontrol.c
@@ -1,6 +1,6 @@
/*
* Oracle Linux DTrace.
- * Copyright (c) 2010, 2020, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
* Licensed under the Universal Permissive License v 1.0 as shown at
* http://oss.oracle.com/licenses/upl.
*/
@@ -352,7 +352,7 @@ Pgrab(pid_t pid, int noninvasiveness, int already_ptraced, void *wrap_arg,
* it to definite noninvasiveness.
*/
if (*perr || noninvasiveness > 1) {
- dt_dprintf("%i: grabbing noninvasively.\n", P->pid);
+ _dprintf("%i: grabbing noninvasively.\n", P->pid);
P->noninvasive = TRUE;
}
diff --git a/test/triggers/Build b/test/triggers/Build
index 76a23f9f6a3f..6321b8468892 100644
--- a/test/triggers/Build
+++ b/test/triggers/Build
@@ -133,8 +133,8 @@ visible-constructor-32_LDFLAGS := -s
libproc-pldd_CFLAGS := -Ilibproc -Ilibdtrace
libproc-pldd_NOCFLAGS :=
libproc-pldd_NOLDFLAGS :=
-libproc-pldd_DEPS := build-libproc.a build-libdtrace.a libport.a
-libproc-pldd_LIBS := $(objdir)/build-libproc.a $(objdir)/build-libdtrace.a $(objdir)/build-libport.a $(libdtrace_LIBS)
+libproc-pldd_DEPS := build-libproc.a build-libdtrace.a libcommon.a libport.a
+libproc-pldd_LIBS := $(objdir)/build-libproc.a $(objdir)/build-libdtrace.a $(objdir)/build-libcommon.a $(objdir)/build-libport.a $(libdtrace_LIBS)
# Technically libproc-dlmlib is not a dependency of libproc-consistency, but in
# practice the tests never call it with anything else, so it's needed whenever
@@ -142,8 +142,8 @@ libproc-pldd_LIBS := $(objdir)/build-libproc.a $(objdir)/build-libdtrace.a $(obj
libproc-consistency_CFLAGS := -Ilibproc -Ilibdtrace
libproc-consistency_NOCFLAGS :=
libproc-consistency_NOLDFLAGS :=
-libproc-consistency_DEPS := build-libproc.a build-libdtrace.a libport.a libproc-dlmlib.so
-libproc-consistency_LIBS := $(objdir)/build-libproc.a $(objdir)/build-libdtrace.a $(objdir)/build-libport.a $(libdtrace_LIBS)
+libproc-consistency_DEPS := build-libproc.a build-libdtrace.a libcommon.a libport.a libproc-dlmlib.so
+libproc-consistency_LIBS := $(objdir)/build-libproc.a $(objdir)/build-libdtrace.a $(objdir)/libcommon.a $(objdir)/build-libport.a $(libdtrace_LIBS)
# The lookup victim also needs to have an rpath baked into it, since when
# testing in --use-installed mode, there is no LD_LIBRARY_PATH pointing into
@@ -157,15 +157,15 @@ libproc-lookup-by-name_CFLAGS := -Ilibproc -Ilibdtrace
libproc-lookup-by-name_LDFLAGS := -Bdynamic
libproc-lookup-by-name_NOCFLAGS :=
libproc-lookup-by-name_NOLDFLAGS :=
-libproc-lookup-by-name_DEPS := build-libproc.a build-libdtrace.a libport.a
-libproc-lookup-by-name_LIBS := $(objdir)/build-libproc.a $(objdir)/build-libdtrace.a $(objdir)/build-libport.a $(libdtrace_LIBS)
+libproc-lookup-by-name_DEPS := build-libproc.a build-libdtrace.a libcommon.a libport.a
+libproc-lookup-by-name_LIBS := $(objdir)/build-libproc.a $(objdir)/build-libdtrace.a $(objdir)/libcommon.a $(objdir)/build-libport.a $(libdtrace_LIBS)
libproc-execing-bkpts_CFLAGS := -Ilibproc -Ilibdtrace
libproc-execing-bkpts_LDFLAGS :=
libproc-execing-bkpts_NOCFLAGS :=
libproc-execing-bkpts_NOLDFLAGS :=
-libproc-execing-bkpts_DEPS := build-libproc.a build-libdtrace.a libport.a
-libproc-execing-bkpts_LIBS := $(objdir)/build-libproc.a $(objdir)/build-libdtrace.a $(objdir)/build-libport.a $(libdtrace_LIBS)
+libproc-execing-bkpts_DEPS := build-libproc.a build-libdtrace.a libcommon.a libport.a
+libproc-execing-bkpts_LIBS := $(objdir)/build-libproc.a $(objdir)/build-libdtrace.a $(objdir)/libcommon.a $(objdir)/build-libport.a $(libdtrace_LIBS)
# We need multiple versions of libproc-sleeper with different combinations
# of flags.
diff --git a/test/utils/Build b/test/utils/Build
index 202048e8ba22..992fca19ae78 100644
--- a/test/utils/Build
+++ b/test/utils/Build
@@ -1,5 +1,5 @@
# Oracle Linux DTrace.
-# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
# Licensed under the Universal Permissive License v 1.0 as shown at
# http://oss.oracle.com/licenses/upl.
@@ -11,7 +11,7 @@ $(1)_DIR := $(current-dir)
$(1)_TARGET = $(1)
$(1)_SOURCES = $(1).c
$(1)_POST := link-test-util
-$(1)_CFLAGS := -Ilibdtrace -Ilibproc
+$(1)_CFLAGS := -Ilibdtrace -Ilibproc -Ilibcommon
$(1)_NOCFLAGS := --coverage
$(1)_NOLDFLAGS := --coverage
$(1)_DEPS = libdtrace.so
--
2.35.1
More information about the DTrace-devel
mailing list