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 C049138708BE for ; Fri, 2 Oct 2020 17:05:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org C049138708BE 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 A9CB8AE1B; Fri, 2 Oct 2020 17:05:24 +0000 (UTC) Date: Fri, 2 Oct 2020 19:05:22 +0200 From: Tom de Vries To: dwz@sourceware.org, jakub@redhat.com Cc: Mark Wielaard Subject: [committed] Fix error: Unknown DWARF DW_FORM_ref_sig8 Message-ID: <20201002170521.GA31168@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=-10.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_NUMSUBJECT, 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: Fri, 02 Oct 2020 17:05:26 -0000 Hi, When running the gdb testsuite using target board cc-with-dwz, I ran into: ... dwz: cpexprs-debug-types: Unknown DWARF DW_FORM_ref_sig8 dwz: cpexprs-debug-types: Couldn't read abbrev at offset 0x64 ... I traced this back to some code in read_abbrev, which until recent was: ... if (form == 2 || (form > DW_FORM_flag_present && form != DW_FORM_ref_sig8)) { error (0, 0, "%s: Unknown DWARF %s", dso->filename, get_DW_FORM_str (form)); ... but now has been extended to: ... if (form == 2 || (form > DW_FORM_flag_present && (form != DW_FORM_ref_sig8 || form != DW_FORM_data16 || form != DW_FORM_line_strp))) ... Before, form == DW_FORM_ref_sig8 didn't trigger an error because form != DW_FORM_ref_sig8 evaluated to false. Now, form == DW_FORM_ref_sig8 does trigger an error because form != DW_FORM_data16 evaluates to true. Fix by using this instead: ... && !(form == DW_FORM_ref_sig8 || form == DW_FORM_data16 || form == DW_FORM_line_strp))) ... Tested dwz testsuite, and cpexprs-debug-types. Committed to trunk. Thanks, - Tom Fix error: Unknown DWARF DW_FORM_ref_sig8 2020-10-02 Tom de Vries * dwz.c (read_abbrev): Fix "Unknown DWARF DW_FORM_ref_sig8" error. --- dwz.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dwz.c b/dwz.c index eb52079..487fbc6 100644 --- a/dwz.c +++ b/dwz.c @@ -1261,9 +1261,9 @@ read_abbrev (DSO *dso, unsigned char *ptr) form = read_uleb128 (p); if (form == 2 || (form > DW_FORM_flag_present - && (form != DW_FORM_ref_sig8 - || form != DW_FORM_data16 - || form != DW_FORM_line_strp))) + && !(form == DW_FORM_ref_sig8 + || form == DW_FORM_data16 + || form == DW_FORM_line_strp))) { error (0, 0, "%s: Unknown DWARF %s", dso->filename, get_DW_FORM_str (form));