aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/generic
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/generic')
-rw-r--r--sysdeps/generic/dl-sysdep.c5
-rw-r--r--sysdeps/generic/ldsodefs.h8
-rw-r--r--sysdeps/generic/libc-start.c7
3 files changed, 15 insertions, 5 deletions
diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c
index 53b9ea233c..5ec063323f 100644
--- a/sysdeps/generic/dl-sysdep.c
+++ b/sysdeps/generic/dl-sysdep.c
@@ -1,5 +1,5 @@
/* Operating system support for run-time dynamic linker. Generic Unix version.
- Copyright (C) 1995-1998, 2000-2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1995-1998, 2000-2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -53,7 +53,8 @@ INTVARDEF(__libc_enable_secure)
int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
of init-first. */
/* This variable contains the lowest stack address ever used. */
-void *__libc_stack_end;
+void *__libc_stack_end __attribute__ ((section (".data.rel.ro")));
+rtld_hidden_def(__libc_stack_end)
static ElfW(auxv_t) *_dl_auxv;
#ifndef DL_FIND_ARG_COMPONENTS
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 852cf51280..f511c5d36f 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -456,6 +456,14 @@ extern void **_dl_initial_error_catch_tsd (void) __attribute__ ((const))
extern int _dl_make_stack_executable (void **stack_endp) internal_function;
rtld_hidden_proto (_dl_make_stack_executable)
+/* Variable pointing to the end of the stack (or close to it). This value
+ must be constant over the runtime of the application. Some programs
+ might use the variable which results in copy relocations on some
+ platforms. But this does not matter, ld.so can always use the local
+ copy. */
+extern void *__libc_stack_end;
+rtld_hidden_proto (__libc_stack_end)
+
/* Parameters passed to the dynamic linker. */
extern int _dl_argc attribute_hidden;
extern char **_dl_argv;
diff --git a/sysdeps/generic/libc-start.c b/sysdeps/generic/libc-start.c
index e297b0a424..716bbc7018 100644
--- a/sysdeps/generic/libc-start.c
+++ b/sysdeps/generic/libc-start.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,1999,2000,2001,2002,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -105,10 +105,11 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
INIT_ARGV_and_ENVIRON;
- /* Store the lowest stack address. */
+#ifndef SHARED
+ /* Store the lowest stack address. This is done in ld.so if this is
+ the code for the DSO. */
__libc_stack_end = stack_end;
-#ifndef SHARED
# ifdef HAVE_AUX_VECTOR
/* First process the auxiliary vector since we need to find the
program header to locate an eventually present PT_TLS entry. */