mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 17:53:37 +08:00
Sat Jun 15 18:13:43 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/Dist: Add sys/klog.h. * elf/dl-open.c (_dl_open): Remove PARENT argument, pass null. * elf/link.h: Update prototype. * elf/dl-load.c (_dl_map_object): If dependents' DT_RPATHs don't find NAME, try the DT_RPATH of the executable itself if dynamic. * elf/dlopen.c (dlopen): Don't pass first arg to _dl_open. * elf/dl-load.c (_dl_map_object): Exit DT_RPATH checking loop when an open succeeds. * Makerules (build-shlib): Give -L opts for each elt of $(rpath-link). * sysdeps/mach/hurd/Makefile (sysdep-LDFLAGS): Variable removed. (rpath-link): Append to this instead.
This commit is contained in:
parent
f332db0256
commit
a23db8e4af
18
ChangeLog
18
ChangeLog
@ -1,3 +1,21 @@
|
|||||||
|
Sat Jun 15 18:13:43 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/Dist: Add sys/klog.h.
|
||||||
|
|
||||||
|
* elf/dl-open.c (_dl_open): Remove PARENT argument, pass null.
|
||||||
|
* elf/link.h: Update prototype.
|
||||||
|
* elf/dl-load.c (_dl_map_object): If dependents' DT_RPATHs don't find
|
||||||
|
NAME, try the DT_RPATH of the executable itself if dynamic.
|
||||||
|
* elf/dlopen.c (dlopen): Don't pass first arg to _dl_open.
|
||||||
|
|
||||||
|
* elf/dl-load.c (_dl_map_object): Exit DT_RPATH checking loop when an
|
||||||
|
open succeeds.
|
||||||
|
|
||||||
|
* Makerules (build-shlib): Give -L opts for each elt of $(rpath-link).
|
||||||
|
|
||||||
|
* sysdeps/mach/hurd/Makefile (sysdep-LDFLAGS): Variable removed.
|
||||||
|
(rpath-link): Append to this instead.
|
||||||
|
|
||||||
Fri Jun 14 01:51:47 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
Fri Jun 14 01:51:47 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||||
|
|
||||||
* version.c (banner): New static const variable, complete version
|
* version.c (banner): New static const variable, complete version
|
||||||
|
@ -486,7 +486,7 @@ define build-shlib
|
|||||||
$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
|
$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
|
||||||
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
|
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
|
||||||
$(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
|
$(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
|
||||||
-Wl,-rpath-link=$(common-objdir) \
|
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
|
||||||
-Wl,--whole-archive $^ $(no-whole-archive) \
|
-Wl,--whole-archive $^ $(no-whole-archive) \
|
||||||
$(LDLIBS-$(@F:lib%.so=%).so)
|
$(LDLIBS-$(@F:lib%.so=%).so)
|
||||||
endef
|
endef
|
||||||
|
@ -469,13 +469,24 @@ _dl_map_object (struct link_map *loader, const char *name, int type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fd = -1;
|
fd = -1;
|
||||||
for (l = loader; l; l = l->l_loader)
|
|
||||||
|
/* First try the DT_RPATH of the dependent object that caused NAME
|
||||||
|
to be loaded. Then that object's dependent, and on up. */
|
||||||
|
for (l = loader; fd == -1 && l; l = l->l_loader)
|
||||||
if (l && l->l_info[DT_RPATH])
|
if (l && l->l_info[DT_RPATH])
|
||||||
trypath ((const char *) (l->l_addr +
|
trypath ((const char *) (l->l_addr +
|
||||||
l->l_info[DT_STRTAB]->d_un.d_ptr +
|
l->l_info[DT_STRTAB]->d_un.d_ptr +
|
||||||
l->l_info[DT_RPATH]->d_un.d_val));
|
l->l_info[DT_RPATH]->d_un.d_val));
|
||||||
|
/* If dynamically linked, try the DT_RPATH of the executable itself. */
|
||||||
|
l = _dl_loaded;
|
||||||
|
if (fd == -1 && l && l->l_type != lt_loaded)
|
||||||
|
trypath ((const char *) (l->l_addr +
|
||||||
|
l->l_info[DT_STRTAB]->d_un.d_ptr +
|
||||||
|
l->l_info[DT_RPATH]->d_un.d_val));
|
||||||
|
/* Try an environment variable (unless setuid). */
|
||||||
if (fd == -1 && ! _dl_secure)
|
if (fd == -1 && ! _dl_secure)
|
||||||
trypath (getenv ("LD_LIBRARY_PATH"));
|
trypath (getenv ("LD_LIBRARY_PATH"));
|
||||||
|
/* Finally, try the default path. */
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
{
|
{
|
||||||
extern const char *_dl_rpath; /* Set in rtld.c. */
|
extern const char *_dl_rpath; /* Set in rtld.c. */
|
||||||
|
@ -25,22 +25,15 @@ Cambridge, MA 02139, USA. */
|
|||||||
size_t _dl_global_scope_alloc;
|
size_t _dl_global_scope_alloc;
|
||||||
|
|
||||||
struct link_map *
|
struct link_map *
|
||||||
_dl_open (struct link_map *parent, const char *file, int mode)
|
_dl_open (const char *file, int mode)
|
||||||
{
|
{
|
||||||
struct link_map *new, *l;
|
struct link_map *new, *l;
|
||||||
ElfW(Addr) init;
|
ElfW(Addr) init;
|
||||||
struct r_debug *r;
|
struct r_debug *r;
|
||||||
|
|
||||||
|
|
||||||
#ifdef PIC
|
|
||||||
if (! parent)
|
|
||||||
/* If no particular dependent object caused this load,
|
|
||||||
then use the DT_RPATH of the executable itself. */
|
|
||||||
parent = _dl_loaded;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Load the named object. */
|
/* Load the named object. */
|
||||||
new = _dl_map_object (parent, file, lt_loaded);
|
new = _dl_map_object (NULL, file, lt_loaded);
|
||||||
if (new->l_searchlist)
|
if (new->l_searchlist)
|
||||||
/* It was already open. */
|
/* It was already open. */
|
||||||
return new;
|
return new;
|
||||||
|
@ -28,7 +28,7 @@ dlopen (const char *file, int mode)
|
|||||||
|
|
||||||
void doit (void)
|
void doit (void)
|
||||||
{
|
{
|
||||||
new = _dl_open (_dl_loaded, file ?: "", mode);
|
new = _dl_open (file ?: "", mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _dlerror_run (doit) ? NULL : new;
|
return _dlerror_run (doit) ? NULL : new;
|
||||||
|
@ -205,11 +205,9 @@ extern void _dl_setup_hash (struct link_map *map);
|
|||||||
|
|
||||||
|
|
||||||
/* Open the shared object NAME, relocate it, and run its initializer if it
|
/* Open the shared object NAME, relocate it, and run its initializer if it
|
||||||
hasn't already been run. LOADER's DT_RPATH is used in searching for
|
hasn't already been run. MODE is as for `dlopen' (see <dlfcn.h>). If
|
||||||
NAME. MODE is as for `dlopen' (see <dlfcn.h>). If the object is
|
the object is already opened, returns its existing map. */
|
||||||
already opened, returns its existing map. */
|
extern struct link_map *_dl_open (const char *name, int mode);
|
||||||
extern struct link_map *_dl_open (struct link_map *loader,
|
|
||||||
const char *name, int mode);
|
|
||||||
|
|
||||||
/* Close an object previously opened by _dl_open. */
|
/* Close an object previously opened by _dl_open. */
|
||||||
extern void _dl_close (struct link_map *map);
|
extern void _dl_close (struct link_map *map);
|
||||||
|
@ -104,7 +104,9 @@ endif
|
|||||||
# For the shared library, we don't need to do the linker script machination.
|
# For the shared library, we don't need to do the linker script machination.
|
||||||
# Instead, we specify the required libraries when building the shared object.
|
# Instead, we specify the required libraries when building the shared object.
|
||||||
LDLIBS-c.so = -lmachuser -lhurduser
|
LDLIBS-c.so = -lmachuser -lhurduser
|
||||||
sysdep-LDFLAGS += -Wl,-rpath-link=$(..)mach:$(..)hurd
|
ifndef objpfx
|
||||||
|
rpath-link += $(..)mach:$(..)hurd
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
endif # in-Makerules
|
endif # in-Makerules
|
||||||
|
@ -4,6 +4,7 @@ nfs/nfs.h
|
|||||||
sys/acct.h
|
sys/acct.h
|
||||||
sys/io.h
|
sys/io.h
|
||||||
sys/kdaemon.h
|
sys/kdaemon.h
|
||||||
|
sys/klog.h
|
||||||
sys/module.h
|
sys/module.h
|
||||||
sys/mount.h
|
sys/mount.h
|
||||||
sys/quota.h
|
sys/quota.h
|
||||||
|
Loading…
Reference in New Issue
Block a user