diff options
author | Roland McGrath <roland@gnu.org> | 2003-09-23 12:06:48 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2003-09-23 12:06:48 +0000 |
commit | ecdeaac05f73c29eca92eecd55ad4fb8513c7771 (patch) | |
tree | e0cc585c839b68bc3e698f09d51c1f0b78c3cbef /sysdeps/generic/ldsodefs.h | |
parent | 1deb5779e249255d4247529facd65025c1787cd1 (diff) | |
download | glibc-ecdeaac05f73c29eca92eecd55ad4fb8513c7771.tar.gz glibc-ecdeaac05f73c29eca92eecd55ad4fb8513c7771.tar.xz glibc-ecdeaac05f73c29eca92eecd55ad4fb8513c7771.zip |
2003-09-23 Roland McGrath <roland@redhat.com>
* sysdeps/generic/ldsodefs.h (struct rtld_global): Add _dl_stack_flags and _dl_make_stack_executable_hook. Declare _dl_make_stack_executable. * elf/rtld.c (_rtld_global): Add initializer for _dl_stack_flags. (dl_main): Reset _dl_stack_flags according to PT_GNU_STACK phdr. Initialize _dl_make_stack_executable_hook. * elf/dl-support.c: Define those new variables. (_dl_non_dynamic_init): Scan phdrs for PT_GNU_STACK. (_dl_phdr): Fix type. * elf/dl-load.c (_dl_map_object_from_fd): Grok PT_GNU_STACK phdr and enable execute permission for the stack if necessary. * sysdeps/generic/dl-execstack.c: New file. * elf/Makefile (dl-routines): Add it. * elf/Versions (ld: GLIBC_PRIVATE): Add _dl_make_stack_executable. * sysdeps/unix/sysv/linux/dl-execstack.c: New file.
Diffstat (limited to 'sysdeps/generic/ldsodefs.h')
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 58dfc15ca3..afb192925a 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -355,6 +355,14 @@ struct rtld_global EXTERN void (*_dl_rtld_unlock_recursive) (void *); #endif + /* Prevailing state of the stack, PF_X indicating it's executable. */ + EXTERN ElfW(Word) _dl_stack_flags; + + /* If loading a shared object requires that we make the stack executable + when it was not, we do it by calling this function. + It returns an errno code or zero on success. */ + EXTERN int (*_dl_make_stack_executable_hook) (void) internal_function; + /* Keep the conditional TLS members at the end so the layout of the structure used by !USE_TLS code matches the prefix of the layout in the USE_TLS rtld. Note that `struct link_map' is conditionally @@ -438,6 +446,11 @@ extern void **_dl_initial_error_catch_tsd (void) __attribute__ ((const)) attribute_hidden; #endif +/* This is the initial value of GL(dl_make_stack_executable_hook). + A threads library can change it. */ +extern int _dl_make_stack_executable (void) internal_function; +rtld_hidden_proto (_dl_make_stack_executable) + /* Parameters passed to the dynamic linker. */ extern int _dl_argc attribute_hidden; extern char **_dl_argv; |