diff --git a/_multibuild b/_multibuild new file mode 100644 index 0000000..964176c --- /dev/null +++ b/_multibuild @@ -0,0 +1,3 @@ + + testsuite + diff --git a/dwz-0.12-DW_OP_GNU_variable_value.patch b/dwz-0.12-DW_OP_GNU_variable_value.patch deleted file mode 100644 index a89e0bc..0000000 --- a/dwz-0.12-DW_OP_GNU_variable_value.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/dwarf2.def b/dwarf2.def -index e9a8bca..17311fa 100644 ---- a/dwarf2.def -+++ b/dwarf2.def -@@ -588,6 +588,9 @@ DW_OP (DW_OP_GNU_reinterpret, 0xf9) - DW_OP (DW_OP_GNU_parameter_ref, 0xfa) - /* Extension for Fission. See http://gcc.gnu.org/wiki/DebugFission. */ - DW_OP (DW_OP_GNU_addr_index, 0xfb) -+/* The GNU variable value extension. -+ See http://dwarfstd.org/ShowIssue.php?issue=161109.2 . */ -+DW_OP (DW_OP_GNU_variable_value, 0xfd) - /* HP extensions. */ - DW_OP_DUP (DW_OP_HP_unknown, 0xe0) /* Ouch, the same as GNU_push_tls_address. */ - DW_OP (DW_OP_HP_is_value, 0xe1) -diff --git a/dwz.c b/dwz.c -index b3b779d..b387ebc 100644 ---- a/dwz.c -+++ b/dwz.c -@@ -1522,6 +1522,7 @@ read_exprloc (DSO *dso, dw_die_ref die, unsigned char *ptr, size_t len, - ptr += 4; - break; - case DW_OP_call_ref: -+ case DW_OP_GNU_variable_value: - case DW_OP_GNU_implicit_pointer: - cu = die_cu (die); - addr = read_size (ptr, cu->cu_version == 2 ? ptr_size : 4); -@@ -8576,6 +8577,7 @@ adjust_exprloc (dw_cu_ref cu, dw_die_ref die, dw_cu_ref refcu, - ptr += 4; - break; - case DW_OP_call_ref: -+ case DW_OP_GNU_variable_value: - case DW_OP_GNU_implicit_pointer: - addr = read_size (ptr, refcu->cu_version == 2 ? ptr_size : 4); - assert (cu->cu_version == refcu->cu_version); - diff --git a/dwz-0.12-ignore-nobits.patch b/dwz-0.12-ignore-nobits.patch deleted file mode 100644 index 4448f4e..0000000 --- a/dwz-0.12-ignore-nobits.patch +++ /dev/null @@ -1,138 +0,0 @@ -diff --git a/dwz.c b/dwz.c -index b3b779d..5ab45a2 100644 ---- a/dwz.c -+++ b/dwz.c -@@ -10016,6 +10016,26 @@ error_out: - return NULL; - } - -+/* Sort shdr indices after sh_offset. */ -+static DSO *shdr_sort_compar_dso; -+static int -+shdr_sort_compar (const void *p1, const void *p2) -+{ -+ const int *idx1 = (const int *)p1; -+ const int *idx2 = (const int *)p2; -+ if (shdr_sort_compar_dso->shdr[*idx1].sh_offset -+ < shdr_sort_compar_dso->shdr[*idx2].sh_offset) -+ return -1; -+ else if (shdr_sort_compar_dso->shdr[*idx1].sh_offset -+ > shdr_sort_compar_dso->shdr[*idx2].sh_offset) -+ return 1; -+ if (*idx1 < *idx2) -+ return -1; -+ else if (*idx1 > *idx2) -+ return 1; -+ return 0; -+} -+ - /* Store new ELF into FILE. debug_sections array contains - new_data/new_size pairs where needed. */ - static int -@@ -10090,7 +10110,14 @@ write_dso (DSO *dso, const char *file, struct stat *st) - if (off < min_shoff) - min_shoff = off; - for (j = 1; j < dso->ehdr.e_shnum; ++j) -- if (dso->shdr[j].sh_offset > off) -+ if (dso->shdr[j].sh_offset > off -+ /* Do not adjust SHT_NOBITS sh_offset here, the kernel -+ for example lays out those in the middle of some -+ other sections which may cause their offset to wrap -+ around zero. -+ ??? Now in theory not adjusting means we might end up -+ with those having a higher offset than any other section. */ -+ && dso->shdr[j].sh_type != SHT_NOBITS) - dso->shdr[j].sh_offset += diff; - if (ehdr.e_shoff > off) - ehdr.e_shoff += diff; -@@ -10123,6 +10150,7 @@ write_dso (DSO *dso, const char *file, struct stat *st) - - if (min_shoff != ~(GElf_Off) 0) - { -+ /* Any section needs sh_offset adjustment to meet sh_addralign? */ - for (j = 1; j < dso->ehdr.e_shnum; ++j) - if (dso->shdr[j].sh_offset >= min_shoff - && dso->shdr[j].sh_addralign > 1 -@@ -10133,21 +10161,34 @@ write_dso (DSO *dso, const char *file, struct stat *st) - && (ehdr.e_shoff & (ehdr.e_ident[EI_CLASS] == ELFCLASS64 - ? 7 : 3)) != 0)) - { -+ /* Compute a section index list sorted after sh_offset. */ -+ int *shdrmap = alloca (dso->ehdr.e_shnum * sizeof (int)); -+ for (j = 0; j < dso->ehdr.e_shnum; ++j) -+ shdrmap[j] = j; -+ shdr_sort_compar_dso = dso; -+ qsort (shdrmap, dso->ehdr.e_shnum, sizeof (int), -+ shdr_sort_compar); -+ shdr_sort_compar_dso = NULL; -+ - /* Need to fix up sh_offset/e_shoff. Punt if all the sections - >= min_shoff aren't non-ALLOC. */ - GElf_Off last_shoff = 0; - int k = -1; - bool shdr_placed = false; - for (j = 1; j < dso->ehdr.e_shnum; ++j) -- if (dso->shdr[j].sh_offset < min_shoff && !last_shoff) -+ if (dso->shdr[shdrmap[j]].sh_offset < min_shoff && !last_shoff) -+ continue; -+ else if (dso->shdr[shdrmap[j]].sh_type == SHT_NOBITS) -+ /* NOBITS are just left in place where they are and their -+ sh_size does not matter. */ - continue; -- else if ((dso->shdr[j].sh_flags & SHF_ALLOC) != 0) -+ else if ((dso->shdr[shdrmap[j]].sh_flags & SHF_ALLOC) != 0) - { - error (0, 0, "Allocatable section in %s after non-allocatable " - "ones", dso->filename); - return 1; - } -- else if (dso->shdr[j].sh_offset < last_shoff) -+ else if (dso->shdr[shdrmap[j]].sh_offset < last_shoff) - { - error (0, 0, "Section offsets in %s not monotonically " - "increasing", dso->filename); -@@ -10157,7 +10198,8 @@ write_dso (DSO *dso, const char *file, struct stat *st) - { - if (k == -1) - k = j; -- last_shoff = dso->shdr[j].sh_offset + dso->shdr[j].sh_size; -+ last_shoff = (dso->shdr[shdrmap[j]].sh_offset -+ + dso->shdr[shdrmap[j]].sh_size); - } - last_shoff = min_shoff; - for (j = k; j <= dso->ehdr.e_shnum; ++j) -@@ -10165,7 +10207,7 @@ write_dso (DSO *dso, const char *file, struct stat *st) - if (!shdr_placed - && ehdr.e_shoff >= min_shoff - && (j == dso->ehdr.e_shnum -- || ehdr.e_shoff < dso->shdr[j].sh_offset)) -+ || ehdr.e_shoff < dso->shdr[shdrmap[j]].sh_offset)) - { - if (ehdr.e_ident[EI_CLASS] == ELFCLASS64) - ehdr.e_shoff = (last_shoff + 7) & -8; -@@ -10176,13 +10218,18 @@ write_dso (DSO *dso, const char *file, struct stat *st) - } - if (j == dso->ehdr.e_shnum) - break; -- dso->shdr[j].sh_offset = last_shoff; -- if (dso->shdr[j].sh_addralign > 1) -- dso->shdr[j].sh_offset -- = (last_shoff + dso->shdr[j].sh_addralign - 1) -- & ~(dso->shdr[j].sh_addralign - (GElf_Off) 1); -- last_shoff = dso->shdr[j].sh_offset + dso->shdr[j].sh_size; -- if (addsec != -1 && j == addsec) -+ /* Do not touch SHT_NOBITS section offsets and more importantly -+ do not account for their size. */ -+ if (dso->shdr[shdrmap[j]].sh_type == SHT_NOBITS) -+ continue; -+ dso->shdr[shdrmap[j]].sh_offset = last_shoff; -+ if (dso->shdr[shdrmap[j]].sh_addralign > 1) -+ dso->shdr[shdrmap[j]].sh_offset -+ = (last_shoff + dso->shdr[shdrmap[j]].sh_addralign - 1) -+ & ~(dso->shdr[shdrmap[j]].sh_addralign - (GElf_Off) 1); -+ last_shoff = (dso->shdr[shdrmap[j]].sh_offset -+ + dso->shdr[shdrmap[j]].sh_size); -+ if (addsec != -1 && shdrmap[j] == addsec) - last_shoff += addsize; - } - } diff --git a/dwz-0.12.tar.xz b/dwz-0.12.tar.xz deleted file mode 100644 index 0feaff1..0000000 --- a/dwz-0.12.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:94fb5acf0650428eb153b3638974ccbb2f3fedecc372be53d21d6b328263de32 -size 91116 diff --git a/dwz-0.13.tar.xz b/dwz-0.13.tar.xz new file mode 100644 index 0000000..02bf0e9 --- /dev/null +++ b/dwz-0.13.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8da2495d666ba94c1d9b0eca0799e32fc4553d5cbcc8eadfe90d7ca48cf4f5b0 +size 113616 diff --git a/dwz-low-mem-Fix-DW_OP_GNU_parameter_ref-handling-in-read_exprloc.patch b/dwz-low-mem-Fix-DW_OP_GNU_parameter_ref-handling-in-read_exprloc.patch deleted file mode 100644 index f12f1ab..0000000 --- a/dwz-low-mem-Fix-DW_OP_GNU_parameter_ref-handling-in-read_exprloc.patch +++ /dev/null @@ -1,57 +0,0 @@ -[low-mem] Fix DW_OP_GNU_parameter_ref handling in read_exprloc - -Function read_exprloc contains a loop that marks all parents of a -DW_OP_GNU_parameter_ref reference with CK_BAD. The loop however has no -private loop variable, so the ref variable, initially pointing to the -referenced DIE, ends up after the loop pointing to the root parent of the -reference instead. Consequently, the code after the loop, intended to be -executed for the referenced DIE, is instead executed for the root parent of -the referenced DIE. - -Fix this by moving the loop alap. - -2019-02-14 Tom de Vries - - PR dwz/24195 - * dwz.c (read_exprloc): Move loop marking parents with CK_BAD alap. - ---- - dwz.c | 18 +++++++++--------- - 1 file changed, 9 insertions(+), 9 deletions(-) - -diff --git a/dwz.c b/dwz.c -index d348418..6e6b6fb 100644 ---- a/dwz.c -+++ b/dwz.c -@@ -1492,6 +1492,15 @@ read_exprloc (DSO *dso, dw_die_ref die, unsigned char *ptr, size_t len, - } - if (op == DW_OP_call2) - ref->die_op_call2_referenced = 1; -+ if (unlikely (low_mem)) -+ { -+ ref->die_referenced = 1; -+ /* As .debug_loc adjustment is done after -+ write_info finishes, we need to keep the referenced -+ DIEs around uncollapsed. */ -+ if (need_adjust) -+ ref->die_intercu_referenced = 1; -+ } - if (ref->die_ck_state == CK_KNOWN) - { - ref->die_ck_state = CK_BAD; -@@ -1504,15 +1513,6 @@ read_exprloc (DSO *dso, dw_die_ref die, unsigned char *ptr, size_t len, - } - else - ref->die_ck_state = CK_BAD; -- if (unlikely (low_mem)) -- { -- ref->die_referenced = 1; -- /* As .debug_loc adjustment is done after -- write_info finishes, we need to keep the referenced -- DIEs around uncollapsed. */ -- if (need_adjust) -- ref->die_intercu_referenced = 1; -- } - die->die_ck_state = CK_BAD; - if (need_adjust) - *need_adjust = true; diff --git a/dwz-update-version-copyright-message.patch b/dwz-update-version-copyright-message.patch new file mode 100644 index 0000000..0353a39 --- /dev/null +++ b/dwz-update-version-copyright-message.patch @@ -0,0 +1,294 @@ +Update --version copyright message + +[ This is a backport of master commit dda7184. Output of +contrib/gen-copyright-years.sh and dwz --version in this log message have been +updated accordingly. ] + +In commit 9a663b4 "Update copyright" we've updated copyright in the sources, +but not in the --version copyright message. + +Update the --version copyright message, using new script +contrib/gen-copyright-years.sh that extracts the copyright years from the +source files, and generates a file COPYRIGHT_YEARS containing define flags: +... +-DFSF_YEARS='"1992-2017"' +-DRH_YEARS='"2001-2018"' +-DSUSE_YEARS='"2019"' +... +resulting in: +... +$ dwz --version +dwz version 0.13 +Copyright (C) 2001-2018 Red Hat, Inc. +Copyright (C) 1992-2017 Free Software Foundation, Inc. +Copyright (C) 2019 SUSE LLC. +... + +2019-08-15 Tom de Vries + + * contrib/copyright-lines.awk: New file. + * contrib/gen-copyright-years.sh: New file. + * COPYRIGHT_YEARS: Generate. + * Makefile (override CFLAGS +=, dwz-for-test): Add COPYRIGHT_YEARS + defines. + * dwz.c (version): Update copyright message using COPYRIGHT_YEARS + defines. + +--- + COPYRIGHT_YEARS | 3 + + Makefile | 6 +- + contrib/copyright-lines.awk | 27 +++++++ + contrib/gen-copyright-years.sh | 162 +++++++++++++++++++++++++++++++++++++++++ + dwz.c | 5 +- + 5 files changed, 199 insertions(+), 4 deletions(-) + +diff --git a/COPYRIGHT_YEARS b/COPYRIGHT_YEARS +new file mode 100644 +index 0000000..1dc95a5 +--- /dev/null ++++ b/COPYRIGHT_YEARS +@@ -0,0 +1,3 @@ ++-DFSF_YEARS='"1992-2017"' ++-DRH_YEARS='"2001-2018"' ++-DSUSE_YEARS='"2019"' +diff --git a/Makefile b/Makefile +index 7e281e5..c945c9d 100644 +--- a/Makefile ++++ b/Makefile +@@ -5,7 +5,8 @@ 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)"' ++override CFLAGS += -Wall -W -D_FILE_OFFSET_BITS=64 \ ++ -DDWZ_VERSION='"$(DWZ_VERSION)"' $(shell cat $(srcdir)/COPYRIGHT_YEARS) + prefix = /usr + exec_prefix = $(prefix) + bindir = $(exec_prefix)/bin +@@ -52,7 +53,8 @@ DWZ_TEST_SOURCES := $(patsubst %.o,%-for-test.c,$(OBJECTS)) + + dwz-for-test: $(DWZ_TEST_SOURCES) + $(CC) $(DWZ_TEST_SOURCES) -O2 -g -lelf -o $@ -Wall -W -DDEVEL \ +- -D_FILE_OFFSET_BITS=64 -DDWZ_VERSION='"for-test"' -I$(srcdir) ++ -D_FILE_OFFSET_BITS=64 -DDWZ_VERSION='"for-test"' -I$(srcdir) \ ++ $(shell cat $(srcdir)/COPYRIGHT_YEARS) + + min: + $(CC) $(TEST_SRC)/min.c $(TEST_SRC)/min-2.c -o $@ -g +diff --git a/contrib/copyright-lines.awk b/contrib/copyright-lines.awk +new file mode 100644 +index 0000000..b031c50 +--- /dev/null ++++ b/contrib/copyright-lines.awk +@@ -0,0 +1,27 @@ ++BEGIN { ++ start=0 ++} ++ ++/Copyright \(C\).*[.]/ { ++ print ++ next ++} ++ ++/Copyright \(C\)/ { ++ start=1 ++ printf $0 ++ next ++} ++ ++/[.]/ { ++ if (start == 0) ++ next ++ print ++ start=0 ++} ++ ++// { ++ if (start == 0) ++ next ++ printf $0 ++} +diff --git a/contrib/gen-copyright-years.sh b/contrib/gen-copyright-years.sh +new file mode 100755 +index 0000000..1ef6f3f +--- /dev/null ++++ b/contrib/gen-copyright-years.sh +@@ -0,0 +1,162 @@ ++#!/bin/bash ++ ++this=$(basename $0) ++ ++max () ++{ ++ local a ++ a=$1 ++ local b ++ b=$2 ++ ++ if [ "$a" = "" ]; then ++ echo "$b" ++ return ++ elif [ "$b" = "" ]; then ++ echo "$a" ++ return ++ fi ++ ++ if [ $a -gt $b ]; then ++ echo "$a" ++ else ++ echo "$b" ++ fi ++} ++ ++min () ++{ ++ local a ++ a="$1" ++ local b ++ b="$2" ++ ++ if [ "$a" = "" ]; then ++ echo "$b" ++ return ++ elif [ "$b" = "" ]; then ++ echo "$a" ++ return ++ fi ++ ++ if [ $a -lt $b ]; then ++ echo "$a" ++ else ++ echo "$b" ++ fi ++} ++ ++print_range () { ++ local a ++ a="$1" ++ local b ++ b="$2" ++ ++ if [ "$a" = "$b" ]; then ++ echo "$a" ++ return ++ fi ++ echo "$a-$b" ++} ++ ++process_line () ++{ ++ local line ++ line="$1" ++ ++ fsf=false ++ rh=false ++ suse=false; ++ ++ if echo "$line" \ ++ | grep -q "Free Software Foundation, Inc\."; then ++ fsf=true ++ who=fsf ++ line=$(echo "$line" \ ++ | sed 's/Free Software Foundation, Inc\.//') ++ elif echo "$line" \ ++ | grep -q "Red Hat, Inc\."; then ++ rh=true ++ who=rh ++ line=$(echo "$line" \ ++ | sed 's/Red Hat, Inc\.//') ++ elif echo "$line" \ ++ | grep -q "SUSE LLC\."; then ++ suse=true ++ who=suse ++ line=$(echo "$line" \ ++ | sed 's/SUSE LLC\.//') ++ else ++ echo "error: unknown copyright: $line" ++ exit 1 ++ fi ++ ++ line=$(echo "$line" \ ++ | sed 's/[,-]/ /g') ++ max_year=$(echo "$line" \ ++ | sed 's/ /\n/g' \ ++ | grep -v '^$' \ ++ | sort -n -r \ ++ | head -n 1) ++ min_year=$(echo "$line" \ ++ | sed 's/ /\n/g' \ ++ | grep -v '^$' \ ++ | sort -n \ ++ | head -n 1) ++ ++ if $fsf; then ++ fsf_max=$(max "$fsf_max" "$max_year") ++ fsf_min=$(min "$fsf_min" "$min_year") ++ elif $rh; then ++ rh_max=$(max "$rh_max" "$max_year") ++ rh_min=$(min "$rh_min" "$min_year") ++ elif $suse; then ++ suse_max=$(max "$suse_max" "$max_year") ++ suse_min=$(min "$suse_min" "$min_year") ++ fi ++} ++ ++main () ++{ ++ if ! git status --ignored 2>&1 \ ++ | grep -q "nothing to commit, working tree clean"; then ++ echo "Git tree not clean" ++ exit 1 ++ fi ++ ++ local tmp ++ tmp=$(mktemp) ++ ++ for f in *.c *.h *.def; do ++ if ! grep -q "Copyright (C)" $f; then ++ echo "error: found file without copyright marker: $f" ++ exit 1 ++ fi ++ ++ echo processing file: $f ++ ++ grep -v '"' $f \ ++ | awk -f contrib/copyright-lines.awk \ ++ > $tmp ++ ++ while read line; do ++ line=$(echo "$line" \ ++ | sed 's/ */ /g') ++ line=$(echo "$line" \ ++ | sed 's/.*Copyright (C) *//') ++ echo "Processing line: $line" ++ process_line "$line" ++ done < $tmp ++ done ++ ++ rm -f $tmp ++ ++ echo "-DFSF_YEARS='\"$(print_range $fsf_min $fsf_max)\"'" \ ++ > COPYRIGHT_YEARS ++ echo "-DRH_YEARS='\"$(print_range $rh_min $rh_max)\"'" \ ++ >> COPYRIGHT_YEARS ++ echo "-DSUSE_YEARS='\"$(print_range $suse_min $suse_max)\"'" \ ++ >> COPYRIGHT_YEARS ++} ++ ++main "$@" +diff --git a/dwz.c b/dwz.c +index 266f56d..727314f 100644 +--- a/dwz.c ++++ b/dwz.c +@@ -12395,8 +12395,9 @@ version (void) + { + fprintf (stderr, + "dwz version " DWZ_VERSION "\n" +- "Copyright (C) 2001-2012 Red Hat, Inc.\n" +- "Copyright (C) 2003 Free Software Foundation, Inc.\n" ++ "Copyright (C) " RH_YEARS " Red Hat, Inc.\n" ++ "Copyright (C) " FSF_YEARS " Free Software Foundation, Inc.\n" ++ "Copyright (C) " SUSE_YEARS " SUSE LLC.\n" + "This program is free software; you may redistribute it under the terms of\n" + "the GNU General Public License version 3 or (at your option) any later version.\n" + "This program has absolutely no warranty.\n"); diff --git a/dwz.changes b/dwz.changes index 656e998..9c342c7 100644 --- a/dwz.changes +++ b/dwz.changes @@ -1,3 +1,28 @@ +------------------------------------------------------------------- +Fri Aug 16 11:26:06 UTC 2019 - Tom de Vries + +- Fix copyright years in --version message: + * dwz-update-version-copyright-message.patch + +------------------------------------------------------------------- +Tue Aug 13 09:29:02 UTC 2019 - Tom de Vries + +- Split off dwz-testsuite package using multibuild, to remove build + cycle +- Don't require binutils-gold for riscv64 + +------------------------------------------------------------------- +Fri Aug 2 10:43:02 UTC 2019 - Tom de Vries + +- DWZ 0.13 update: + * Dropped patches: + - dwz-0.12-ignore-nobits.patch + - dwz-0.12-DW_OP_GNU_variable_value.patch + - dwz-low-mem-Fix-DW_OP_GNU_parameter_ref-handling-in-read_exprloc.patch + * Added BuildRequires for dejagnu, elfutils, gdb and binutils-gold. + * Add %check +- Add URL tag + ------------------------------------------------------------------- Mon Feb 18 14:31:42 UTC 2019 - tdevries@suse.com diff --git a/dwz.spec b/dwz.spec index b4b2238..3a6179e 100644 --- a/dwz.spec +++ b/dwz.spec @@ -12,25 +12,65 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # -Name: dwz -Version: 0.12 +%define flavor @BUILD_FLAVOR@%{nil} + +%if "%flavor" == "testsuite" +%define build_main 0 +%define build_testsuite 1 +%else +%define build_main 1 +%define build_testsuite 0 +%endif + +%if %{build_testsuite} +%define debug_package %{nil} +%endif + +%if %{build_main} +%define name_suffix %{nil} +%else +%define name_suffix -%{flavor} +%endif + +Name: dwz%{name_suffix} +Version: 0.13 Release: 0 +%if %{build_main} Summary: DWARF optimization and duplicate removal tool -#Git-Clone: git://sourceware.org/git/dwz -#Git-Web: https://sourceware.org/git/?p=dwz.git;a=summary License: GPL-2.0-or-later AND LGPL-2.0-or-later Group: Development/Tools/Building -Source: %{name}-%{version}.tar.xz -Patch0: dwz-0.12-ignore-nobits.patch -Patch1: dwz-0.12-DW_OP_GNU_variable_value.patch -Patch2: dwz-low-mem-Fix-DW_OP_GNU_parameter_ref-handling-in-read_exprloc.patch +%endif +%if %{build_testsuite} +Summary: Testsuite results from DWZ +License: GPL-2.0-or-later AND LGPL-2.0-or-later +Group: Development/Tools/Building +%endif +#Git-Clone: git://sourceware.org/git/dwz +#Git-Web: https://sourceware.org/git/?p=dwz.git;a=summary +Source: dwz-%{version}.tar.xz +Url: https://sourceware.org/dwz/ BuildRequires: libelf-devel BuildRequires: xz +%if %{build_testsuite} +BuildRequires: dejagnu +BuildRequires: elfutils +BuildRequires: gdb +%ifnarch riscv64 +BuildRequires: binutils-gold +%endif +%endif +%if !%{build_main} +NoSource: 0 +%endif + +Patch1: dwz-update-version-copyright-message.patch + +%if %{build_main} %description dwz optimizes DWARF debugging information contained in ELF shared libraries and executables for size, by replacing DWARF information @@ -48,22 +88,42 @@ When not using the -m option (multifile mode), GDB CVS snapshot (soon to be 7.5) is sufficient, when using -m option, GDB from a git branch http://sources.redhat.com/git/?p=archer.git;a=shortlog;h=refs/heads/archer-tromey-dwz-multifile is needed. +%endif + +%if %{build_testsuite} +%description +This package contains the testsuite results from DWZ. +%endif %prep -%setup -q -n %{name} -%patch0 -p1 +%setup -q -n dwz %patch1 -p1 -%patch2 -p1 %build make %{?_smp_mflags} CFLAGS="%{optflags}" -%install -%make_install +%check +%if %{build_testsuite} +make -k check +%endif +%install +%if %{build_main} +%make_install +%endif + +%if %{build_main} %files %license COPYING %{_bindir}/dwz %{_mandir}/man1/dwz.1%{?ext_man} +%endif + +%if %{build_testsuite} +%files +%defattr(-,root,root) +%doc dwz.sum +%doc dwz.log +%endif %changelog