From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 101589 invoked by alias); 25 Nov 2019 14:39:07 -0000 Mailing-List: contact dwz-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: dwz-owner@sourceware.org Received: (qmail 101579 invoked by uid 89); 25 Nov 2019 14:39:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.100.3 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS autolearn=ham version=3.3.1 spammy= X-Spam-Status: No, score=-25.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on sourceware.org X-Spam-Level: X-HELO: mx1.suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Date: Tue, 01 Jan 2019 00:00:00 -0000 From: Tom de Vries To: dwz@sourceware.org, jakub@redhat.com Subject: [committed] Fix low-mem limit regression in multifile mode Message-ID: <20191125143857.GA5228@delia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) X-SW-Source: 2019-q4/txt/msg00072.txt.bz2 Hi, With the commit 639610d "Avoid unnecessary .debug_info section parsing", the following regression was introduced: ... $ cp hello 1; cp 1 2; dwz -l73 --devel-trace -m 3 1 2 Compressing 1 Write-multifile 1 Compressing 2 Write-multifile 2 Optimize-multifile -Read-multifile -Compressing 1 in finalize-multifile mode -Compressing 2 in finalize-multifile mode +Hit low-mem die-limit ... The problem is in read_debug_info, in the condition for calling try_debug_info, which uses !low_mem to avoid triggering clause 'estimated_nr_dies > low_mem_die_limit' in low_mem mode: ... if (kind == DEBUG_INFO && ((multifile_mode == 0 && estimated_nr_dies > max_die_limit) || (!low_mem && estimated_nr_dies > low_mem_die_limit))) { int try_ret = try_debug_info (dso); ... which results in triggering the clause in optimize_multifile mode. Fix this by testing for multifile_mode == 0 instead of for !low_mem mode. Committed to trunk. Thanks, - Tom Fix low-mem limit regression in multifile mode 2019-11-25 Tom de Vries * dwz.c (read_debug_info): Don't call try_debug_info in optimize-multifile mode. * testsuite/dwz.tests/low-mem-die-limit-at-limit-multifile.sh: New test. --- dwz.c | 5 +++-- .../low-mem-die-limit-at-limit-multifile.sh | 23 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/dwz.c b/dwz.c index b80375d..c8e43b7 100644 --- a/dwz.c +++ b/dwz.c @@ -5043,8 +5043,9 @@ read_debug_info (DSO *dso, int kind) unsigned int estimated_nr_dies = estimate_nr_dies (); if (kind == DEBUG_INFO - && ((multifile_mode == 0 && estimated_nr_dies > max_die_limit) - || (!low_mem && estimated_nr_dies > low_mem_die_limit))) + && multifile_mode == 0 + && (estimated_nr_dies > max_die_limit + || estimated_nr_dies > low_mem_die_limit)) { int try_ret = try_debug_info (dso); if (try_ret != 0) diff --git a/testsuite/dwz.tests/low-mem-die-limit-at-limit-multifile.sh b/testsuite/dwz.tests/low-mem-die-limit-at-limit-multifile.sh new file mode 100644 index 0000000..ece4fd5 --- /dev/null +++ b/testsuite/dwz.tests/low-mem-die-limit-at-limit-multifile.sh @@ -0,0 +1,23 @@ +cp $execs/hello 1 +cp 1 2 + +count=$(readelf -wi 1 \ + | grep '(DW_TAG' \ + | wc -l) +limit=$count + +if $execs/dwz-for-test \ + -l$limit \ + --devel-trace \ + -m 3 1 2 \ + 2> dwz.err; status=$?; then + true +fi + +if grep -q "Hit low-mem die-limit" dwz.err; then + exit 1 +fi + +[ $status -eq 0 ] + +rm -f 1 2 3 dwz.err