From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id 70183385BF9E for ; Tue, 23 Mar 2021 08:52:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 70183385BF9E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tdevries@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 7A4B5AD80; Tue, 23 Mar 2021 08:52:23 +0000 (UTC) Date: Tue, 23 Mar 2021 09:52:21 +0100 From: Tom de Vries To: dwz@sourceware.org, jakub@redhat.com, mark@klomp.org Subject: [PATCH] Factor out dwz_with_low_mem Message-ID: <20210323085220.GA3361@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-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: dwz@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Dwz mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Mar 2021 08:52:26 -0000 Hi, Factor out new function dwz_with_low_mem out of dwz_one_file/dwz_files. Any comments? Thanks, - Tom Factor out dwz_with_low_mem 2021-03-23 Tom de Vries * dwz.c (dwz_with_low_mem): New function, factored out of ... (dwz_one_file): ... here, and ... (dwz_files): here. --- dwz.c | 56 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/dwz.c b/dwz.c index a7aa23b..4fc1e7d 100644 --- a/dwz.c +++ b/dwz.c @@ -16256,32 +16256,49 @@ make_temp_file (const char *name) return fd; } -/* Dwarf-compress FILE. If OUTFILE, write to result to OUTFILE, otherwise - modify FILE. */ +/* As dwz, but retry with MULTIFILE_MODE_LOW_MEM if the low_mem_die_limit + is hit. */ static int -dwz_one_file (const char *file, const char *outfile) +dwz_with_low_mem (const char *file, const char *outfile, + struct file_result *res, struct file_result *resa, + char **files, bool *low_mem_p) { - int ret = 0; - struct file_result res; - - if (stats_p) - init_stats (file); + int ret; - res.die_count = 0; + if (low_mem_p) + *low_mem_p = false; ret = (low_mem_die_limit == 0 ? 2 - : dwz (file, outfile, &res, NULL, NULL)); + : dwz (file, outfile, res, resa, files)); if (ret == 2) { multifile_mode = MULTIFILE_MODE_LOW_MEM; - ret = dwz (file, outfile, &res, NULL, NULL); + if (low_mem_p) + *low_mem_p = true; + + ret = dwz (file, outfile, res, resa, files); } return ret; } +/* Dwarf-compress FILE. If OUTFILE, write to result to OUTFILE, otherwise + modify FILE. */ +static int +dwz_one_file (const char *file, const char *outfile) +{ + struct file_result res; + + if (stats_p) + init_stats (file); + + res.die_count = 0; + + return dwz_with_low_mem (file, outfile, &res, NULL, NULL, NULL); +} + /* Dwarf-compress FILES. If HARDLINK, detect if some files are hardlinks and if so, dwarf-compress just one, and relink the others. */ static int @@ -16324,19 +16341,12 @@ dwz_files (int nr_files, char *files[], bool hardlink) file = files[i]; if (stats_p) init_stats (file); - thisret = (low_mem_die_limit == 0 - ? 2 - : dwz (file, NULL, &resa[i], - hardlinks ? resa : NULL, files)); - if (thisret == 2) - { - multifile_mode = MULTIFILE_MODE_LOW_MEM; - thisret = dwz (file, NULL, &resa[i], - hardlinks ? resa : NULL, files); - } - else if (thisret == 1) + bool low_mem_p; + thisret = dwz_with_low_mem (file, NULL, &resa[i], + hardlinks ? resa : NULL, files, &low_mem_p); + if (thisret == 1) ret = 1; - else if (resa[i].res >= 0) + else if (!low_mem_p && resa[i].res >= 0) successcount++; if (hardlink && resa[i].res >= 0