This is the mail archive of the
elfutils-devel@sourceware.org
mailing list for the elfutils project.
Re: About hidden & local symbols
- From: Roland McGrath <roland at redhat dot com>
- To: elfutils-devel at lists dot fedorahosted dot org
- Date: Tue, 28 Apr 2009 11:43:07 -0700
- Subject: Re: About hidden & local symbols
Uli is the real expert here, so I may be a little off.
> I came across a library `libexiv2.so'(www.exiv2.org) which has some hidden
> symbols in it. But the `Version symbol' entries for those hidden symbols
> are shown as - 1 *global* - by `eu-readelf -sV'. Now if symbol is hidden
>
> - shouldn't the highest(15'th) bit of the corresponding `Version symbol'
> entry be set? And if so, then it could not possibly equate to 1,
> right?
I don't know that ST_VISIBILITY bits relate to version sets in this way.
> - a binary(say tcpdump) is linked to a library(libpcap) which does not
> use Symbol Versioning and does not have `Version definition' section
> in it. In such a case,
>
> $ `eu-readelf -sV tcpdump'
>
> shows an output wherein, `Version symbol' entries for symbols
> defined in libpacp are shown as: 0 *local* . Which means the symbol
> is defined in the same object and is not accessible outside of the
> same, right?
No. These are undefined symbols in tcpdump. The 0 indicates lack of a
version binding for the symbol.
> - `Version symbol' entries are greater than 1 if and only if the
> concerned library(or DSO) uses symbol versioning.
I think this is correct.
> - And if so, there is no way of knowing if a *local* symbol is defined in
> the same object/binary or is resolved from a library while running?
SHN_UNDEF symbols always have to be resolved.