Prepending underscores to symbol names in dlsym() (commit 20613)

Daniel Jacobowitz drow at
Tue Jan 8 16:29:58 UTC 2008

On Tue, Jan 08, 2008 at 04:17:02PM +0000, Will Newton wrote:
> On Jan 8, 2008 4:06 PM, Daniel Jacobowitz <drow at> wrote:
> > On Tue, Jan 08, 2008 at 03:58:00PM +0000, Will Newton wrote:
> > > Agreed, my question is whether or not adding the underscore is the
> > > correct thing to do even if your architecture prepends an underscore
> > > to symbol names? Is there a particular reason why this was done for
> > > Blackfin, to make a particular app work? I am trying to find out what
> > > the correct behaviour of dlsym is, for example does it behave like
> > > this on other Unixes that have leading underscores on symbols.
> >
> > There are pretty much no Unixes that do this; a few embedded Linux
> > ports are the only exceptions I've ever encountered.
> I think I got the impression from the Levine "Linkers and Loaders"
> book (my copy of which seems to have vanished) that prepending an
> underscore to symbol names was common practice. Perhaps it was an
> a.out thing, that's rather before my time though...

Not on modern Unixes, anyway.  Some *-elf targets do, and more *-coff
and *-aout targets.

As I understand it, the only reasons are habit and to accomodate an
assembler syntax which makes symbol names ambiguous with something
else (e.g. register names).  If it's a habit, expect everyone to have
the habit; if it's to accomodate the assembler, expect everyone to
accomodate the assembler.  So there shouldn't be any symbols without
the underscore.

Daniel Jacobowitz

More information about the uClibc mailing list