Tuesday, November 29, 2022

Re: UPDATE: devel/dwz 0.14 => 0.15

On 2022/11/29 15:55, Brian Callahan wrote:
> Hi ports --
>
> Attached is an update to DWZ, which was released earlier this month.
> Here is the release announcement, which includes the changelog:
> https://sourceware.org/pipermail/dwz/2022q4/001385.html
>
> Apologies for the large diff; DWZ now using xxHash for a decent speedup.
> Unfortunately, that means pulling xxHash in its entirety into DWZ. At
> least xxHash is a single-header library.
>
> I have only tried this on amd64, so testing on aarch64 would be appreciated.
>
> OK?

How about either using BUILD_DEPENDS on xxhash (on the :patch target, to
avoid having to actually package xxhash) instead, or listing the xxhash
tarball in DISTFILES? (even just copying it to files/xxhash.h would be
a bit easier than adding a whole new file via a patch, at least it
would then be directly diff'able).

Example diff using :patch below.

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 16:17:01 -0000
@@ -1,5 +1,5 @@
COMMENT = DWARF optimization and duplicate removal tool
-DISTNAME = dwz-0.14
+DISTNAME = dwz-0.15

CATEGORIES = devel

@@ -23,7 +23,25 @@ FAKE_FLAGS = mandir=${TRUEPREFIX}/man pr
WRKDIST = ${WRKDIR}/dwz

# XXX bootstrap: DEBUG_PACKAGES needs a dwz binary to work
+# use :patch target to avoid having to package xxhash

DWZ = ${WRKBUILD}/dwz
+
+BUILD_DEPENDS = sysutils/xxhash:patch
+post-extract:
+ cp ${WRKDIR}/sysutils/xxhash/*/xxhash.h ${WRKSRC}/
+
+.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 16:17:01 -0000
@@ -1,2 +1,2 @@
-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=
+SIZE (dwz-0.15.tar.gz) = 192777
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 16:17:01 -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 16:17:01 -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 16:17:01 -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