On Sat, Mar 02, 2013 at 09:23:15PM +0100, Dimitry Andric wrote: > On 2013-03-02 18:52, Andriy Gapon wrote: > > on 02/03/2013 19:35 Andriy Gapon said the following: > >> Now, I am not quite sure why ctfconvert skips bpobj_iterate_impl in the > >> clang-generated code. Seems like some sort of a bug in ctfconvert. > > > > It seems that gcc and clang put different names for symbol of type FILE: > > clang: > > readelf -a -W /usr/obj/usr/src/sys/TRANT/bpobj.o| fgrep -w FILE > > 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS > > /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c > > > > gcc: > > readelf -a -W /usr/obj/usr/src/sys/ODYSSEY/bpobj.o| fgrep -w FILE > > 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS bpobj.c > > > > ctfconvert seems to compare this value with "bpobj.c" and so in the clang > > case > > it doesn't recognize the static symbols. > > > > Does my analysis seem reasonable? > > Have you verified that ctfconvert does the right thing, if you modify > the FILE symbol to have just the filename? > > Indeed, clang puts the original filename from the command line in the > .file directive, while gcc explicitly removes any directory names; see > contrib/gcc/toplev.c, around line 680: > > void > output_file_directive (FILE *asm_file, const char *input_name) > { > int len; > const char *na; > > if (input_name == NULL) > input_name = "<stdin>"; > > len = strlen (input_name); > na = input_name + len; > > /* NA gets INPUT_NAME sans directory names. */ > while (na > input_name) > { > if (IS_DIR_SEPARATOR (na[-1])) > break; > na--; > } > ... > > That "NA gets INPUT_NAME sans directory names" comment was inserted by > rms in r279. :-) So I guess this is the way gcc has done it from the > start, but there is no explanation as to why rms chose to remove those > directory names. I do not see the problem, except maybe for having > reproducible builds?
I seems that at least gdb also depends on the stripping the path for stabs (which is not dwarf) debugging format interpretation. On the FreeBSD system, do 'info', select 'stabs' -> Stab Sections -> Elf Linker Relocation. The last paragraph documents the gdb requirements. So it seems that stripped path in the STT_FILE is the common expectation.
pgpIIMEAO2ALX.pgp
Description: PGP signature