diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-07-02 08:52:21 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-07-02 08:52:21 +0000 |
commit | 0d55f4d0aeaeb16629a2c07c96a190695b83a7e6 (patch) | |
tree | 1cb854702400de0149fb900c82b137e5603e222b /gcc/libgcc2.c | |
parent | c656b4ab03db593f6251031bbdcf8fa2e7324ee0 (diff) | |
download | gcc-0d55f4d0aeaeb16629a2c07c96a190695b83a7e6.tar.gz |
* Makefile.def (target_modules): Add libssp.
* configure.in (target_libraries): Add target-libssp.
* configure: Rebuilt.
* Makefile.in: Rebuilt.
gcc/
* gcc.c (LINK_SSP_SPEC): Define.
(link_ssp_spec): New variable.
(LINK_COMMAND_SPEC): Add %(link_ssp).
(static_specs): Add link_ssp_spec.
* configure.ac (TARGET_LIBC_PROVIDES_SSP): New test.
* configure: Rebuilt.
* config.in: Rebuilt.
* config/rs6000/linux.h (TARGET_THREAD_SSP_OFFSET): Define.
* config/rs6000/linux64.h (TARGET_THREAD_SSP_OFFSET): Likewise.
* config/i386/linux.h (TARGET_THREAD_SSP_OFFSET): Likewise.
* config/i386/linux64.h (TARGET_THREAD_SSP_OFFSET): Likewise.
* config/rs6000/rs6000.md (stack_protect_set, stack_protect_test):
If TARGET_THREAD_SSP_OFFSET is defined, use -0x7010(13) resp.
-0x7008(2) instead of reading __stack_chk_guard variable.
* config/i386/i386.md (UNSPEC_SP_SET, UNSPEC_SP_TEST): Change
number.
(UNSPEC_SP_TLS_SET, UNSPEC_SP_TLS_TEST): New constants.
(stack_protect_set, stack_protect_test): Use *_tls* patterns
if TARGET_THREAD_SSP_OFFSET is defined.
(stack_tls_protect_set_si, stack_tls_protect_set_di,
stack_tls_protect_test_si, stack_tls_protect_test_di): New insns.
Revert:
2005-06-27 Richard Henderson <rth@redhat.com>
* libgcc-std.ver (GCC_4.1.0): New.
* libgcc.h (__stack_chk_guard): Declare.
(__stack_chk_fail, __stack_chk_fail_local): Declare.
* libgcc2.c (L_stack_chk, L_stack_chk_local): New.
* mklibgcc.in (lib2funcs): Add them.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101531 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/libgcc2.c')
-rw-r--r-- | gcc/libgcc2.c | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index a49c8c128f9..3108bff6729 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -2015,141 +2015,3 @@ func_ptr __DTOR_LIST__[2]; #endif #endif /* no INIT_SECTION_ASM_OP and not CTOR_LISTS_DEFINED_EXTERNALLY */ #endif /* L_ctors */ - -#ifdef L_stack_chk -#ifndef TARGET_LIBC_PROVIDES_SSP - -#ifndef inhibit_libc -# include <string.h> -# include <unistd.h> -# include <fcntl.h> -# ifdef HAVE_PATHS_H -# include <paths.h> -# endif -# ifndef _PATH_TTY -# define _PATH_TTY "/dev/tty" -# endif -# ifdef HAVE_SYSLOG_H -# include <syslog.h> -# endif -#endif - -void *__stack_chk_guard = 0; - -static void __attribute__ ((constructor)) -__guard_setup (void) -{ - unsigned char *p; - - if (__stack_chk_guard != 0) - return; - -#ifndef inhibit_libc - { - int fd = open ("/dev/urandom", O_RDONLY); - if (fd != -1) - { - ssize_t size = read (fd, &__stack_chk_guard, - sizeof (__stack_chk_guard)); - close (fd); - if (size == sizeof(__stack_chk_guard)) - return; - } - } -#endif - - /* If a random generator can't be used, the protector switches the guard - to the "terminator canary". */ - p = (unsigned char *)&__stack_chk_guard; - p[sizeof(__stack_chk_guard)-1] = 255; - p[sizeof(__stack_chk_guard)-2] = '\n'; - p[0] = 0; -} - -void -__stack_chk_fail (void) -{ -#ifndef inhibit_libc -# ifdef __GNU_LIBRARY__ - extern char * __progname; -# else - static const char __progname[] = ""; -# endif - - int fd; - - /* Print error message directly to the tty. This avoids Bad Things - happening if stderr is redirected. */ - fd = open (_PATH_TTY, O_WRONLY); - if (fd != -1) - { - static const char msg1[] = "*** stack smashing detected ***: "; - static const char msg2[] = " terminated\n"; - size_t progname_len, len; - char *buf, *p; - - progname_len = strlen (__progname); - len = sizeof(msg1)-1 + progname_len + sizeof(msg2)-1 + 1; - p = buf = alloca (len); - - memcpy (p, msg1, sizeof(msg1)-1); - p += sizeof(msg1)-1; - memcpy (p, __progname, progname_len); - p += progname_len; - memcpy (p, msg2, sizeof(msg2)); - - while (len > 0) - { - ssize_t wrote = write (fd, buf, len); - if (wrote < 0) - break; - len -= wrote; - } - close (fd); - } - -# ifdef HAVE_SYSLOG_H - /* Only send the error to syslog if there was no tty available. */ - else - syslog (LOG_CRIT, "stack smashing detected: terminated"); -# endif /* HAVE_SYSLOG_H */ -#endif /* inhibit_libc */ - - /* Try very hard to exit. Note that signals may be blocked preventing - the first two options from working. The use of volatile is here to - prevent optimizers from "knowing" that __builtin_trap is called first, - and that it doesn't return, and so "obviously" the rest of the code - is dead. */ - { - volatile int state; - for (state = 0; ; state++) - switch (state) - { - case 0: - __builtin_trap (); - break; - case 1: - *(volatile int *)-1L = 0; - break; - case 2: - _exit (127); - break; - } - } -} -#endif /* TARGET_LIBC_PROVIDES_SSP */ -#endif /* L_stack_chk */ - -#ifdef L_stack_chk_local -#ifndef TARGET_LIBC_PROVIDES_SSP -/* Some targets can avoid loading a GP for calls to hidden functions. - Using this entry point may avoid the load of a GP entirely for the - function, making the overall code smaller. */ - -void -__stack_chk_fail_local (void) -{ - __stack_chk_fail (); -} -#endif /* TARGET_LIBC_PROVIDES_SSP */ -#endif /* L_stack_chk_local */ |