Sunday, June 04, 2023

Re: UPDATE: devel/dwz 0.14 => 0.15

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;
> >
>

No comments:

Post a Comment