summaryrefslogtreecommitdiffstats
path: root/cddl
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2013-03-07 22:16:35 +0000
committerdim <dim@FreeBSD.org>2013-03-07 22:16:35 +0000
commitbe01e90b71154aeb04cffb72e7605eeaa2be1a3f (patch)
tree40f12a0b95c7e64cdbd345f098255d9f6f92cb21 /cddl
parent717830bec1bf2168b350f31ecb736a1d0bf840e3 (diff)
downloadFreeBSD-src-be01e90b71154aeb04cffb72e7605eeaa2be1a3f.zip
FreeBSD-src-be01e90b71154aeb04cffb72e7605eeaa2be1a3f.tar.gz
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
Diffstat (limited to 'cddl')
-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 bfe5b7e..a78789d 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:
OpenPOWER on IntegriCloud