From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gnu.wildebeest.org (wildebeest.demon.nl [212.238.236.112]) by sourceware.org (Postfix) with ESMTPS id 4965E385803D for ; Mon, 5 Jul 2021 16:35:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4965E385803D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=klomp.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=klomp.org Received: from tarox.wildebeest.org (83-87-18-245.cable.dynamic.v4.ziggo.nl [83.87.18.245]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id 50120302FBA6; Mon, 5 Jul 2021 18:35:17 +0200 (CEST) Received: by tarox.wildebeest.org (Postfix, from userid 1000) id CF70F4103393; Mon, 5 Jul 2021 18:35:16 +0200 (CEST) From: Mark Wielaard To: debugedit@sourceware.org Cc: Mark Wielaard Subject: [PATCH] Record and write files in read_dwarf5_line_entries. Date: Mon, 5 Jul 2021 18:35:04 +0200 Message-Id: <20210705163504.27225-1-mark@klomp.org> X-Mailer: git-send-email 2.18.4 X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: debugedit@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: debugedit development mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Jul 2021 16:35:21 -0000 Without giving -d /foo/build/bar debugedit wouldn't actually output any file from the line number table for DWARF5. * tools/debugedit.c (read_dwarf5_line_entries): Don't make collecting_dirs and writing_files depend on dest_dir. Always read idx for strp or line_strp on phase 0. comp_dir_len is zero when comp_dir is NULL. * tests/debugedit.at: Add source list mode tests for DWARF4 and DWARF5. https://bugzilla.redhat.com/show_bug.cgi?id=1966987 Signed-off-by: Mark Wielaard --- tests/debugedit.at | 24 ++++++++++++++++++++++++ tools/debugedit.c | 22 +++++++++++++--------- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/tests/debugedit.at b/tests/debugedit.at index 01b1f2f..608b1d0 100644 --- a/tests/debugedit.at +++ b/tests/debugedit.at @@ -666,3 +666,27 @@ readelf --debug-dump=macro ./foobarbaz.exe \ ]],[0],[expout]) AT_CLEANUP + +# === +# source list mode dwarf-4 +# === +AT_SETUP([debugedit --list-file DWARF4]) +AT_KEYWORDS([debuginfo] [debugedit]) +echo "int main () { }" > main.c +$CC $CFLAGS -gdwarf-4 -o main main.c +AT_CHECK([[debugedit -l sources.list main]]) +AT_CHECK([[grep -q main.c sources.list]]) +cat sources.list +AT_CLEANUP + +# === +# source list mode dwarf-5 +# === +AT_SETUP([debugedit --list-file DWARF5]) +AT_KEYWORDS([debuginfo] [debugedit]) +AT_SKIP_IF([test "$GDWARF_5_FLAG" = "no"]) +echo "int main () { }" > main.c +$CC $CFLAGS -gdwarf-5 -o main main.c +AT_CHECK([[debugedit -l sources.list main]]) +AT_CHECK([[grep -q main.c sources.list]]) +AT_CLEANUP diff --git a/tools/debugedit.c b/tools/debugedit.c index c4e6c4c..668777a 100644 --- a/tools/debugedit.c +++ b/tools/debugedit.c @@ -1831,8 +1831,8 @@ read_dwarf5_line_entries (DSO *dso, unsigned char **ptrp, /* file_names_count */ unsigned entry_count = read_uleb128 (*ptrp); - bool collecting_dirs = dest_dir && phase == 0 && *dirs == NULL; - bool writing_files = dest_dir && phase == 0 && *dirs != NULL; + bool collecting_dirs = phase == 0 && *dirs == NULL; + bool writing_files = phase == 0 && *dirs != NULL; if (collecting_dirs) { *ndir = entry_count; @@ -1862,15 +1862,19 @@ read_dwarf5_line_entries (DSO *dso, unsigned char **ptrp, { case DW_FORM_strp: case DW_FORM_line_strp: - if (dest_dir && phase == 0) + if (phase == 0) { size_t idx = do_read_32_relocated (*ptrp); - if (record_file_string_entry_idx (line_strp, dso, idx)) + if (dest_dir) { - if (line_strp) - need_line_strp_update = true; - else - need_strp_update = true; + if (record_file_string_entry_idx (line_strp, dso, + idx)) + { + if (line_strp) + need_line_strp_update = true; + else + need_strp_update = true; + } } handled_strp = true; if (collecting_dirs || writing_files) @@ -1956,7 +1960,7 @@ read_dwarf5_line_entries (DSO *dso, unsigned char **ptrp, if (writing_files) { char *comp_dir = (*dirs)[0]; - size_t comp_dir_len = strlen(comp_dir); + size_t comp_dir_len = !comp_dir ? 0 : strlen(comp_dir); size_t file_len = strlen (file); size_t dir_len = strlen (dir); -- 2.18.4