about summary refs log tree commit diff
path: root/elf/dl-load.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-01-13 15:47:32 +0000
committerUlrich Drepper <drepper@redhat.com>2004-01-13 15:47:32 +0000
commitd1fc817ea459ca28979948fbb23ff58a6f3f4a8c (patch)
treecf1b48823190c07959f8b8b769d096fcd739b2f3 /elf/dl-load.c
parent0a182a286d84451b70a40948247319ac9723decb (diff)
downloadglibc-d1fc817ea459ca28979948fbb23ff58a6f3f4a8c.tar.gz
glibc-d1fc817ea459ca28979948fbb23ff58a6f3f4a8c.tar.xz
glibc-d1fc817ea459ca28979948fbb23ff58a6f3f4a8c.zip
Update.
2004-01-13  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/sysv/linux/dl-execstack.c: Change interface.  Add
	challenge for caller.
	* sysdeps/generic/ldsodefs.h: Change declaration and type of hook
	member in rtld_global appropriately.
	* elf/dl-support.c: Likewise.
	* elf/dl-load.c (_dl_map_object_from_fd): Take additional paramter.
	Pass it on to the changed function.
	(_dl_map_object): Pass new parameter to _dl_map_object_from_fd.
Diffstat (limited to 'elf/dl-load.c')
-rw-r--r--elf/dl-load.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c
index dc993a5894..99ca6a054d 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -811,7 +811,7 @@ static
 struct link_map *
 _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
 			char *realname, struct link_map *loader, int l_type,
-			int mode)
+			int mode, void **stack_endp)
 {
   struct link_map *l = NULL;
   const ElfW(Ehdr) *header;
@@ -1351,7 +1351,7 @@ cannot allocate TLS data structures for initial thread");
     {
       /* The stack is presently not executable, but this module
 	 requires that it be executable.  */
-      errval = (*GL(dl_make_stack_executable_hook)) ();
+      errval = (*GL(dl_make_stack_executable_hook)) (stack_endp);
       if (errval)
 	{
 	  errstring = N_("\
@@ -1949,7 +1949,10 @@ cannot create shared object descriptor"));
 				  N_("cannot open shared object file"));
     }
 
-  return _dl_map_object_from_fd (name, fd, &fb, realname, loader, type, mode);
+  extern void *__libc_stack_end;
+  void *stack_end = __libc_stack_end;
+  return _dl_map_object_from_fd (name, fd, &fb, realname, loader, type, mode,
+				 &stack_end);
 }
 INTDEF (_dl_map_object)