From 0d55f4d0aeaeb16629a2c07c96a190695b83a7e6 Mon Sep 17 00:00:00 2001 From: jakub Date: Sat, 2 Jul 2005 08:52:21 +0000 Subject: * 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 * 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 --- libssp/strncpy-chk.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 libssp/strncpy-chk.c (limited to 'libssp/strncpy-chk.c') diff --git a/libssp/strncpy-chk.c b/libssp/strncpy-chk.c new file mode 100644 index 00000000000..5c01fd9faa3 --- /dev/null +++ b/libssp/strncpy-chk.c @@ -0,0 +1,53 @@ +/* Checking strncpy. + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file into combinations with other programs, +and to distribute those combinations without any restriction coming +from the use of this file. (The General Public License restrictions +do apply in other respects; for example, they cover modification of +the file, and distribution when not linked into a combine +executable.) + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + +/* As a special exception, if you link this library with files compiled with + GCC to produce an executable, this does not cause the resulting executable + to be covered by the GNU General Public License. This exception does not + however invalidate any other reasons why the executable file might be + covered by the GNU General Public License. */ + +#include "config.h" +#include +#ifdef HAVE_STRING_H +# include +#endif + +extern void __chk_fail (void) __attribute__((__noreturn__)); + +#ifdef HAVE_STRNCPY +char * +__strncpy_chk (char *__restrict__ dest, const char *__restrict__ src, + size_t len, size_t slen) +{ + if (len > slen) + __chk_fail (); + return strncpy (dest, src, len); +} +#endif -- cgit v1.2.1