tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: dlopen fails from static binary
On Mon, Apr 18, 2016 at 09:29:23AM +0200, Martin Husemann wrote:
> > Is dlopen really supposed ot fail when called from
> > static binary? In that case errno should be set, but to what value?
> > Or perhaps we could support dlopen from static binary?
>
> We should fail to link in this case. Where does the dlopen stub come
> from?
It seems to be from libc:
$ nm /usr/lib/libc.a|grep dlopen
00000000 T ___dlopen
00000000 W __dlopen
00000000 W dlopen
U __dlopen
src/lib/libc/dlfcn/dlfcn_elf.c says:
/*
* For ELF, the dynamic linker directly resolves references to its
* services to functions inside the dynamic linker itself. These
* weak-symbol stubs are necessary so that "ld" won't complain about
* undefined symbols. The stubs are executed only when the program is
* linked statically, or when a given service isn't implemented in the
* dynamic linker. They must return an error if called, and they must
* be weak symbols so that the dynamic linker can override them.
*/
static char dlfcn_error[] = "Service unavailable";
/*ARGSUSED*/
void *
dlopen(const char *name, int mode)
{
return NULL;
}
That suggests we just need to set errno there. To what value? ENOEXEC?
--
Emmanuel Dreyfus
manu%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index