Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Jun 2018 14:02:37 -0400
From:      Mark Johnston <markj@freebsd.org>
To:        Bryan Drewery <bdrewery@freebsd.org>
Cc:        "O. Hartmann" <ohartmann@walstatt.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r334883 - head/cddl/contrib/opensolaris/tools/ctf/cvt
Message-ID:  <20180609180237.GD1394@pesky>
In-Reply-To: <80b8176b-61c5-c3b2-49b1-36ba9be77d1b@FreeBSD.org>
References:  <201806091510.w59FAnIW036815@repo.freebsd.org> <20180609193527.46a0f9a6@thor.intern.walstatt.dynvpn.de> <20180609173951.GB1394@pesky> <80b8176b-61c5-c3b2-49b1-36ba9be77d1b@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Jun 09, 2018 at 01:56:18PM -0400, Bryan Drewery wrote:
> On 6/9/18 1:39 PM, Mark Johnston wrote:
> > On Sat, Jun 09, 2018 at 07:35:00PM +0200, O. Hartmann wrote:
> >> -----BEGIN PGP SIGNED MESSAGE-----
> >> Hash: SHA512
> >>
> >> Am Sat, 9 Jun 2018 15:10:49 +0000 (UTC)
> >> Mark Johnston <markj@FreeBSD.org> schrieb:
> >>
> >>> Author: markj
> >>> Date: Sat Jun  9 15:10:49 2018
> >>> New Revision: 334883
> >>> URL: https://svnweb.freebsd.org/changeset/base/334883
> >>>
> >>> Log:
> >>>   Don't process DWARF generated from non-C/C++ code.
> >>>   
> >>>   ctfconvert(1) is not designed to handle DWARF generated from such code,
> >>>   and will generally fail in non-obvious ways.  Use an explicit check to
> >>>   help catch such potential failures.
> >>>   
> >>>   Reported by:	Johannes Lundberg <johalun0@gmail.com>
> >>>   MFC after:	2 weeks
> >>>
> >>> Modified:
> >>>   head/cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c
> >>>
> >>> Modified: head/cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c
> >>> ==============================================================================
> >>> --- head/cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c	Sat Jun  9 15:10:39
> >>> 2018	(r334882) +++ head/cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c
> >>> Sat Jun  9 15:10:49 2018	(r334883) @@ -1901,7 +1901,7 @@ should_have_dwarf(Elf
> >>> *elf) int
> >>>  dw_read(tdata_t *td, Elf *elf, char *filename __unused)
> >>>  {
> >>> -	Dwarf_Unsigned abboff, hdrlen, nxthdr;
> >>> +	Dwarf_Unsigned abboff, hdrlen, lang, nxthdr;
> >>>  	Dwarf_Half vers, addrsz, offsz;
> >>>  	Dwarf_Die cu = 0;
> >>>  	Dwarf_Die child = 0;
> >>> @@ -1941,8 +1941,8 @@ dw_read(tdata_t *td, Elf *elf, char *filename __unused
> >>>  	}
> >>>  
> >>>  	if ((rc = dwarf_next_cu_header_b(dw.dw_dw, &hdrlen, &vers, &abboff,
> >>> -		&addrsz, &offsz, NULL, &nxthdr, &dw.dw_err)) != DW_DLV_OK) {
> >>> -		if (dw.dw_err.err_error == 	DW_DLE_NO_ENTRY)
> >>> +	    &addrsz, &offsz, NULL, &nxthdr, &dw.dw_err)) != DW_DLV_OK) {
> >>> +		if (dw.dw_err.err_error == DW_DLE_NO_ENTRY)
> >>>  			exit(0);
> >>>  		else
> >>>  			terminate("rc = %d %s\n", rc, dwarf_errmsg(dw.dw_err));
> >>> @@ -1971,6 +1971,25 @@ dw_read(tdata_t *td, Elf *elf, char *filename __unused
> >>>  		debug(1, "DWARF emitter: %s\n", prod);
> >>>  		free(prod);
> >>>  	}
> >>> +
> >>> +	if (dwarf_attrval_unsigned(cu, DW_AT_language, &lang, &dw.dw_err) == 0)
> >>> +		switch (lang) {
> >>> +		case DW_LANG_C:
> >>> +		case DW_LANG_C89:
> >>> +		case DW_LANG_C99:
> >>> +		case DW_LANG_C11:
> >>> +		case DW_LANG_C_plus_plus:
> >>> +		case DW_LANG_C_plus_plus_03:
> >>> +		case DW_LANG_C_plus_plus_11:
> >>> +		case DW_LANG_C_plus_plus_14:
> >>> +			break;
> >>> +		default:
> >>> +			terminate("file contains DWARF for unsupported "
> >>> +			    "language %d", lang);
> >>> +		}
> >>> +	else
> >>> +		warning("die %llu: failed to get language attribute: %s\n",
> >>> +		    die_off(&dw, cu), dwarf_errmsg(dw.dw_err));
> >>>  
> >>>  	if ((dw.dw_cuname = die_name(&dw, cu)) != NULL) {
> >>>  		char *base = xstrdup(basename(dw.dw_cuname));
> >>> _______________________________________________
> >>> svn-src-head@freebsd.org mailing list
> >>> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> >>> To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org"
> >> This commit makes buildworld (WITH_META_MODE) failing:
> > 
> > I added these identifiers in r334881, and the CI build is passing. Might
> > this be a problem with META_MODE?
> > 
> >> [...]
> >> ===> cddl/usr.bin/ctfconvert (obj,all,install)
> >> Building /usr/obj/usr/src/amd64.amd64/tmp/obj-tools/cddl/usr.bin/ctfconvert/dwarf.o
> 
> obj-tools means it is trying to build a HOST NATIVE version of this.
> Where are these defined? In this case they need to be defined in
> /usr/include already unless the build has -I.CURDIR/somewhere/to/headers
> instead.

The definitions are in contrib/elftoolchain/libdwarf/dwarf.h. Indeed,
the ctfconvert makefile doesn't explicitly add libdwarf to the include
path. I'm surprised that this is necessary though - do I need to modify
the BOOTSTRAPPING check for _elftoolchain_libs in Makefile.inc1?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20180609180237.GD1394>