On Sun, Jun 04, 2023 at 05:55:02PM +0000, Klemens Nanni wrote: > On Sun, Jun 04, 2023 at 05:48:24PM +0000, Brian Callahan wrote: > > Hi ports -- > > > > Attached is an update to devel/dwz. The main benefit for us is a modest > > speedup. > > > > The full announcement with changes is here: > > https://sourceware.org/pipermail/dwz/2022q4/001385.html > > > > Seems OK on my end on amd64. But since dwz is integral for debug > > packages, looking for more eyeballs. > > > > OK? > > > > ~Brian > > You fetch xxhash and turn it into a local include. > Did you try adding the following as dependency instead? > > $ pkglocate include/xxhash.h > xxhash-0.8.1p0:sysutils/xxhash:/usr/local/include/xxhash.h
I think that would create a loop. xxhash has DEBUG_PACKAGES set and dwz is needed to extract the debug info. > > > > Index: Makefile > > =================================================================== > > RCS file: /cvs/ports/devel/dwz/Makefile,v > > retrieving revision 1.6 > > diff -u -p -r1.6 Makefile > > --- Makefile 11 Mar 2022 18:50:00 -0000 1.6 > > +++ Makefile 29 Nov 2022 23:40:09 -0000 > > @@ -1,5 +1,8 @@ > > COMMENT = DWARF optimization and duplicate removal tool > > -DISTNAME = dwz-0.14 > > +PKGNAME = dwz-0.15 > > +XXHASH_V = 0.8.1 > > +DISTFILES = ${PKGNAME}.tar.gz:0 \ > > + xxhash-${XXHASH_V}{xxhash}.h:1 > > > > CATEGORIES = devel > > > > @@ -11,7 +14,8 @@ PERMIT_PACKAGE = Yes > > > > WANTLIB += c elf > > > > -MASTER_SITES = https://sourceware.org/ftp/dwz/releases/ > > +MASTER_SITES0 = https://sourceware.org/ftp/dwz/releases/ > > +MASTER_SITES1 = > > https://raw.githubusercontent.com/Cyan4973/xxHash/v${XXHASH_V}/ > > > > DEBUG_PACKAGES = ${BUILD_PACKAGES} > > > > @@ -25,5 +29,23 @@ WRKDIST = ${WRKDIR}/dwz > > # XXX bootstrap: DEBUG_PACKAGES needs a dwz binary to work > > > > DWZ = ${WRKBUILD}/dwz > > + > > +EXTRACT_ONLY = ${PKGNAME}.tar.gz > > + > > +post-extract: > > + cp ${DISTDIR}/xxhash-${XXHASH_V}.h ${WRKSRC}/xxhash.h > > + > > +.include <bsd.port.arch.mk> > > +.if ${PROPERTIES:Mlp64} > > +CFLAGS += -DNATIVE_POINTER_SIZE=8 > > +.else > > +CFLAGS += -DNATIVE_POINTER_SIZE=4 > > +.endif > > + > > +.if ${PROPERTIES:Mle} > > +CFLAGS += -DNATIVE_ENDIAN_VAL=ELFDATA2LSB > > +.else > > +CFLAGS += -DNATIVE_ENDIAN_VAL=ELFDATA2MSB > > +.endif > > > > .include <bsd.port.mk> > > Index: distinfo > > =================================================================== > > RCS file: /cvs/ports/devel/dwz/distinfo,v > > retrieving revision 1.2 > > diff -u -p -r1.2 distinfo > > --- distinfo 8 Mar 2021 16:51:11 -0000 1.2 > > +++ distinfo 29 Nov 2022 23:40:09 -0000 > > @@ -1,2 +1,4 @@ > > -SHA256 (dwz-0.14.tar.gz) = MwBuq4df8KB/E/yIWIPFvZUU2D7OqfGLxGtXMt3fDR8= > > -SIZE (dwz-0.14.tar.gz) = 186623 > > +SHA256 (dwz-0.15.tar.gz) = 7VnGEuIEFeaX+8RRH1J+91cAe8VvoalU5JrKHans+0Q= > > +SHA256 (xxhash-0.8.1.h) = 1PK5G1R8eQYWSRhnIaazMWCfK/hZVIWiHqYxyC7D75M= > > +SIZE (dwz-0.15.tar.gz) = 192777 > > +SIZE (xxhash-0.8.1.h) = 209646 > > Index: patches/patch-Makefile > > =================================================================== > > RCS file: /cvs/ports/devel/dwz/patches/patch-Makefile,v > > retrieving revision 1.3 > > diff -u -p -r1.3 patch-Makefile > > --- patches/patch-Makefile 11 Mar 2022 18:50:00 -0000 1.3 > > +++ patches/patch-Makefile 29 Nov 2022 23:40:09 -0000 > > @@ -6,31 +6,76 @@ Convert to bsd make > > Index: Makefile > > --- Makefile.orig > > +++ Makefile > > -@@ -1,20 +1,16 @@ > > +@@ -1,51 +1,21 @@ > > -ifneq ($(srcdir),) > > -VPATH = $(srcdir) > > -else > > -srcdir=$(shell pwd) > > -endif > > +- > > -CFLAGS = -O2 -g > > -DWZ_VERSION := $(shell cat $(srcdir)/VERSION) > > --override CFLAGS += -Wall -W -D_FILE_OFFSET_BITS=64 \ > > -- -DDWZ_VERSION='"$(DWZ_VERSION)"' $(shell cat $(srcdir)/COPYRIGHT_YEARS) > > +-CFLAGS_VERSION = -DDWZ_VERSION='"$(DWZ_VERSION)"' > > +-CFLAGS_COPYRIGHT = $(shell cat $(srcdir)/COPYRIGHT_YEARS) > > +-CFLAGS_COMMON = -Wall -W -D_FILE_OFFSET_BITS=64 > > +-XXH_PROG = "\#define XXH_INLINE_ALL 1\n\#include <xxhash.h>\n" > > +-XXH_INLINE_ALL_WORKS = $(shell printf $(XXH_PROG) \ > > +- | $(CC) -xc -c - -o /dev/null 2>/dev/null \ > > +- && echo -n 1) > > +-ifeq "$(XXH_INLINE_ALL_WORKS)" "1" > > +- CFLAGS_COMMON += -DXXH_INLINE_ALL=1 > > +-endif > > +- > > +-override CFLAGS += $(CFLAGS_COMMON) $(CFLAGS_VERSION) $(CFLAGS_COPYRIGHT) > > +- > > +srcdir = . > > +CFLAGS ?= -O2 -g > > +DWZ_VERSION != cat $(srcdir)/VERSION > > +CFLAGS += -DDWZ_VERSION='"$(DWZ_VERSION)"' > > +CFLAGS !+= cat $(srcdir)/COPYRIGHT_YEARS > > ++CFLAGS += -D_FILE_OFFSET_BITS=64 > > ++CFLAGS += -DXXH_INLINE_ALL=1 > > prefix = /usr > > exec_prefix = $(prefix) > > bindir = $(exec_prefix)/bin > > datarootdir = $(prefix)/share > > mandir = $(datarootdir)/man > > --OBJECTS = dwz.o hashtab.o sha1.o dwarfnames.o > > -+OBJECTS = dwz.o hashtab.o sha1.o dwarfnames.o obstack.o > > +-OBJECTS = args.o dwz.o hashtab.o pool.o sha1.o dwarfnames.o > > ++OBJECTS = args.o dwz.o hashtab.o pool.o sha1.o dwarfnames.o obstack.o > > + LIBS=-lelf > > +-ifneq "$(XXH_INLINE_ALL_WORKS)" "1" > > +-LIBS += -lxxhash > > +-endif > > dwz: $(OBJECTS) > > -- $(CC) $(LDFLAGS) -o $@ $^ -lelf > > -+ $(CC) $(LDFLAGS) -o $@ $(OBJECTS) -lelf > > +- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) > > +-args.o: native.o > > +-args.o: CFLAGS_FOR_SOURCE = \ > > +- -DNATIVE_ENDIAN_VAL=$(NATIVE_ENDIAN_VAL) \ > > +- -DNATIVE_POINTER_SIZE=$(NATIVE_POINTER_SIZE) > > +-NATIVE_ENDIAN=$(shell readelf -h native.o \ > > +- | grep Data \ > > +- | sed 's/.*, //;s/ endian//') > > +-NATIVE_ENDIAN_LITTLE=$(findstring $(NATIVE_ENDIAN),$(findstring > > little,$(NATIVE_ENDIAN))) > > +-NATIVE_ENDIAN_BIG=$(findstring $(NATIVE_ENDIAN),$(findstring > > big,$(NATIVE_ENDIAN))) > > +-NATIVE_ENDIAN_VAL=$(if $(NATIVE_ENDIAN_LITTLE),ELFDATA2LSB,$(if > > $(NATIVE_ENDIAN_BIG),ELFDATA2MSB,ELFDATANONE)) > > +-NATIVE_POINTER_SIZE=$(shell readelf -wi native.o \ > > +- | grep "Pointer Size:" \ > > +- | sed 's/.*: *//') > > ++ $(CC) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS) > > + %.o: %.c > > +- $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< $(CFLAGS_FOR_SOURCE) > > ++ $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< > > install: dwz > > install -D dwz $(DESTDIR)$(bindir)/dwz > > install -D -m 644 $(srcdir)/dwz.1 $(DESTDIR)$(mandir)/man1/dwz.1 > > +@@ -53,10 +23,6 @@ clean: > > + rm -f $(OBJECTS) *~ core* dwz $(TEST_EXECS) $(DWZ_TEST_OBJECTS) \ > > + dwz.log dwz.sum native.c native.o > > + rm -Rf testsuite-bin tmp.* > > +-native.c: > > +- echo "int main (void) { return 0; }" > $@ > > +-native.o: native.c > > +- $(CC) -o $@ $< -c -g > > + > > + PWD:=$(shell pwd -P) > > + > > Index: patches/patch-args_c > > =================================================================== > > RCS file: patches/patch-args_c > > diff -N patches/patch-args_c > > --- /dev/null 1 Jan 1970 00:00:00 -0000 > > +++ patches/patch-args_c 29 Nov 2022 23:40:09 -0000 > > @@ -0,0 +1,32 @@ > > +Correctly get processors online. > > + > > +Index: args.c > > +--- args.c.orig > > ++++ args.c > > +@@ -25,14 +25,15 @@ > > + #include <stdio.h> > > + #include <string.h> > > + #include <stdlib.h> > > +-#include <error.h> > > ++#include <unistd.h> > > + #include <gelf.h> > > +-#include <sys/sysinfo.h> > > + > > + #include "args.h" > > + > > + #include "util.h" > > + > > ++extern void error(int, int, const char *, ...); > > ++ > > + #if DEVEL > > + int tracing; > > + int ignore_size; > > +@@ -735,7 +736,7 @@ parse_args (int argc, char *argv[], bool *hardlink, co > > + > > + if (max_forks == -1) > > + { > > +- long nprocs = get_nprocs (); > > ++ long nprocs = sysconf(_SC_NPROCESSORS_ONLN); > > + /* Be conservative on max forks: 4 procs may be actually be 4 SMT > > + threads with only 2 cores. */ > > + max_forks = nprocs / 2; > > Index: patches/patch-dwz_c > > =================================================================== > > RCS file: /cvs/ports/devel/dwz/patches/patch-dwz_c,v > > retrieving revision 1.3 > > diff -u -p -r1.3 patch-dwz_c > > --- patches/patch-dwz_c 11 Mar 2022 18:50:00 -0000 1.3 > > +++ patches/patch-dwz_c 29 Nov 2022 23:40:09 -0000 > > @@ -1,39 +1,46 @@ > > Create error() function, Linux-ism. > > Our libelf doesn't have some of these defines. > > obstack is not a system header > > +xxhash is not a system header > > > > Index: dwz.c > > --- dwz.c.orig > > +++ dwz.c > > -@@ -20,11 +20,11 @@ > > +@@ -20,13 +20,13 @@ > > > > #include <assert.h> > > #include <errno.h> > > -#include <error.h> > > #include <fcntl.h> > > - #include <getopt.h> > > #include <setjmp.h> > > #include <string.h> > > -+#include <stdarg.h> > > #include <stdbool.h> > > #include <stddef.h> > > #include <stdint.h> > > -@@ -36,7 +36,7 @@ > > - #include <sys/types.h> > > ++#include <stdarg.h> > > + #include <inttypes.h> > > + #include <stdlib.h> > > + #include <unistd.h> > > +@@ -36,10 +36,10 @@ > > #include <sys/times.h> > > + #include <sys/wait.h> > > > > -#include <obstack.h> > > +#include "obstack.h" > > > > #include <gelf.h> > > +-#include <xxhash.h> > > ++#include "xxhash.h" > > + > > #include "dwarf2.h" > > -@@ -165,6 +165,29 @@ report_progress (void) > > + #include "hashtab.h" > > +@@ -216,6 +216,29 @@ report_progress (void) > > /* Where to longjmp on OOM. */ > > static jmp_buf oom_buf; > > > > +/* error () wrapper based on the Linux manual page at > > + http://man7.org/linux/man-pages/man3/error.3.html. */ > > -+static void > > ++void > > +error (int status, int errnum, const char *fmt, ...) > > +{ > > + va_list ap; > > @@ -57,7 +64,7 @@ Index: dwz.c > > /* Handle OOM situation. If handling more than one file, we might > > just fail to handle some large file due to OOM, but could very well > > handle other smaller files after it. */ > > -@@ -13723,7 +13746,7 @@ fdopen_dso (int fd, const char *name) > > +@@ -13675,7 +13698,7 @@ fdopen_dso (int fd, const char *name) > > int i; > > DSO *dso = NULL; > > > > @@ -66,7 +73,7 @@ Index: dwz.c > > if (elf == NULL) > > { > > error (0, 0, "cannot open ELF file: %s", elf_errmsg (-1)); > > -@@ -13761,7 +13784,7 @@ fdopen_dso (int fd, const char *name) > > +@@ -13713,7 +13736,7 @@ fdopen_dso (int fd, const char *name) > > goto error_out; > > } > > > > @@ -75,7 +82,7 @@ Index: dwz.c > > > > memset (dso, 0, sizeof(DSO)); > > dso->elf = elf; > > -@@ -14258,7 +14281,7 @@ write_dso (DSO *dso, const char *file, struct stat > > *st > > +@@ -14210,7 +14233,7 @@ write_dso (DSO *dso, const char *file, struct stat > > *st > > free (shstrtab); > > return 1; > > } > > @@ -84,7 +91,7 @@ Index: dwz.c > > for (i = 0; i < ehdr.e_phnum; ++i) > > { > > GElf_Phdr *phdr, phdr_mem; > > -@@ -14331,7 +14354,7 @@ write_dso (DSO *dso, const char *file, struct stat > > *st > > +@@ -14283,7 +14306,7 @@ write_dso (DSO *dso, const char *file, struct stat > > *st > > } > > } > > > > @@ -93,7 +100,7 @@ Index: dwz.c > > { > > error (0, 0, "%s: elf_update failed", dso->filename); > > unlink (file); > > -@@ -15917,7 +15940,7 @@ optimize_multifile (unsigned int *die_count) > > +@@ -15902,7 +15925,7 @@ optimize_multifile (unsigned int *die_count) > > error (0, 0, "Could not create new ELF headers"); > > goto fail; > > } > > @@ -102,7 +109,7 @@ Index: dwz.c > > > > sha1_init_ctx (&ctx); > > for (i = 0; debug_sections[i].name; i++) > > -@@ -16010,7 +16033,7 @@ optimize_multifile (unsigned int *die_count) > > +@@ -15995,7 +16018,7 @@ optimize_multifile (unsigned int *die_count) > > data->d_off = 0; > > data->d_align = 1; > > >