[DTrace-devel] [PATCH 15/17] drti: emit into a subdirectory

Nick Alcock nick.alcock at oracle.com
Wed Aug 10 22:07:07 UTC 2022


The BPF library code assumes that ${libdir}/dtrace/*.o are all BPF
object files.  drti*.o is not, and its presence causes the BPF code to
fail at DTrace startup time.

Move it into a subdirectory to keep it out of trouble.

Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
---
 libdtrace/Build     | 24 +++++++++++++-----------
 libdtrace/dt_link.c |  6 +++---
 2 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/libdtrace/Build b/libdtrace/Build
index 66a89a8b2b3c..db8f6c8e413f 100644
--- a/libdtrace/Build
+++ b/libdtrace/Build
@@ -91,6 +91,8 @@ dt_prov_pid.c_CFLAGS := -Wno-pedantic
 dt_prov_profile.c_CFLAGS := -Wno-pedantic
 dt_prov_sdt.c_CFLAGS := -Wno-pedantic
 dt_prov_syscall.c_CFLAGS := -Wno-pedantic
+dt_debug.c_CFLAGS := -Wno-prio-ctor-dtor
+drti.c_CFLAGS := -Wno-prio-ctor-dtor
 
 SHORTKERNELS := $(foreach kernel,$(KERNELS),$(shell printf %s $(kernel) | sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*$$/\1.\2.\3/'))
 
@@ -142,9 +144,9 @@ override other-dlib-targets = $(foreach kernel,$(SHORTKERNELS), \
 	$(filter-out $(M4_DLIBS),$(WORKING_DLIBS))))
 
 $(objdir)/dlibs/.dir.stamp:
-	mkdir -p $(objdir)/dlibs $(foreach kernel,$(SHORTKERNELS),$(objdir)/dlibs/$(kernel))
+	mkdir -p $(objdir)/dlibs $(objdir)/dlibs/drti $(foreach kernel,$(SHORTKERNELS),$(objdir)/dlibs/$(kernel))
 	@touch $(objdir)/dlibs/.dir.stamp
-	ln -sf ../../$(libdtrace-build_DIR)/drti-vers $(objdir)/dlibs
+	ln -srf $(libdtrace-build_DIR)/drti-vers $(objdir)/dlibs/drti
 
 define dlib-kernel-ver-template
 $(objdir)/dlibs/$(shell printf %s $(1) | sed -e 's/^\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*$$/\1.\2.\3/')/%.d: override SHORTKERNELVER := $(shell printf %s $(1) | sed -e 's/^\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*$$/\1.\2.\3/' | awk -F. '{ print $$1 * 1000 * 1000 + $$2 * 1000 + $$3 }')
@@ -205,9 +207,9 @@ dlibs: $(m4-dlib-targets) $(other-dlib-targets)
 PHONIES += objs
 TARGETS += objs
 BUILD_DRTI_OBJ = $(objdir)/drti.o
-DRTI_OBJ = $(objdir)/dlibs/drti.o
+DRTI_OBJ = $(objdir)/dlibs/drti/drti.o
 BUILD_DRTI32_OBJ = $(objdir)/drti32.o
-DRTI32_OBJ = $(if $(NATIVE_BITNESS_ONLY),,$(objdir)/dlibs/drti32.o)
+DRTI32_OBJ = $(if $(NATIVE_BITNESS_ONLY),,$(objdir)/dlibs/drti/drti32.o)
 
 objs: $(DRTI_OBJ) $(DRTI32_OBJ)
 $(BUILD_DRTI_OBJ): $(libdtrace-build_DIR)drti.c
@@ -246,7 +248,7 @@ clean::
 	rm -f $(addprefix $(libdtrace-build_DIR),$(BUILD_DLIBS))
 
 install::
-	mkdir -p $(INSTLIBDIR)/dtrace $(INSTINCLUDEDIR)
+	mkdir -p $(INSTLIBDIR)/dtrace $(INSTLIBDIR)/dtrace/drti $(INSTINCLUDEDIR)
 	$(call describe-install-target,$(INSTINCLUDEDIR),dtrace.h)
 	install -m 644 $(libdtrace-build_DIR)dtrace.h $(INSTINCLUDEDIR)
 	$(call describe-install-target,$(INSTLIBDIR),$(libdtrace_TARGET).so.$(libdtrace_VERSION))
@@ -255,12 +257,12 @@ install::
 	ln -sf libdtrace.so.$(libdtrace_VERSION) $(INSTLIBDIR)/$(libdtrace_SONAME)
 	$(call describe-install-target,$(INSTLIBDIR),$(libdtrace_TARGET).so)
 	ln -sf libdtrace.so.$(libdtrace_VERSION) $(INSTLIBDIR)/$(libdtrace_TARGET).so
-	$(call describe-install-target,$(INSTLIBDIR)/dtrace,$(DRTI_OBJ))
-	install -m 644 $(DRTI_OBJ) $(INSTLIBDIR)/dtrace
-	$(call describe-install-target,$(INSTLIBDIR)/dtrace,$(DRTI32_OBJ))
-	$(if $(NATIVE_BITNESS_ONLY),,install -m 644 $(DRTI32_OBJ) $(INSTLIBDIR)/dtrace)
-	$(call describe-install-target,$(INSTLIBDIR)/dtrace,drti-vers)
-	install -m 644 $(objdir)/dlibs/drti-vers $(INSTLIBDIR)/dtrace
+	$(call describe-install-target,$(INSTLIBDIR)/dtrace/drti,$(DRTI_OBJ))
+	install -m 644 $(DRTI_OBJ) $(INSTLIBDIR)/dtrace/drti
+	$(call describe-install-target,$(INSTLIBDIR)/dtrace/drti,$(DRTI32_OBJ))
+	$(if $(NATIVE_BITNESS_ONLY),,install -m 644 $(DRTI32_OBJ) $(INSTLIBDIR)/dtrace/drti)
+	$(call describe-install-target,$(INSTLIBDIR)/dtrace/drti,drti-vers)
+	install -m 644 $(objdir)/dlibs/drti-vers $(INSTLIBDIR)/dtrace/drti
 	for kernel in $(SHORTKERNELS); do \
 		$(call describe-expanded-install-target,$(INSTLIBDIR)/dtrace/$$kernel,$(WORKING_DLIBS)) \
 		mkdir -p $(INSTLIBDIR)/dtrace/$$kernel && \
diff --git a/libdtrace/dt_link.c b/libdtrace/dt_link.c
index 202dd642aba3..5daaf2b02212 100644
--- a/libdtrace/dt_link.c
+++ b/libdtrace/dt_link.c
@@ -1692,17 +1692,17 @@ dtrace_program_link(dtrace_hdl_t *dtp, dtrace_prog_t *pgp, uint_t dflags,
 		 */
 
 		if (dtp->dt_oflags & DTRACE_O_ILP32) {
-			snprintf(drti, sizeof (drti), "%s/drti32.o", libdir->dir_path);
+			snprintf(drti, sizeof (drti), "%s/drti/drti32.o", libdir->dir_path);
 #if defined(__sparc)
 			emu = " -m elf32_sparc";
 #elif defined(__i386) || defined(__amd64)
 			emu = " -m elf_i386";
 #endif
 		} else {
-			snprintf(drti, sizeof (drti), "%s/drti.o", libdir->dir_path);
+			snprintf(drti, sizeof (drti), "%s/drti/drti.o", libdir->dir_path);
 			emu = "";
 		}
-		snprintf(symvers, sizeof (symvers), "%s/drti-vers", libdir->dir_path);
+		snprintf(symvers, sizeof (symvers), "%s/drti/drti-vers", libdir->dir_path);
 
 		len = snprintf(NULL, 0, fmt, dtp->dt_ld_path, emu, file,
 			       symvers, fd, drti) + 1;
-- 
2.37.1.265.g363c192786.dirty




More information about the DTrace-devel mailing list