OSDN Git Service

Add __libc_stack_end to ld.so. The libc.a version remains to do.
authorJoakim Tjernlund <joakim.tjernlund@transmode.se>
Mon, 27 Jun 2005 22:20:44 +0000 (22:20 -0000)
committerJoakim Tjernlund <joakim.tjernlund@transmode.se>
Mon, 27 Jun 2005 22:20:44 +0000 (22:20 -0000)
sjhill, feel free to comment :)

ldso/ldso/dl-startup.c

index 07fd189..6ff3dac 100644 (file)
@@ -97,8 +97,8 @@
 /* Static declarations */
 int (*_dl_elf_main) (int, char **, char **);
 
-
-
+static void* __rtld_stack_end; /* Points to argc on stack, e.g *((long *)__rtld_stackend) == argc */
+strong_alias(__rtld_stack_end, __libc_stack_end); /* Exported version of __rtld_stack_end */
 
 /* When we enter this piece of code, the program stack looks like this:
         argc            argument counter (integer)
@@ -290,6 +290,11 @@ static void * __attribute_used__ _dl_start(unsigned long args)
           free to start using global variables, since these things have all been
           fixed up by now.  Still no function calls outside of this library ,
           since the dynamic resolver is not yet ready. */
+
+       __rtld_stack_end = (void *)args; /* Needs to be after ld.so self relocation */
+       if (*((long *)__rtld_stack_end) != argc) {
+               SEND_STDERR_DEBUG("__rtld_stack_end doesn't point to argc!");
+       }
        _dl_get_ready_to_run(tpnt, load_addr, auxvt, envp, argv);