From c7b04ac47721c0c3774da48f0b364e518f3a477691079e40687f14a638f4aef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Li=C5=A1ka?= Date: Mon, 7 Nov 2022 08:12:28 +0000 Subject: [PATCH] - Update to 0.15 release: * Uses xxHash hashing algorithm. A 8% ~ 14% speedup. * Set endianity of multifile using -e, --multifile-endian. * Set pointer size of multifile using -p, --multifile-pointer-size * Process files in parallel using -j N --jobs N. The default is processors / 2. Disabled when multifile is used. * Prints abbrev or DIE offset for Unknown DWARF error messages. * All testcases have been updated to work against the binutils 2.39. - Remove upstreamed patches: * dwz-fix-another-reference-from-pu-to-cu-for-odr.patch * dwz-handle-reordered-dup-chains-in-create-import-tree.patch * dwz-testsuite-fix-pr27463.sh-on-riscv64.patch * dwz-use-grep-E-instead-of-egrep.patch - Rebased patches: * dwz-remove-odr-struct-multifile.sh.patch * dwz-enable-odr-by-default.patch OBS-URL: https://build.opensuse.org/package/show/devel:tools:compiler/dwz?expand=0&rev=44 --- dwz-0.14.tar.xz | 3 - dwz-0.15.tar.xz | 3 + dwz-enable-odr-by-default.patch | 55 ++++----- ...ther-reference-from-pu-to-cu-for-odr.patch | 82 -------------- ...red-dup-chains-in-create-import-tree.patch | 107 ------------------ dwz-remove-odr-struct-multifile.sh.patch | 18 ++- dwz-testsuite-fix-pr27463.sh-on-riscv64.patch | 39 ------- dwz-use-grep-E-instead-of-egrep.patch | 32 ------ dwz.changes | 20 ++++ dwz.spec | 15 +-- 10 files changed, 63 insertions(+), 311 deletions(-) delete mode 100644 dwz-0.14.tar.xz create mode 100644 dwz-0.15.tar.xz delete mode 100644 dwz-fix-another-reference-from-pu-to-cu-for-odr.patch delete mode 100644 dwz-handle-reordered-dup-chains-in-create-import-tree.patch delete mode 100644 dwz-testsuite-fix-pr27463.sh-on-riscv64.patch delete mode 100644 dwz-use-grep-E-instead-of-egrep.patch diff --git a/dwz-0.14.tar.xz b/dwz-0.14.tar.xz deleted file mode 100644 index 83a6532..0000000 --- a/dwz-0.14.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:87ea6f138bdb85b8ef37883e97b04e329fae56302a49cfd41c267d1f53fe6e0f -size 147428 diff --git a/dwz-0.15.tar.xz b/dwz-0.15.tar.xz new file mode 100644 index 0000000..3100349 --- /dev/null +++ b/dwz-0.15.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c3845310e34e306747207e1038bbc4085c7e2edff8de20f7ca7f3884ca752e4 +size 150080 diff --git a/dwz-enable-odr-by-default.patch b/dwz-enable-odr-by-default.patch index ef72be9..aafcd37 100644 --- a/dwz-enable-odr-by-default.patch +++ b/dwz-enable-odr-by-default.patch @@ -1,39 +1,17 @@ -Enable odr by default - -This reverts commit d49096d "[odr] Disable --odr by default". - ---- - dwz.1 | 2 +- - dwz.c | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/dwz.1 b/dwz.1 -index 19dc814..63c50d5 100644 ---- a/dwz.1 -+++ b/dwz.1 -@@ -119,7 +119,7 @@ considered equal. This has the effect that DIEs referring to distinct DIEs - representing the same type (like f.i. pointer type DIEs) are considered equal, - and may be deduplicated. The status of this optimization is experimental. - It's disabled in low-mem mode. --Disabled by default. -+Enabled by default. - .TP - .B \-\-odr-mode= - Set the One-Definition-Rule optimization aggressiveness: basic or link. -diff --git a/dwz.c b/dwz.c -index 5effbc1..a02b8fd 100644 ---- a/dwz.c -+++ b/dwz.c -@@ -230,7 +230,7 @@ enum die_count_methods - }; - static enum die_count_methods die_count_method = estimate; +diff --git a/args.c b/args.c +index e93c24d..3e1113f 100644 +--- a/args.c ++++ b/args.c +@@ -66,7 +66,7 @@ int gen_cu_p = 0; + + enum die_count_methods die_count_method = estimate; -int odr = 0; +int odr = 1; - enum odr_mode { ODR_BASIC, ODR_LINK }; enum odr_mode odr_mode = ODR_LINK; - int odr_mode_parsed = 0; -@@ -16343,7 +16343,7 @@ static struct option_help dwz_common_options_help[] = + + /* Filename if inter-file size optimization should be performed. */ +@@ -202,7 +202,7 @@ static struct option_help dwz_common_options_help[] = "Don't optimize files larger than this limit." }, { NULL, "odr", NULL, NULL, NULL }, @@ -42,3 +20,16 @@ index 5effbc1..a02b8fd 100644 "Enable/disable one definition rule optimization." }, { NULL, "odr-mode", "", "link", "Set aggressiveness level of one definition rule optimization." }, +diff --git a/dwz.1 b/dwz.1 +index 1cff329..f3cd3dd 100644 +--- a/dwz.1 ++++ b/dwz.1 +@@ -133,7 +133,7 @@ considered equal. This has the effect that DIEs referring to distinct DIEs + representing the same type (like f.i. pointer type DIEs) are considered equal, + and may be deduplicated. The status of this optimization is experimental. + It's disabled in low-mem mode. +-Disabled by default. ++Enabled by default. + .TP + .B \-\-odr-mode= + Set the One-Definition-Rule optimization aggressiveness: basic or link. diff --git a/dwz-fix-another-reference-from-pu-to-cu-for-odr.patch b/dwz-fix-another-reference-from-pu-to-cu-for-odr.patch deleted file mode 100644 index 2cd2035..0000000 --- a/dwz-fix-another-reference-from-pu-to-cu-for-odr.patch +++ /dev/null @@ -1,82 +0,0 @@ -Fix another reference from PU to CU for odr - -[ Backport of master commit f765cd9. ] - -When using the test-case from PR27578 with --no-import-optimize, we run into: -... -$ dwz libvclplug_genlo.so.debug -o libvclplug_genlo.so.debug.z \ - -lnone --odr --no-import-optimize -dwz: dwz.c:12700: write_die: \ - Assertion `IMPLIES (cu->cu_kind == CU_PU, \ - die_cu (refd)->cu_kind == CU_PU)' failed. -Aborted (core dumped) -... - -The assert is triggered when trying to write out the reference to the DIE at -2f5e for DW_AT_type: -... - <1><2e8c>: Abbrev Number: 76 (DW_TAG_structure_type) - <2e8d> DW_AT_name : (indirect string, offset: 0x5f592): SalXLib - <2e91> DW_AT_byte_size : 320 - ... - <2><2ed9>: Abbrev Number: 22 (DW_TAG_member) - <2eda> DW_AT_name : (indirect string, offset: 0x56c9b): aReadFDS_ - <2ede> DW_AT_decl_file : 33 - <2edf> DW_AT_decl_line : 173 - <2ee0> DW_AT_decl_column : 21 - <2ee1> DW_AT_type : <0x2f5e> - <2ee5> DW_AT_data_member_location: 48 - <2ee6> DW_AT_accessibility: 2 (protected) -... - -The corresponding duplicate chain (with some annotations manually added) is: -... -duplicate chain: -Compilation Unit @ offset 0x44: - 2d01 O 9f6a4268(29178f4e) 9f6a4268 SalXLib structure_type DECL - 2e8c O 9f6a4268(87d059e8) 9f6a4268 SalXLib structure_type DEF - 40a6 O 9f6a4268(87d059e8) 9f6a4268 SalXLib structure_type DEF -Compilation Unit @ offset 0xfaf6: - 419be O 9f6a4268(29178f4e) 9f6a4268 SalXLib structure_type DECL - 50e56 O 9f6a4268(29178f4e) 9f6a4268 SalXLib structure_type DECL - 6063a O 9f6a4268(29178f4e) 9f6a4268 SalXLib structure_type DECL -Compilation Unit @ offset 0x1bb0f: -... - -The duplicate chain is created by split_dups, which merged all the DECLs with -one duplicate chain containing only DEFs. - -When doing the test for merged_singleton on this duplicate chain, it returns -NULL, because there are two DEFs. However, the DEFs are from the same CU, and -the type for aReadFDS_ is 0x2f5e for both DEFs. Consequently, there is no -duplicate chain for 0x2f5e, and we need to force a singleton duplicate chain. - -Fix this by making merged_singleton return the first DEF. - -2021-03-16 Tom de Vries - - PR dwz/27578 - * dwz.c (merged_singleton): Handle DEFs in the same CU. - ---- - dwz.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/dwz.c b/dwz.c -index 5effbc1..fb7fbb1 100644 ---- a/dwz.c -+++ b/dwz.c -@@ -8378,7 +8378,12 @@ merged_singleton (dw_die_ref die) - { - case ODR_DEF: - if (res) -- return NULL; -+ { -+ if (die_cu (res) == die_cu (d)) -+ continue; -+ else -+ return NULL; -+ } - else - res = d; - break; diff --git a/dwz-handle-reordered-dup-chains-in-create-import-tree.patch b/dwz-handle-reordered-dup-chains-in-create-import-tree.patch deleted file mode 100644 index 4954d44..0000000 --- a/dwz-handle-reordered-dup-chains-in-create-import-tree.patch +++ /dev/null @@ -1,107 +0,0 @@ -Handle reordered dup chains in create_import_tree - -[ Backport of master commit 4e7ce44. ] - -With the test-case from PR27578, we run into: -... -$ dwz libvclplug_genlo.so.debug -o libvclplug_genlo.so.debug.z \ - -lnone --odr --devel-progress -create_import_tree phase 2 -dwz: dwz.c:8833: remove_import_edges: Assertion `i == cucount' failed. -Aborted (core dumped) -... - -Using --devel-verify-edges, we can trigger an assert earlier: -... -create_import_tree phase 1 -dwz: dwz.c:8923: verify_edges_1: \ - Assertion `count == 0 || e1->icu->idx > last_idx' failed. -Aborted (core dumped) -... -where e1->icu->idx == 201 and last_idx == 201. - -The problem is (as we can see using --devel-dump-edges) that there's a -duplicate edge from CU 201 to PU 48: -... -idx: 48 -cu: 0xbc -incoming: 200 -incoming: 201 -incoming: 201 -incoming: 203 -incoming: 204 -incoming: 208 -... - -This can be traced back to this duplicate chain: -... -duplicate chain: - 7fe2 O 2de8b1f3(fc1aa040) 2de8b1f3 Visual structure_type DECL - 19d67 O 2de8b1f3(fc1aa040) 2de8b1f3 Visual structure_type DECL - 2a7aa O 2de8b1f3(fc1aa040) 2de8b1f3 Visual structure_type DECL - 41434 O 2de8b1f3(fc1aa040) 2de8b1f3 Visual structure_type DECL -Compilation Unit @ offset 0x5bf84: - 5fd9d O 2de8b1f3(fc1aa040) 2de8b1f3 Visual structure_type DECL - 611f5 O 2de8b1f3(deb4b00f) 2de8b1f3 Visual structure_type DEF -... - -Since it starts with a DECL, it will be reordered such that the DEF is at -the start. However, that breaks the code in create_import_tree that checks -for duplicate chain members from the same CU, which assumes that those are -adjacent. - -Fix this in create_import_tree. - -2021-03-16 Tom de Vries - - PR dwz/27578 - * dwz.c (create_import_tree): Handle reorder duplicate chain. - ---- - dwz.c | 18 ++++++++++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) - -diff --git a/dwz.c b/dwz.c -index fb7fbb1..481674f 100644 ---- a/dwz.c -+++ b/dwz.c -@@ -9080,11 +9080,18 @@ create_import_tree (void) - ipu->cu = pu; - pu->u1.cu_icu = ipu; - assert (rdie->die_toplevel); -+ dw_die_ref firstdie = NULL; -+ dw_cu_ref firstdiecu = NULL; - for (die = rdie->die_nextdup, prev_cu = NULL; - die; die = die->die_nextdup) - { - dw_cu_ref diecu = die_cu (die); -- if (diecu == prev_cu) -+ if (firstdie == NULL) -+ { -+ firstdie = die; -+ firstdiecu = die_cu (firstdie); -+ } -+ if (diecu == prev_cu || (die != firstdie && diecu == firstdiecu)) - continue; - ipu->incoming_count++; - size += 1 + (diecu->cu_version == 2 ? ptr_size : 4); -@@ -9094,11 +9101,18 @@ create_import_tree (void) - obstack_alloc (&ob2, - ipu->incoming_count - * sizeof (*ipu->incoming)); -+ firstdie = NULL; -+ firstdiecu = NULL; - for (die = rdie->die_nextdup, i = 0, prev_cu = NULL; - die; die = die->die_nextdup) - { - dw_cu_ref diecu = die_cu (die); -- if (diecu == prev_cu) -+ if (firstdie == NULL) -+ { -+ firstdie = die; -+ firstdiecu = die_cu (firstdie); -+ } -+ if (diecu == prev_cu || (die != firstdie && diecu == firstdiecu)) - continue; - icu = diecu->u1.cu_icu; - if (icu == NULL) diff --git a/dwz-remove-odr-struct-multifile.sh.patch b/dwz-remove-odr-struct-multifile.sh.patch index a5ccdc0..705fab4 100644 --- a/dwz-remove-odr-struct-multifile.sh.patch +++ b/dwz-remove-odr-struct-multifile.sh.patch @@ -1,13 +1,18 @@ diff --git a/testsuite/dwz.tests/odr-struct-multifile.sh b/testsuite/dwz.tests/odr-struct-multifile.sh -deleted file mode 100644 -index cc462c9..0000000 +deleted file mode 100755 +index 5961abf..0000000 --- a/testsuite/dwz.tests/odr-struct-multifile.sh +++ /dev/null -@@ -1,53 +0,0 @@ +@@ -1,61 +0,0 @@ -if ! $execs/dwz-for-test --odr -v 2>/dev/null; then - exit 77 -fi - +-readelf_flags="" +-if readelf -h 2>&1 | grep -q "\-wN"; then +- readelf_flags=-wN +-fi +- -cp $execs/odr-struct 1 -cp 1 2 - @@ -45,14 +50,17 @@ index cc462c9..0000000 - [ $cnt -eq 1 ] -done - +-# Even with -wN readelf 2.38-15.fc37 follows and prints the contents +-# of the alt file. So make sure it cannot do that by removing it. +-rm 3 - -for name in aaa bbb ccc; do -- cnt=$(readelf -wi 1 | grep -c "DW_AT_name.*:.*$name" || true) +- cnt=$(readelf -wi $readelf_flags 1 | grep -c "DW_AT_name.*:.*$name" || true) - [ $cnt -eq 0 ] -done - -for name in member_one member_two member_three member_four; do -- cnt=$(readelf -wi 1 | grep -c "DW_AT_name.*:.*$name" || true) +- cnt=$(readelf -wi $readelf_flags 1 | grep -c "DW_AT_name.*:.*$name" || true) - [ $cnt -eq 0 ] -done - diff --git a/dwz-testsuite-fix-pr27463.sh-on-riscv64.patch b/dwz-testsuite-fix-pr27463.sh-on-riscv64.patch deleted file mode 100644 index 61e5b83..0000000 --- a/dwz-testsuite-fix-pr27463.sh-on-riscv64.patch +++ /dev/null @@ -1,39 +0,0 @@ -[testsuite] Fix pr27463.sh on riscv64 - -On riscv64, I run into: -... -cc main.c unavailable-dwarf-piece-dw.S -o unavailable-dwarf-piece -unavailable-dwarf-piece-dw.S: Assembler messages: -unavailable-dwarf-piece-dw.S:24: Error: non-constant .uleb128 is not supported - ... -make: *** [Makefile:100: unavailable-dwarf-piece] Error 1 -... - -Fix this similar to commit 53c0488 "[testsuite] Fix pr25109.sh on riscv64". - -2021-03-17 Tom de Vries - - * Makefile (no-multifile-prop): Allow target rule to fail. - ---- - Makefile | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/Makefile b/Makefile -index 2f7c76a..2990567 100644 ---- a/Makefile -+++ b/Makefile -@@ -96,11 +96,11 @@ $(TEMP_ASM_FILES): %-dw.S: $(TEST_SRC)/../lib/%.exp - export DEJAGNU=$(DEJAGNU); \ - runtest --tool=dwz -srcdir $(srcdir)/testsuite/ lib/$*.exp - --$(filter-out no-multifile-prop, $(TEST_EXECS_DWARF_ASM)): %: %-dw.S -+$(filter-out no-multifile-prop unavailable-dwarf-piece, $(TEST_EXECS_DWARF_ASM)): %: %-dw.S - $(CC) $(TEST_SRC)/main.c $< -o $@ - - # Fails to compile on riscv64: Error: non-constant .uleb128 is not supported. --no-multifile-prop: %: %-dw.S -+no-multifile-prop unavailable-dwarf-piece: %: %-dw.S - $(CC) $(TEST_SRC)/main.c $< -o $@ || true - - odr-struct: diff --git a/dwz-use-grep-E-instead-of-egrep.patch b/dwz-use-grep-E-instead-of-egrep.patch deleted file mode 100644 index 3c9400c..0000000 --- a/dwz-use-grep-E-instead-of-egrep.patch +++ /dev/null @@ -1,32 +0,0 @@ -From a57177980a05f0f84bf290ab7b68f73c0f78053f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Martin=20Li=C5=A1ka?= -Date: Wed, 7 Sep 2022 21:55:03 +0200 -Subject: [PATCH] Use grep -E instead of egrep. - -egrep is obsoleted starting with GNU Grep 3.8. -diff --git a/contrib/bytes-per-die.sh b/contrib/bytes-per-die.sh -index 969f733..fda8998 100755 ---- a/contrib/bytes-per-die.sh -+++ b/contrib/bytes-per-die.sh -@@ -3,7 +3,7 @@ - f="$1" - - size=$(readelf -WS "$f" \ -- | egrep "[ \t]\.debug_info" \ -+ | grep -E "[ \t]\.debug_info" \ - | sed 's/.*\.debug_info//' \ - | awk '{print $4}') - size=$((16#$size)) -diff --git a/testsuite/dwz.tests/two-files-low-mem-die-limit-0.sh b/testsuite/dwz.tests/two-files-low-mem-die-limit-0.sh -index 7f1e174..71d8518 100644 ---- a/testsuite/dwz.tests/two-files-low-mem-die-limit-0.sh -+++ b/testsuite/dwz.tests/two-files-low-mem-die-limit-0.sh -@@ -7,7 +7,7 @@ $execs/dwz-for-test \ - 1 2 \ - 2> dwz.err - --if egrep -q "Compressing (1|2)$" dwz.err; then -+if grep -Eq "Compressing (1|2)$" dwz.err; then - exit 1 - fi - diff --git a/dwz.changes b/dwz.changes index 7533ed5..fb98250 100644 --- a/dwz.changes +++ b/dwz.changes @@ -1,3 +1,23 @@ +------------------------------------------------------------------- +Mon Nov 7 08:09:38 UTC 2022 - Martin Liška + +- Update to 0.15 release: + * Uses xxHash hashing algorithm. A 8% ~ 14% speedup. + * Set endianity of multifile using -e, --multifile-endian. + * Set pointer size of multifile using -p, --multifile-pointer-size + * Process files in parallel using -j N --jobs N. The default is + processors / 2. Disabled when multifile is used. + * Prints abbrev or DIE offset for Unknown DWARF error messages. + * All testcases have been updated to work against the binutils 2.39. +- Remove upstreamed patches: + * dwz-fix-another-reference-from-pu-to-cu-for-odr.patch + * dwz-handle-reordered-dup-chains-in-create-import-tree.patch + * dwz-testsuite-fix-pr27463.sh-on-riscv64.patch + * dwz-use-grep-E-instead-of-egrep.patch +- Rebased patches: + * dwz-remove-odr-struct-multifile.sh.patch + * dwz-enable-odr-by-default.patch + ------------------------------------------------------------------- Thu Sep 8 17:53:27 UTC 2022 - Martin Liška diff --git a/dwz.spec b/dwz.spec index ecbf5e3..b08bd1d 100644 --- a/dwz.spec +++ b/dwz.spec @@ -42,7 +42,7 @@ ExclusiveArch: do_not_build %endif Name: dwz%{name_suffix} -Version: 0.14 +Version: 0.15 Release: 0 %if %{build_main} Summary: DWARF optimization and duplicate removal tool @@ -60,6 +60,7 @@ Source: dwz-%{version}.tar.xz URL: https://sourceware.org/dwz/ BuildRequires: gcc-c++ BuildRequires: libelf-devel +BuildRequires: xxhash-devel BuildRequires: xz %if %{build_testsuite} BuildRequires: dejagnu @@ -78,12 +79,8 @@ NoSource: 0 Source1: dwz-rpmlintrc Source2: tramp3d-v4.cpp.xz -Patch1: dwz-fix-another-reference-from-pu-to-cu-for-odr.patch -Patch2: dwz-handle-reordered-dup-chains-in-create-import-tree.patch -Patch3: dwz-enable-odr-by-default.patch -Patch4: dwz-testsuite-fix-pr27463.sh-on-riscv64.patch -Patch5: dwz-remove-odr-struct-multifile.sh.patch -Patch6: dwz-use-grep-E-instead-of-egrep.patch +Patch1: dwz-enable-odr-by-default.patch +Patch2: dwz-remove-odr-struct-multifile.sh.patch %if %{build_main} %description @@ -114,10 +111,6 @@ This package contains the testsuite results from DWZ. %setup -q -n dwz %patch1 -p1 %patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 cp ../../SOURCES/tramp3d-v4.cpp.xz . xz -d tramp3d-v4.cpp.xz