Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Mar 2013 21:18:19 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r248284 - stable/9/cddl/contrib/opensolaris/tools/ctf/cvt
Message-ID:  <201303142118.r2ELIJco023043@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Thu Mar 14 21:18:19 2013
New Revision: 248284
URL: http://svnweb.freebsd.org/changeset/base/248284

Log:
  MFC r247960:
  
    Make ctfconvert work correctly on clang-compiled object files.  Clang
    puts the full original source filename in the STT_FILE entry of the ELF
    symbol table, while gcc saves only the basename.
  
    Since the DWARF DW_AT_name attribute contains the full source filename,
    both for clang and gcc, ctfconvert takes just the basename of it, for
    matching with the STT_FILE entry.  So when attempting to match with such
    an entry, use its basename, if necessary.
  
    Reported by:	avg
  
  MFC r247962:
  
    Fix error in r247960: actually assign the basename to match.iim_file.
  
    Pointed out by:	avg
    Pointy hat to:	dim

Modified:
  stable/9/cddl/contrib/opensolaris/tools/ctf/cvt/output.c
Directory Properties:
  stable/9/cddl/   (props changed)
  stable/9/cddl/contrib/opensolaris/   (props changed)

Modified: stable/9/cddl/contrib/opensolaris/tools/ctf/cvt/output.c
==============================================================================
--- stable/9/cddl/contrib/opensolaris/tools/ctf/cvt/output.c	Thu Mar 14 20:31:39 2013	(r248283)
+++ stable/9/cddl/contrib/opensolaris/tools/ctf/cvt/output.c	Thu Mar 14 21:18:19 2013	(r248284)
@@ -363,6 +363,7 @@ sort_iidescs(Elf *elf, const char *file,
 
 	for (i = 0; i < nent; i++) {
 		GElf_Sym sym;
+		char *bname;
 		iidesc_t **tolist;
 		GElf_Sym ssym;
 		iidesc_match_t smatch;
@@ -377,7 +378,8 @@ sort_iidescs(Elf *elf, const char *file,
 
 		switch (GELF_ST_TYPE(sym.st_info)) {
 		case STT_FILE:
-			match.iim_file = match.iim_name;
+			bname = strrchr(match.iim_name, '/');
+			match.iim_file = bname == NULL ? match.iim_name : bname + 1;
 			continue;
 		case STT_OBJECT:
 			tolist = iiburst->iib_objts;



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