From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 8C5793858D20 for ; Sat, 10 Feb 2024 02:52:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8C5793858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8C5793858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707533544; cv=none; b=YFmGxQFw7GcSzWDJj5bjHxTISg9JnbmisD3+FMcKJoaHOuVJoSP35pcyDnPi/Z/5jWRizKMtMT36rjvI8u/D23+W92nwUdwDiaQO+KiB72I/oj1S8zUUX48stgCXmrzufPEnMjdYsOW0buyoD3PKOMPUlKKcGYM0SsmmacIwWAg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707533544; c=relaxed/simple; bh=Ys36OS0iRrsXQdaa+Q10PQUm9VmAgXEADSB8CZfNAOw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=MfkOPMMEAOfCyYRQ1ZY/6f2TKRlbZOhbVTY7tvWHiH/ytpyEfo6OZ5mH1J50XCefs8BBi629Nx7MLBHOl/tL3Q8V9b1IP4maYJvNGRFlwJ6XCi6MdtVKS6XOy2PXSDRGpFEwyVC3HwCgaOgOQTzja0Cr7j8s1Eh4/CXM4POMBnI= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1707533541; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=0n4gw7VJ33VN/SdCUFfMUi/P1elWLVVmmf2mE26Ya1c=; b=GGI+sSjnrHbEYpBmQkrrFlGLVhxVyV5hKpHgEofoEgIu6jd2tY1vWGFYVIEjTsl/2EoweX pD9mcm+HyqiZ3TTXRBrehGAclDvrPBas9IhUqmHs+F0c0i4cciZQ6R396wx8IUTrP4+b/Z tKPzSkKtoxQ06/JziMoE3KdVwCOIVbQ= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-253-3NI6hzSdPYKjdjesYGDN3w-1; Fri, 09 Feb 2024 21:52:19 -0500 X-MC-Unique: 3NI6hzSdPYKjdjesYGDN3w-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id CA331185A782 for ; Sat, 10 Feb 2024 02:52:18 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.22.16.28]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7A7A1C08EF7; Sat, 10 Feb 2024 02:52:18 +0000 (UTC) From: Aaron Merey To: elfutils-devel@sourceware.org Cc: Aaron Merey Subject: [PATCH] Handle DW_AT_decl_file 0 Date: Fri, 9 Feb 2024 21:52:16 -0500 Message-ID: <20240210025216.272034-1-amerey@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_NUMSUBJECT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Modify dwarf_decl_file to support DW_AT_decl_file with value 0. Because of inconsistencies in the DWARF 5 spec, it is ambiguous whether DW_AT_decl_file value 0 is a valid .debug_line file table index for the main source file or if it means that there is no source file specified. dwarf_decl_file interprets DW_AT_decl_file 0 as meaning no source file is specified. This works with DWARF 5 produced by gcc, which duplicates the main source file name at index 0 and 1 of the file table and avoids using DW_AT_decl_file 0. However clang uses DW_AT_decl_file 0 for the main source index with no duplication at another index. In this case dwarf_decl_file will be unable to find the file name of the main file. This patch changes dwarf_decl_file to treat DW_AT_decl_file 0 as a normal index into the file table, allowing it to work with DWARF 5 debuginfo produced by clang. As for earlier DWARF versions which exclusively use DW_AT_decl_file 0 to indicate that no source file is specified, dwarf_decl_file will now return the name "???" if called on a DIE with DW_AT_decl_file 0. https://sourceware.org/bugzilla/show_bug.cgi?id=31111 Signed-off-by: Aaron Merey --- libdw/dwarf_decl_file.c | 25 ++++++++++--------------- tests/Makefile.am | 3 ++- tests/run-allfcts.sh | 17 +++++++++++++++++ tests/testfile-dwarf5-line-clang.bz2 | Bin 0 -> 2764 bytes 4 files changed, 29 insertions(+), 16 deletions(-) create mode 100755 tests/testfile-dwarf5-line-clang.bz2 diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c index 75662a33..07b69f8d 100644 --- a/libdw/dwarf_decl_file.c +++ b/libdw/dwarf_decl_file.c @@ -31,7 +31,6 @@ # include #endif -#include #include #include "libdwP.h" @@ -48,13 +47,6 @@ dwarf_decl_file (Dwarf_Die *die) &idx) != 0) return NULL; - /* Zero means no source file information available. */ - if (idx == 0) - { - __libdw_seterrno (DWARF_E_NO_ENTRY); - return NULL; - } - /* Get the array of source files for the CU. */ struct Dwarf_CU *cu = attr_mem.cu; if (cu->lines == NULL) @@ -63,20 +55,23 @@ dwarf_decl_file (Dwarf_Die *die) size_t nlines; /* Let the more generic function do the work. It'll create more - data but that will be needed in an real program anyway. */ + data but that will be needed in a real program anyway. */ (void) INTUSE(dwarf_getsrclines) (&CUDIE (cu), &lines, &nlines); - assert (cu->lines != NULL); } - if (cu->lines == (void *) -1l) + if (cu->lines == NULL || cu->lines == (void *) -1l) { - /* If the file index is not zero, there must be file information - available. */ - __libdw_seterrno (DWARF_E_INVALID_DWARF); + /* Line table could not be found. */ return NULL; } - assert (cu->files != NULL && cu->files != (void *) -1l); + if (cu->files == NULL || cu->files == (void *) -1l) + { + /* If the line table was found then then the file table should + have also been found. */ + __libdw_seterrno (DWARF_E_UNKNOWN_ERROR); + return NULL; + } if (idx >= cu->files->nfiles) { diff --git a/tests/Makefile.am b/tests/Makefile.am index 13bd9d56..b075e3c3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -634,7 +634,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile-largealign.o.bz2 run-strip-largealign.sh \ run-funcretval++11.sh \ test-ar-duplicates.a.bz2 \ - run-dwfl-core-noncontig.sh testcore-noncontig.bz2 + run-dwfl-core-noncontig.sh testcore-noncontig.bz2 \ + testfile-dwarf5-line-clang.bz2 if USE_VALGRIND diff --git a/tests/run-allfcts.sh b/tests/run-allfcts.sh index 9c0a55d8..1d4766fe 100755 --- a/tests/run-allfcts.sh +++ b/tests/run-allfcts.sh @@ -170,4 +170,21 @@ testrun_compare ${abs_builddir}/allfcts testfile-lto-gcc9 <<\EOF /home/mark/src/tests/testfile-lto-main.c:6:main EOF +# = dwarf5-line.c = +# int +# main (int argc, char ** argv) +# { +# return 0; +# } + +# Using clang version 17.0.4 (Fedora 17.0.4-1.fc39) +# clang -gdwarf-5 -O0 -o testfile-dwarf5-line-clang dwarf5-line.c + +testfiles testfile-dwarf5-line-clang + +# Check that dwarf_decl_file can handle .debug_line file table index 0 +testrun_compare ${abs_builddir}/allfcts testfile-dwarf5-line-clang <<\EOF +/home/amerey/test/dwarf5-line.c:2:main +EOF + exit 0 diff --git a/tests/testfile-dwarf5-line-clang.bz2 b/tests/testfile-dwarf5-line-clang.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..ab62b707bd7371268d6e685a2f86a1a3a868b0a9 GIT binary patch literal 2764 zcmV;-3N!UWT4*^jL0KkKS?3bM4FC%f|NsC0|Nrmr|NH;%|NsBz|NsC0Y46D+q(klP z_GEV7|6kwvWB?5S00E!|h!aMdntDLhJSItiq3U^0)f#B@ntFzs z000kAWYa*NhhJXR4jD~;!41flWFeaKAGyq761dR-6)G8o+yQEuT0j3ws|*~V~G%!nj`>pELHrd!u%YwKaMQF=^V6yoOE5?X2@ zAafd&nVd`~H9AZ>f5^t-XG&i(S&zxmz5;Sp>!ekGkT%;963hq(I|)o+t(C9o`~IK4 zjcsIcEeH^UDcGyTczze(XY`-oLcELm;RU`y3t#x;G2jb8TmIZzQa(i+B5Sq5*a+LSHA-2^nM$ zklU1GZ~yDnRNg)5tAUm}RI+-C<>;Rh?Bs4utkmoJ>+9V1-)A_^O_(g=UgpGuW#2-^ zA&E4^hQuJXp#|oI9V-$FG$WT{LRc&f{eeb>d7&XfA3sPXZqT6&O}Cq7#i4Fv3Lt2} zXh#(gkStaUT+#}dxkgcl%4i@#Q%NIwV3aTdj6!)`wo=KogpAV!m2D#)@S+f?z%4N8 zRT4-xI2*{+qn>7Yi7WheW^@e{U^bZBu;j5!l~7cwm=-c=fRlT?lg z)$sJGV-&iTaUE?ERWvNBUMWG=NkvHqq1qA#QJEPd5#?BHExuAT&^{Iv@6?jq(}ed3 z%GnlcZ8fG8vjbn1YYVu*LTui9a35(mQg|tvc0&%2BMDGq-YHHLD^O-};5@@AwnVt7boS`{=Qp*xU7-3oTBS+yOWg@vrd8$Gw2{A7<~vMGcqD7YJ?GV+vF;;P>vmo zl0eWZGL0=;K`-km2+xf~K(4mYFO*^7ycUB@H+MN9gvnwTti%@vjSp?`JijX%s6JS* zMmFRxDT_AJ18iWG!NW+!yM0o-IuoNs3@j$)K?9Dt$=7cRg|t?VD%}a+3DiZRbH)_( z8Z_^S#DQ6TgM{$#<;8be$h&*EhEt7&)^gZ0wdLl0+i@8rt5t>%k18HdPYgOcD-DOt zC{f0;UVut9 zka)T%TLF^9Y}!_^wW!!{(qgrCzNN{fWO$xr*S%Fg(5SS$5U7w~nRl+XoO`6Kw5}nL znTDi~Uda%cq$XmAC)cCd+b7;*PY4DaR2EP`V1|3R$PSo2rp(dE4Dw2~%R=^|>^UmVXNneE4$Ig`W9c_JQMoG|*j_@mbk_TPd;(&2E*zB>V>1num zHm*iml0!knXJ|+YHK+~>d4Qu8LtaD>6IGDO$9LkC$-;3Tp4f$Fi5w*XVKg;u4rHiRKOz!CfF?*^4J}sXL%8 zI2Y_G>zxOvFN)mp1aTt@I260O&PoXX@ESBot>AqX;iy|iB(;db(TKyC>S_gGfM`@{ zV$W^3j}7)gxS@xPjPkEk1jzAL#X;l8RVM`rs`Pqo8{XFne;62fJU&{WqAF^+X~#{F z!J1;4gndYWf0YWX zqepVh-`8$r-oK#~z_)ZZ)mcZX&uce$Bmy8qmt)w!+3+WifQEsT4228#8~&|K3P`9; S{udf|{x0N-aG@d2C4?HBH1tyd literal 0 HcmV?d00001 -- 2.43.0