[DTrace-devel] [PATCH v2 02/20] drti: emit into a subdirectory
Kris Van Hees
kris.van.hees at oracle.com
Thu Sep 15 20:08:21 UTC 2022
On Wed, Sep 07, 2022 at 01:59:51PM +0100, Nick Alcock via DTrace-devel wrote:
> 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.
This needs some rephrasing because drti*.o is not causing any BPF code to fail.
What fails is that the code that loads precompiled BPF object files (correctly)
does not recognize drti*.o as compiled BPF code. And it expects all .o files
in that directory to be compiled BPF code.
> Move it into a subdirectory to keep it out of trouble.
That is one solution. I guess you also could have modified the code that loads
precompiled BPF objects to ignore .o files that are not compiled BPF code.
>
> Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
> Reviewed-by: Eugene Loh <eugene.loh 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 bc24fdd6d36d..a2040da1a095 100644
> --- a/libdtrace/Build
> +++ b/libdtrace/Build
> @@ -92,6 +92,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/'))
>
> @@ -143,9 +145,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 }')
> @@ -206,9 +208,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
> @@ -247,7 +249,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))
> @@ -256,12 +258,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 766b97420db3..21ef56c0a3cb 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
>
>
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel
More information about the DTrace-devel
mailing list