aboutsummaryrefslogtreecommitdiff
path: root/cddl/contrib/opensolaris/tools/ctf/cvt
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2013-03-07 22:16:35 +0000
committerDimitry Andric <dim@FreeBSD.org>2013-03-07 22:16:35 +0000
commit8b0d8e9f2f859cf4b357ee9c5de6d2b4296cca24 (patch)
tree40f12a0b95c7e64cdbd345f098255d9f6f92cb21 /cddl/contrib/opensolaris/tools/ctf/cvt
parentd023c5ae25df1b5d0ec59186c2de5c3e5fb69e58 (diff)
downloadsrc-8b0d8e9f2f859cf4b357ee9c5de6d2b4296cca24.tar.gz
src-8b0d8e9f2f859cf4b357ee9c5de6d2b4296cca24.zip
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
Notes
Notes: svn path=/head/; revision=247960
Diffstat (limited to 'cddl/contrib/opensolaris/tools/ctf/cvt')
-rw-r--r--cddl/contrib/opensolaris/tools/ctf/cvt/output.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/cddl/contrib/opensolaris/tools/ctf/cvt/output.c b/cddl/contrib/opensolaris/tools/ctf/cvt/output.c
index bfe5b7e6ceb8..a78789d6f92e 100644
--- a/cddl/contrib/opensolaris/tools/ctf/cvt/output.c
+++ b/cddl/contrib/opensolaris/tools/ctf/cvt/output.c
@@ -363,6 +363,7 @@ sort_iidescs(Elf *elf, const char *file, tdata_t *td, int fuzzymatch,
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, tdata_t *td, int fuzzymatch,
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: