Author: dim
Date: Thu Mar  7 22:16:35 2013
New Revision: 247960
URL: http://svnweb.freebsd.org/changeset/base/247960

Log:
  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 after:    1 week

Modified:
  head/cddl/contrib/opensolaris/tools/ctf/cvt/output.c

Modified: head/cddl/contrib/opensolaris/tools/ctf/cvt/output.c
==============================================================================
--- head/cddl/contrib/opensolaris/tools/ctf/cvt/output.c        Thu Mar  7 
22:05:27 2013        (r247959)
+++ head/cddl/contrib/opensolaris/tools/ctf/cvt/output.c        Thu Mar  7 
22:16:35 2013        (r247960)
@@ -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,6 +378,8 @@ sort_iidescs(Elf *elf, const char *file,
 
                switch (GELF_ST_TYPE(sym.st_info)) {
                case STT_FILE:
+                       bname = strrchr(match.iim_name, '/');
+                       bname = bname == NULL ? match.iim_name : bname + 1;
                        match.iim_file = match.iim_name;
                        continue;
                case STT_OBJECT:
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to