Prepending underscores to symbol names in dlsym() (commit 20613)
lethal at linux-sh.org
Tue Jan 8 10:14:52 UTC 2008
On Tue, Jan 08, 2008 at 09:54:22AM +0000, Will Newton wrote:
> On Jan 7, 2008 4:30 PM, Carmelo AMOROSO <carmelo.amoroso at st.com> wrote:
> > Will Newton wrote:
> > > Hi Bernd,
> > >
> > > (I hope I got the right email address here)
> > >
> > > I noticed commit 20613 prepends an underscore to the symbol name
> > > passed to dlsym() if __UCLIBC_NO_UNDERSCORE__ is not defined. I was
> > > wondering if you could explain the rationale behind this change?
> > It seems to me the it's just the opposite....
> Hmm, no, I think what I said is correct. If no underscores is NOT
> defined then we prepend the underscore.
You both appear to be in agreement on the result. The patch does
precisely what is described:
> > +++ trunk/uClibc/ldso/include/dl-defs.h 2007-12-03 22:46:53 UTC (rev 20613)
> > @@ -175,4 +175,10 @@
> > # define DL_MALLOC_ALIGN (__WORDSIZE / 8)
> > #endif
> > +#ifdef __UCLIBC_NO_UNDERSCORES__
> > +#define __C_SYMBOL_PREFIX__ ""
> > +#else
> > +#define __C_SYMBOL_PREFIX__ "_"
> > +#endif
> > +
> > #endif /* _LD_DEFS_H */
Additionally, this sort of backwards logic is precisely why having
inverted ifdef logic is absolute brain-damage.
#ifndef __UCLIBC_UNDERSCORES__ is infinitely more readable, even though
an #ifdef __UCLIBC_HELP_MY_TOOLCHAIN_SUCKS__ would be more intuitive at
first glance (and more fitting, for those insisting on using -elf
toolchains). It's like SYMBOL_PREFIX() hell all over again..
More information about the uClibc