Skip to content

Commit

Permalink
Sat Jun 15 18:13:43 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
Browse files Browse the repository at this point in the history
	* 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.
  • Loading branch information
Roland McGrath committed Jun 16, 1996
1 parent f332db0 commit a23db8e
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 18 deletions.
18 changes: 18 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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>

* version.c (banner): New static const variable, complete version
Expand Down
2 changes: 1 addition & 1 deletion Makerules
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,7 @@ define build-shlib
$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
$(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) \
$(LDLIBS-$(@F:lib%.so=%).so)
endef
Expand Down
13 changes: 12 additions & 1 deletion elf/dl-load.c
Original file line number Diff line number Diff line change
Expand Up @@ -469,13 +469,24 @@ _dl_map_object (struct link_map *loader, const char *name, int type)
}

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])
trypath ((const char *) (l->l_addr +
l->l_info[DT_STRTAB]->d_un.d_ptr +
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)
trypath (getenv ("LD_LIBRARY_PATH"));
/* Finally, try the default path. */
if (fd == -1)
{
extern const char *_dl_rpath; /* Set in rtld.c. */
Expand Down
11 changes: 2 additions & 9 deletions elf/dl-open.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,22 +25,15 @@ Cambridge, MA 02139, USA. */
size_t _dl_global_scope_alloc;

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;
ElfW(Addr) init;
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. */
new = _dl_map_object (parent, file, lt_loaded);
new = _dl_map_object (NULL, file, lt_loaded);
if (new->l_searchlist)
/* It was already open. */
return new;
Expand Down
2 changes: 1 addition & 1 deletion elf/dlopen.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ dlopen (const char *file, int mode)

void doit (void)
{
new = _dl_open (_dl_loaded, file ?: "", mode);
new = _dl_open (file ?: "", mode);
}

return _dlerror_run (doit) ? NULL : new;
Expand Down
8 changes: 3 additions & 5 deletions elf/link.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
hasn't already been run. LOADER's DT_RPATH is used in searching for
NAME. MODE is as for `dlopen' (see <dlfcn.h>). If the object is
already opened, returns its existing map. */
extern struct link_map *_dl_open (struct link_map *loader,
const char *name, int mode);
hasn't already been run. MODE is as for `dlopen' (see <dlfcn.h>). If
the object is already opened, returns its existing map. */
extern struct link_map *_dl_open (const char *name, int mode);

/* Close an object previously opened by _dl_open. */
extern void _dl_close (struct link_map *map);
Expand Down
4 changes: 3 additions & 1 deletion sysdeps/mach/hurd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,9 @@ endif
# 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.
LDLIBS-c.so = -lmachuser -lhurduser
sysdep-LDFLAGS += -Wl,-rpath-link=$(..)mach:$(..)hurd
ifndef objpfx
rpath-link += $(..)mach:$(..)hurd
endif


endif # in-Makerules
1 change: 1 addition & 0 deletions sysdeps/unix/sysv/linux/Dist
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ nfs/nfs.h
sys/acct.h
sys/io.h
sys/kdaemon.h
sys/klog.h
sys/module.h
sys/mount.h
sys/quota.h
Expand Down

0 comments on commit a23db8e

Please sign in to comment.