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

Eugene Loh eugene.loh at oracle.com
Fri Sep 2 21:59:12 UTC 2022


Not a careful review, but:
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>

But commit 8638d1fa (Revert "Remove drti.o and related support code.") 
basically breaks DTrace.  Why isn't the current patch squashed back into 
that one?  Or, at least made the immediately following one?  It's not 
good to have DTrace broken for so many (intervening) patches, even if 
those patches are all part of one series.

On 8/10/22 18:07, 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.
>
> 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;



More information about the DTrace-devel mailing list