[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