Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Feb 2014 17:16:35 -0700
From:      "Justin T. Gibbs" <gibbs@FreeBSD.org>
To:        freebsd-toolchain@freebsd.org
Subject:   ctfconvert broken for C++ objects?
Message-ID:  <216B816A-8ADA-438F-B834-8C386C5BC460@FreeBSD.org>

next in thread | raw e-mail | index | archive | help

--Apple-Mail=_E8F4FF85-F9F7-4544-A5F4-0A5E3B2ACCD2
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=windows-1252

I noticed that ctfmerge was warning about missing CTF data when =
compiling =93PROG_CXX=94 programs.  I tracked this down to missing =
ctfconvert calls when compiling C++ objects.  Unfortunately, ctfconvert =
segfaults in libdwarf on all of the C++ code I tried.  Attached is a =
quick hack to avoid the segfault, but I=92m hoping someone here with =
more dwarf experience can point me in the right direction for a real =
fix.  Is this a known issue?

I=92m testing this on a FreeBSD stable/9 from ~November of last year.

Thanks,
Justin


--Apple-Mail=_E8F4FF85-F9F7-4544-A5F4-0A5E3B2ACCD2
Content-Disposition: attachment;
	filename=ctf_for_c++.diffs
Content-Type: application/octet-stream;
	name="ctf_for_c++.diffs"
Content-Transfer-Encoding: 7bit

Change 1041767 by justing@justing_ns1_spectrabsd on 2014/02/17 10:41:25

	Add CTF (required for DTrace) support for C++ programs.
	
	share/mk/bsd.lib.mk:
	share/mk/sys.mk:
		Add missing CTF convert calls to C++ -> object file
		transformation rules.

Affected files ...

... //SpectraBSD/stable/share/mk/bsd.lib.mk#11 edit
... //SpectraBSD/stable/share/mk/sys.mk#8 edit

Differences ...

==== //SpectraBSD/stable/share/mk/bsd.lib.mk#11 (text) ====

@@ -89,18 +89,27 @@
 
 .cc.o .C.o .cpp.o .cxx.o:
 	${CXX} ${STATIC_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+	${CTFCONVERT_CMD}
 
-.cc.po .C.covo .cpp.covo .cxx.covo:
+.cc.covo .C.covo .cpp.covo .cxx.covo:
 	${CXX} ${COVO_FLAG} ${STATIC_CXXFLAGS} ${COVO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || \
+		(${ECHO} ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} && \
+		${CTFCONVERT} ${CTFFLAGS} ${.TARGET})
 
 .cc.po .C.po .cpp.po .cxx.po:
 	${CXX} ${PO_FLAG} ${STATIC_CXXFLAGS} ${PO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+	${CTFCONVERT_CMD}
 
 .cc.So .C.So .cpp.So .cxx.So:
 	${CXX} ${PICFLAG} -DPIC ${SHARED_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+	${CTFCONVERT_CMD}
 
 .cc.covSo .C.covSo .cpp.covSo .cxx.covSo:
 	${CXX} ${PICFLAG} ${COVO_FLAG} -DPIC ${SHARED_CXXFLAGS} ${CXXFLAGS} ${COVO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || \
+		(${ECHO} ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} && \
+		${CTFCONVERT} ${CTFFLAGS} ${.TARGET})
 
 .f.covo:
 	${FC} ${COVO_FLAG} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}

==== //SpectraBSD/stable/share/mk/sys.mk#8 (text) ====

@@ -233,9 +233,11 @@
 
 .cc .cpp .cxx .C:
 	${CXX} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
+	${CTFCONVERT_CMD}
 
 .cc.o .cpp.o .cxx.o .C.o:
 	${CXX} ${CXXFLAGS} -c ${.IMPSRC}
+	${CTFCONVERT_CMD}
 
 .m.o:
 	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC}
Change 1041820 by justing@justing_ns1_spectrabsd on 2014/02/17 11:42:29

	Prevent ctfconvert segfault while processing certain C++
	libraries.
	
	lib/libdwarf/dwarf_attrval.c:
		Don't segfault when an attribute lookup for an
		anonymous type fails.  It looks like this failure
		may have been introduced in revision 662563 (SVN
		rev 248641) in FreeBSD.
	
		This change prevents the segfault, but doesn't
		address root cause.  Upstream has moved to a new
		version of libdwarf/libelf, and we will update to
		that version first to see if the problem is still
		present, before debugging this further.

Affected files ...

... //SpectraBSD/stable/lib/libdwarf/dwarf_attrval.c#3 edit

Differences ...

==== //SpectraBSD/stable/lib/libdwarf/dwarf_attrval.c#3 (text) ====

@@ -243,6 +243,9 @@
 			DWARF_SET_ERROR(err, DWARF_E_BAD_FORM);
 			ret = DWARF_E_BAD_FORM;
 		}
+	} else {
+		DWARF_SET_ERROR(err, DWARF_E_BAD_FORM);
+		ret = DWARF_E_BAD_FORM;
 	}
 
 	if (ret == DWARF_E_NONE) {

--Apple-Mail=_E8F4FF85-F9F7-4544-A5F4-0A5E3B2ACCD2--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?216B816A-8ADA-438F-B834-8C386C5BC460>