aboutsummaryrefslogtreecommitdiff
path: root/gcc/libgcc2.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-07-02 10:52:21 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2005-07-02 10:52:21 +0200
commit77008252819720c987f11b3dade670e2b3ba09b8 (patch)
tree1cb854702400de0149fb900c82b137e5603e222b /gcc/libgcc2.c
parentf60d648137b2d2cda1c598996b9598d559715117 (diff)
downloadgcc-77008252819720c987f11b3dade670e2b3ba09b8.zip
gcc-77008252819720c987f11b3dade670e2b3ba09b8.tar.gz
gcc-77008252819720c987f11b3dade670e2b3ba09b8.tar.bz2
Makefile.def (target_modules): Add libssp.
* 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. From-SVN: r101531
Diffstat (limited to 'gcc/libgcc2.c')
-rw-r--r--gcc/libgcc2.c138
1 files changed, 0 insertions, 138 deletions
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index a49c8c1..3108bff 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 */