diff options
Diffstat (limited to 'debug')
82 files changed, 60 insertions, 4122 deletions
diff --git a/debug/Depend b/debug/Depend deleted file mode 100644 index f3e1156..0000000 --- a/debug/Depend +++ /dev/null @@ -1 +0,0 @@ -localedata diff --git a/debug/Makefile b/debug/Makefile index 9d9b6ac..6df0611 100644 --- a/debug/Makefile +++ b/debug/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1998-2001,2004,2005,2006 Free Software Foundation, Inc. +# Copyright (C) 1998, 1999, 2000, 2001, 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 @@ -24,27 +24,12 @@ subdir := debug headers := execinfo.h distribute = sigcontextinfo.h register-dump.h frame.h -routines = backtrace backtracesyms backtracesymsfd noophooks \ +routines := backtrace backtracesyms backtracesymsfd noophooks \ memcpy_chk memmove_chk mempcpy_chk memset_chk stpcpy_chk \ - strcat_chk strcpy_chk strncat_chk strncpy_chk stpncpy_chk \ + strcat_chk strcpy_chk strncat_chk strncpy_chk \ sprintf_chk vsprintf_chk snprintf_chk vsnprintf_chk \ printf_chk fprintf_chk vprintf_chk vfprintf_chk \ - gets_chk chk_fail readonly-area fgets_chk fgets_u_chk \ - read_chk pread_chk pread64_chk recv_chk recvfrom_chk \ - readlink_chk readlinkat_chk getwd_chk getcwd_chk \ - realpath_chk ptsname_r_chk \ - wctomb_chk wcscpy_chk wmemcpy_chk wmemmove_chk wmempcpy_chk \ - wcpcpy_chk wcsncpy_chk wcscat_chk wcsncat_chk wmemset_chk \ - wcpncpy_chk \ - swprintf_chk vswprintf_chk wprintf_chk fwprintf_chk \ - vwprintf_chk vfwprintf_chk fgetws_chk fgetws_u_chk \ - confstr_chk getgroups_chk ttyname_r_chk getlogin_r_chk \ - gethostname_chk getdomainname_chk wcrtomb_chk mbsnrtowcs_chk \ - wcsnrtombs_chk mbsrtowcs_chk wcsrtombs_chk mbstowcs_chk \ - wcstombs_chk \ - stack_chk_fail \ - $(static-only-routines) -static-only-routines := warning-nop stack_chk_fail_local + gets_chk chk_fail readonly-area CFLAGS-backtrace.c = -fno-omit-frame-pointer CFLAGS-sprintf_chk.c = -D_IO_MTSAFE_IO @@ -56,31 +41,9 @@ CFLAGS-fprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) CFLAGS-vprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) CFLAGS-vfprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) CFLAGS-gets_chk.c = -D_IO_MTSAFE_IO $(exceptions) -CFLAGS-fgets_chk.c = -D_IO_MTSAFE_IO $(exceptions) -CFLAGS-fgets_u_chk.c = -D_IO_MTSAFE_IO $(exceptions) -CFLAGS-swprintf_chk.c = -D_IO_MTSAFE_IO -CFLAGS-vswprintf_chk.c = -D_IO_MTSAFE_IO -CFLAGS-wprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) -CFLAGS-fwprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) -CFLAGS-vwprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) -CFLAGS-vfwprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) -CFLAGS-fgetws_chk.c = -D_IO_MTSAFE_IO $(exceptions) -CFLAGS-fgetws_u_chk.c = -D_IO_MTSAFE_IO $(exceptions) -CFLAGS-read_chk.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-pread_chk.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-pread64_chk.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-recv_chk.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-recvfrom_chk.c = -fexceptions -fasynchronous-unwind-tables - -tst-chk1-ENV = LOCPATH=$(common-objpfx)localedata -tst-chk2-ENV = LOCPATH=$(common-objpfx)localedata -tst-chk3-ENV = LOCPATH=$(common-objpfx)localedata -tst-lfschk1-ENV = LOCPATH=$(common-objpfx)localedata -tst-lfschk2-ENV = LOCPATH=$(common-objpfx)localedata -tst-lfschk3-ENV = LOCPATH=$(common-objpfx)localedata tests = backtrace-tst tst-chk1 tst-chk2 tst-chk3 \ - tst-lfschk1 tst-lfschk2 tst-lfschk3 test-strcpy_chk test-stpcpy_chk + test-strcpy_chk test-stpcpy_chk extra-libs = libSegFault libpcprofile extra-libs-others = $(extra-libs) @@ -107,8 +70,6 @@ generated = catchsegv xtrace include ../Rules -sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,') - $(objpfx)catchsegv: catchsegv.sh $(common-objpfx)soversions.mk \ $(common-objpfx)config.make slibpfx=`echo $(slibdir)|sed 's/lib\(64\|\)$$/\\\\\\\\$$LIB/'`; \ @@ -121,7 +82,7 @@ $(objpfx)pcprofiledump: $(objpfx)pcprofiledump.o $(objpfx)xtrace: xtrace.sh rm -f $@.new sed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \ - -e 's|@SLIBDIR@|$(sLIBdir)|' -e 's|@BINDIR@|$(bindir)|' $^ > $@.new \ + -e 's|@SLIBDIR@|$(slibdir)|' -e 's|@BINDIR@|$(bindir)|' $^ > $@.new \ && rm -f $@ && mv $@.new $@ && chmod +x $@ # Depend on libc.so so a DT_NEEDED is generated in the shared objects. diff --git a/debug/Versions b/debug/Versions index 5c87af2..07d6fbb 100644 --- a/debug/Versions +++ b/debug/Versions @@ -18,25 +18,4 @@ libc { __printf_chk; __fprintf_chk; __vprintf_chk; __vfprintf_chk; __gets_chk; } - GLIBC_2.4 { - __fgets_chk; __fgets_unlocked_chk; - __read_chk; __pread_chk; __pread64_chk; - __readlink_chk; __getcwd_chk; __getwd_chk; - __recv_chk; __recvfrom_chk; - __realpath_chk; __ptsname_r_chk; __wctomb_chk; - __stpncpy_chk; - __wcscpy_chk; __wmemcpy_chk; __wmemmove_chk; __wmempcpy_chk; __wcpcpy_chk; - __wcsncpy_chk; __wcscat_chk; __wcsncat_chk; __wmemset_chk; __wcpncpy_chk; - __swprintf_chk; __vswprintf_chk; __wprintf_chk; __fwprintf_chk; - __vwprintf_chk; __vfwprintf_chk; __fgetws_chk; __fgetws_unlocked_chk; - __confstr_chk; __getgroups_chk; __ttyname_r_chk; __getlogin_r_chk; - __gethostname_chk; __getdomainname_chk; __wcrtomb_chk; __mbsnrtowcs_chk; - __wcsnrtombs_chk; __mbsrtowcs_chk; __wcsrtombs_chk; __mbstowcs_chk; - __wcstombs_chk; - - __stack_chk_fail; - } - GLIBC_2.5 { - __readlinkat_chk; - } } diff --git a/debug/backtrace.c b/debug/backtrace.c deleted file mode 100644 index f2d5237..0000000 --- a/debug/backtrace.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Return backtrace of current program state. Generic version. - Copyright (C) 1998, 2000, 2002, 2004, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <execinfo.h> -#include <signal.h> -#include <frame.h> -#include <sigcontextinfo.h> -#include <bp-checks.h> -#include <ldsodefs.h> - -/* This implementation assumes a stack layout that matches the defaults - used by gcc's `__builtin_frame_address' and `__builtin_return_address' - (FP is the frame pointer register): - - +-----------------+ +-----------------+ - FP -> | previous FP --------> | previous FP ------>... - | | | | - | return address | | return address | - +-----------------+ +-----------------+ - - */ - -/* Get some notion of the current stack. Need not be exactly the top - of the stack, just something somewhere in the current frame. */ -#ifndef CURRENT_STACK_FRAME -# define CURRENT_STACK_FRAME ({ char __csf; &__csf; }) -#endif - -/* By default we assume that the stack grows downward. */ -#ifndef INNER_THAN -# define INNER_THAN < -#endif - -/* By default assume the `next' pointer in struct layout points to the - next struct layout. */ -#ifndef ADVANCE_STACK_FRAME -# define ADVANCE_STACK_FRAME(next) BOUNDED_1 ((struct layout *) (next)) -#endif - -/* By default, the frame pointer is just what we get from gcc. */ -#ifndef FIRST_FRAME_POINTER -# define FIRST_FRAME_POINTER __builtin_frame_address (0) -#endif - -int -__backtrace (array, size) - void **array; - int size; -{ - struct layout *current; - void *__unbounded top_frame; - void *__unbounded top_stack; - int cnt = 0; - - top_frame = FIRST_FRAME_POINTER; - top_stack = CURRENT_STACK_FRAME; - - /* We skip the call to this function, it makes no sense to record it. */ - current = BOUNDED_1 ((struct layout *) top_frame); - while (cnt < size) - { - if ((void *) current INNER_THAN top_stack - || !((void *) current INNER_THAN __libc_stack_end)) - /* This means the address is out of range. Note that for the - toplevel we see a frame pointer with value NULL which clearly is - out of range. */ - break; - - array[cnt++] = current->return_address; - - current = ADVANCE_STACK_FRAME (current->next); - } - - return cnt; -} -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) diff --git a/debug/backtracesyms.c b/debug/backtracesyms.c deleted file mode 100644 index db7ba36..0000000 --- a/debug/backtracesyms.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Return list with names for address in backtrace. - Copyright (C) 1998, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <execinfo.h> -#include <stdlib.h> -#include <string.h> - - -/* Assume the worst for the width of an address. */ -#define WORD_WIDTH 16 - - -char ** -__backtrace_symbols (array, size) - void *const *array; - int size; -{ - int cnt; - size_t total = 0; - char **result; - - /* We can compute the text size needed for the symbols since we print - them all as "[+0x<addr>]". */ - total = size * (WORD_WIDTH + 6); - - /* Allocate memory for the result. */ - result = malloc (size * sizeof (char *) + total); - if (result != NULL) - { - char *last = (char *) (result + size); - - for (cnt = 0; cnt < size; ++cnt) - { - result[cnt] = last; - last += 1 + sprintf (last, "[+%p]", array[cnt]); - } - } - - return result; -} -weak_alias (__backtrace_symbols, backtrace_symbols) diff --git a/debug/backtracesymsfd.c b/debug/backtracesymsfd.c deleted file mode 100644 index b01f8b0..0000000 --- a/debug/backtracesymsfd.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Write formatted list with names for addresses in backtrace to a file. - Copyright (C) 1998, 2003, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <execinfo.h> -#include <string.h> -#include <sys/uio.h> - -#include <stdio-common/_itoa.h> -#include <not-cancel.h> - -#if __ELF_NATIVE_CLASS == 32 -# define WORD_WIDTH 8 -#else -/* We assume 64bits. */ -# define WORD_WIDTH 16 -#endif - - -void -__backtrace_symbols_fd (array, size, fd) - void *const *array; - int size; - int fd; -{ - struct iovec iov[3]; - int cnt; - - for (cnt = 0; cnt < size; ++cnt) - { - char buf[WORD_WIDTH]; - - iov[0].iov_base = (void *) "[0x"; - iov[0].iov_len = 3; - - iov[1].iov_base = _itoa_word ((unsigned long int) array[cnt], - &buf[WORD_WIDTH], 16, 0); - iov[1].iov_len = &buf[WORD_WIDTH] - (char *) iov[1].iov_base; - - iov[2].iov_base = (void *) "]\n"; - iov[2].iov_len = 2; - - /* We prefer to use the non-cancelable interface if it is available. */ - writev_not_cancel_no_status (fd, iov, 3); - } -} -weak_alias (__backtrace_symbols_fd, backtrace_symbols_fd) -libc_hidden_def (__backtrace_symbols_fd) diff --git a/debug/catchsegv.sh b/debug/catchsegv.sh index f4d971e..14556f7 100755 --- a/debug/catchsegv.sh +++ b/debug/catchsegv.sh @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 1998,1999,2001,2003,2004,2006 Free Software Foundation, Inc. +# Copyright (C) 1998, 1999, 2001, 2003, 2004 Free Software Foundation, Inc. # This file is part of the GNU C Library. # Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -39,7 +39,7 @@ if test $# -eq 0; then ;; --v | --ve | --ver | --vers | --versi | --versio | --version) echo 'catchsegv (GNU libc) @VERSION@' - echo 'Copyright (C) 2006 Free Software Foundation, Inc. + echo 'Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Ulrich Drepper.' diff --git a/debug/chk_fail.c b/debug/chk_fail.c index 0cfca29..dc1c3d7 100644 --- a/debug/chk_fail.c +++ b/debug/chk_fail.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +/* Copyright (C) 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 @@ -20,15 +21,10 @@ #include <stdlib.h> -extern char **__libc_argv attribute_hidden; - void __attribute__ ((noreturn)) __chk_fail (void) { - /* The loop is added only to keep gcc happy. */ - while (1) - __libc_message (2, "*** buffer overflow detected ***: %s terminated\n", - __libc_argv[0] ?: "<unknown>"); + __libc_fatal ("*** buffer overflow detected ***\n"); } libc_hidden_def (__chk_fail) diff --git a/debug/confstr_chk.c b/debug/confstr_chk.c deleted file mode 100644 index dae7714..0000000 --- a/debug/confstr_chk.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@readhat.com>, 20055. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <unistd.h> - - -size_t -__confstr_chk (int name, char *buf, size_t len, size_t buflen) -{ - if (__builtin_expect (buflen < len, 0)) - __chk_fail (); - - return confstr (name, buf, len); -} diff --git a/debug/execinfo.h b/debug/execinfo.h index c1614cc..fa9927c 100644 --- a/debug/execinfo.h +++ b/debug/execinfo.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 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 @@ -35,7 +35,8 @@ extern char **backtrace_symbols (void *__const *__array, int __size) /* This function is similar to backtrace_symbols() but it writes the result - immediately to a file. */ + immediately to a file and can therefore also be used in situations where + malloc() is not usable anymore. */ extern void backtrace_symbols_fd (void *__const *__array, int __size, int __fd) __THROW __nonnull ((1)); diff --git a/debug/fgets_chk.c b/debug/fgets_chk.c deleted file mode 100644 index 27fbede..0000000 --- a/debug/fgets_chk.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2002, 2003, 2005 - 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. - - As a special exception, if you link the code in this file with - files compiled with a GNU compiler to produce an executable, - that does not cause the resulting executable to be covered by - the GNU Lesser General Public License. This exception does not - however invalidate any other reasons why the executable file - might be covered by the GNU Lesser General Public License. - This exception applies to code released by its copyright holders - in files containing the exception. */ - -#include "libioP.h" -#include <stdio.h> -#include <sys/param.h> - -char * -__fgets_chk (buf, size, n, fp) - char *buf; - size_t size; - int n; - _IO_FILE *fp; -{ - _IO_size_t count; - char *result; - CHECK_FILE (fp, NULL); - if (n <= 0) - return NULL; - _IO_acquire_lock (fp); - /* This is very tricky since a file descriptor may be in the - non-blocking mode. The error flag doesn't mean much in this - case. We return an error only when there is a new error. */ - int old_error = fp->_IO_file_flags & _IO_ERR_SEEN; - fp->_IO_file_flags &= ~_IO_ERR_SEEN; - count = INTUSE(_IO_getline) (fp, buf, MIN ((size_t) n - 1, size), '\n', 1); - /* If we read in some bytes and errno is EAGAIN, that error will - be reported for next read. */ - if (count == 0 || ((fp->_IO_file_flags & _IO_ERR_SEEN) - && errno != EAGAIN)) - result = NULL; - else if (count >= size) - __chk_fail (); - else - { - buf[count] = '\0'; - result = buf; - } - fp->_IO_file_flags |= old_error; - _IO_release_lock (fp); - return result; -} diff --git a/debug/fgets_u_chk.c b/debug/fgets_u_chk.c deleted file mode 100644 index 324d7e3..0000000 --- a/debug/fgets_u_chk.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2002, 2003, 2005 - 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. - - As a special exception, if you link the code in this file with - files compiled with a GNU compiler to produce an executable, - that does not cause the resulting executable to be covered by - the GNU Lesser General Public License. This exception does not - however invalidate any other reasons why the executable file - might be covered by the GNU Lesser General Public License. - This exception applies to code released by its copyright holders - in files containing the exception. */ - -#include "libioP.h" -#include <stdio.h> -#include <sys/param.h> - -char * -__fgets_unlocked_chk (buf, size, n, fp) - char *buf; - size_t size; - int n; - _IO_FILE *fp; -{ - _IO_size_t count; - char *result; - CHECK_FILE (fp, NULL); - if (n <= 0) - return NULL; - /* This is very tricky since a file descriptor may be in the - non-blocking mode. The error flag doesn't mean much in this - case. We return an error only when there is a new error. */ - int old_error = fp->_IO_file_flags & _IO_ERR_SEEN; - fp->_IO_file_flags &= ~_IO_ERR_SEEN; - count = INTUSE(_IO_getline) (fp, buf, MIN ((size_t) n - 1, size), '\n', 1); - /* If we read in some bytes and errno is EAGAIN, that error will - be reported for next read. */ - if (count == 0 || ((fp->_IO_file_flags & _IO_ERR_SEEN) - && errno != EAGAIN)) - result = NULL; - else if (count >= size) - __chk_fail (); - else - { - buf[count] = '\0'; - result = buf; - } - fp->_IO_file_flags |= old_error; - return result; -} diff --git a/debug/fgetws_chk.c b/debug/fgetws_chk.c deleted file mode 100644 index d080ccb..0000000 --- a/debug/fgetws_chk.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2001, 2005 - 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "libioP.h" -#include <wchar.h> -#include <sys/param.h> - -wchar_t * -__fgetws_chk (wchar_t *buf, size_t size, int n, _IO_FILE *fp) -{ - _IO_size_t count; - wchar_t *result; - int old_error; - CHECK_FILE (fp, NULL); - if (n <= 0) - return NULL; - _IO_acquire_lock (fp); - /* This is very tricky since a file descriptor may be in the - non-blocking mode. The error flag doesn't mean much in this - case. We return an error only when there is a new error. */ - old_error = fp->_IO_file_flags & _IO_ERR_SEEN; - fp->_IO_file_flags &= ~_IO_ERR_SEEN; - count = _IO_getwline (fp, buf, MIN ((size_t) n - 1, size), L'\n', 1); - /* If we read in some bytes and errno is EAGAIN, that error will - be reported for next read. */ - if (count == 0 || (_IO_ferror_unlocked (fp) && errno != EAGAIN)) - result = NULL; - else if (count >= size) - __chk_fail (); - else - { - buf[count] = '\0'; - result = buf; - } - fp->_IO_file_flags |= old_error; - _IO_release_lock (fp); - return result; -} diff --git a/debug/fgetws_u_chk.c b/debug/fgetws_u_chk.c deleted file mode 100644 index b6cc87b..0000000 --- a/debug/fgetws_u_chk.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1993, 95, 96, 97, 98, 99, 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. - - As a special exception, if you link the code in this file with - files compiled with a GNU compiler to produce an executable, - that does not cause the resulting executable to be covered by - the GNU Lesser General Public License. This exception does not - however invalidate any other reasons why the executable file - might be covered by the GNU Lesser General Public License. - This exception applies to code released by its copyright holders - in files containing the exception. */ - -#include "libioP.h" -#include <wchar.h> -#include <sys/param.h> - -wchar_t * -__fgetws_unlocked_chk (wchar_t *buf, size_t size, int n, _IO_FILE *fp) -{ - _IO_size_t count; - wchar_t *result; - int old_error; - CHECK_FILE (fp, NULL); - if (n <= 0) - return NULL; - /* This is very tricky since a file descriptor may be in the - non-blocking mode. The error flag doesn't mean much in this - case. We return an error only when there is a new error. */ - old_error = fp->_IO_file_flags & _IO_ERR_SEEN; - fp->_IO_file_flags &= ~_IO_ERR_SEEN; - count = _IO_getwline (fp, buf, MIN ((size_t) n - 1, size), L'\n', 1); - /* If we read in some bytes and errno is EAGAIN, that error will - be reported for next read. */ - if (count == 0 || ((fp->_IO_file_flags & _IO_ERR_SEEN) - && errno != EAGAIN)) - result = NULL; - else if (count >= size) - __chk_fail (); - else - { - buf[count] = '\0'; - result = buf; - } - fp->_IO_file_flags |= old_error; - return result; -} diff --git a/debug/fprintf_chk.c b/debug/fprintf_chk.c index 58b5fb2..2b7d22b 100644 --- a/debug/fprintf_chk.c +++ b/debug/fprintf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2006 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -24,7 +24,7 @@ /* Write formatted output to FP from the format string FORMAT. */ int -___fprintf_chk (FILE *fp, int flag, const char *format, ...) +__fprintf_chk (FILE *fp, int flag, const char *format, ...) { va_list ap; int done; @@ -43,4 +43,3 @@ ___fprintf_chk (FILE *fp, int flag, const char *format, ...) return done; } -ldbl_strong_alias (___fprintf_chk, __fprintf_chk) diff --git a/debug/fwprintf_chk.c b/debug/fwprintf_chk.c deleted file mode 100644 index 710c89f..0000000 --- a/debug/fwprintf_chk.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005 - 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdarg.h> -#include <wchar.h> -#include "../libio/libioP.h" - - -/* Write formatted output to FP from the format string FORMAT. */ -int -__fwprintf_chk (FILE *fp, int flag, const wchar_t *format, ...) -{ - va_list ap; - int done; - - _IO_acquire_lock (fp); - if (flag > 0) - fp->_flags2 |= _IO_FLAGS2_FORTIFY; - - va_start (ap, format); - done = _IO_vfwprintf (fp, format, ap); - va_end (ap); - - if (flag > 0) - fp->_flags2 &= ~_IO_FLAGS2_FORTIFY; - _IO_release_lock (fp); - - return done; -} diff --git a/debug/getcwd_chk.c b/debug/getcwd_chk.c deleted file mode 100644 index cb864c8..0000000 --- a/debug/getcwd_chk.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <unistd.h> -#include <sys/param.h> - - -char * -__getcwd_chk (char *buf, size_t size, size_t buflen) -{ - if (size > buflen) - __chk_fail (); - - return __getcwd (buf, size); -} diff --git a/debug/getdomainname_chk.c b/debug/getdomainname_chk.c deleted file mode 100644 index a854645..0000000 --- a/debug/getdomainname_chk.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <unistd.h> - - -int -__getdomainname_chk (char *buf, size_t buflen, size_t nreal) -{ - if (buflen > nreal) - __chk_fail (); - - return getdomainname (buf, buflen); -} diff --git a/debug/getgroups_chk.c b/debug/getgroups_chk.c deleted file mode 100644 index c877ddb..0000000 --- a/debug/getgroups_chk.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <unistd.h> - - -int -__getgroups_chk (int size, __gid_t list[], size_t listlen) -{ - if (__builtin_expect (size * sizeof (__gid_t) > listlen, 0)) - __chk_fail (); - - return __getgroups (size, list); -} diff --git a/debug/gethostname_chk.c b/debug/gethostname_chk.c deleted file mode 100644 index 734cc56..0000000 --- a/debug/gethostname_chk.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <unistd.h> - - -int -__gethostname_chk (char *buf, size_t buflen, size_t nreal) -{ - if (buflen > nreal) - __chk_fail (); - - return __gethostname (buf, buflen); -} diff --git a/debug/getlogin_r_chk.c b/debug/getlogin_r_chk.c deleted file mode 100644 index ae495cd..0000000 --- a/debug/getlogin_r_chk.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <unistd.h> - - -int -__getlogin_r_chk (char *buf, size_t buflen, size_t nreal) -{ - if (buflen > nreal) - __chk_fail (); - - return getlogin_r (buf, buflen); -} diff --git a/debug/getwd_chk.c b/debug/getwd_chk.c deleted file mode 100644 index 898af28..0000000 --- a/debug/getwd_chk.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <unistd.h> -#include <sys/param.h> - - -char * -__getwd_chk (char *buf, size_t buflen) -{ - char *res = __getcwd (buf, buflen); - if (res == NULL && errno == ERANGE) - __chk_fail (); - return res; -} - -link_warning (getwd, - "the `getwd' function is dangerous and should not be used.") diff --git a/debug/mbsnrtowcs_chk.c b/debug/mbsnrtowcs_chk.c deleted file mode 100644 index 8872540..0000000 --- a/debug/mbsnrtowcs_chk.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <locale.h> -#include <wchar.h> - - -size_t -__mbsnrtowcs_chk (wchar_t *dst, __const char **src, size_t nmc, size_t len, - mbstate_t *ps, size_t dstlen) -{ - if (__builtin_expect (dstlen < len, 0)) - __chk_fail (); - - return __mbsnrtowcs (dst, src, nmc, len, ps); -} diff --git a/debug/mbsrtowcs_chk.c b/debug/mbsrtowcs_chk.c deleted file mode 100644 index 22d5a35..0000000 --- a/debug/mbsrtowcs_chk.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <locale.h> -#include <wchar.h> - - -size_t -__mbsrtowcs_chk (wchar_t *dst, __const char **src, size_t len, - mbstate_t *ps, size_t dstlen) -{ - if (__builtin_expect (dstlen < len, 0)) - __chk_fail (); - - return __mbsrtowcs (dst, src, len, ps); -} diff --git a/debug/mbstowcs_chk.c b/debug/mbstowcs_chk.c deleted file mode 100644 index d1403c5..0000000 --- a/debug/mbstowcs_chk.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <locale.h> -#include <string.h> -#include <wchar.h> - - -size_t -__mbstowcs_chk (wchar_t *dst, const char *src, size_t len, size_t dstlen) -{ - if (__builtin_expect (dstlen < len, 0)) - __chk_fail (); - - mbstate_t state; - - memset (&state, '\0', sizeof state); - /* Return how many we wrote (or maybe an error). */ - return __mbsrtowcs (dst, &src, len, &state); -} diff --git a/debug/memcpy_chk.c b/debug/memcpy_chk.c deleted file mode 100644 index 638cd0e..0000000 --- a/debug/memcpy_chk.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Copy memory to memory until the specified number of bytes - has been copied with error checking. Overlap is NOT handled correctly. - Copyright (C) 1991, 1997, 2003, 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <string.h> -#include <memcopy.h> -#include <pagecopy.h> - -void * -__memcpy_chk (dstpp, srcpp, len, dstlen) - void *dstpp; - const void *srcpp; - size_t len; - size_t dstlen; -{ - if (__builtin_expect (dstlen < len, 0)) - __chk_fail (); - - unsigned long int dstp = (long int) dstpp; - unsigned long int srcp = (long int) srcpp; - - /* Copy from the beginning to the end. */ - - /* If there not too few bytes to copy, use word copy. */ - if (len >= OP_T_THRES) - { - /* Copy just a few bytes to make DSTP aligned. */ - len -= (-dstp) % OPSIZ; - BYTE_COPY_FWD (dstp, srcp, (-dstp) % OPSIZ); - - /* Copy whole pages from SRCP to DSTP by virtual address manipulation, - as much as possible. */ - - PAGE_COPY_FWD_MAYBE (dstp, srcp, len, len); - - /* Copy from SRCP to DSTP taking advantage of the known alignment of - DSTP. Number of bytes remaining is put in the third argument, - i.e. in LEN. This number may vary from machine to machine. */ - - WORD_COPY_FWD (dstp, srcp, len, len); - - /* Fall out and copy the tail. */ - } - - /* There are just a few bytes to copy. Use byte memory operations. */ - BYTE_COPY_FWD (dstp, srcp, len); - - return dstpp; -} diff --git a/debug/memmove_chk.c b/debug/memmove_chk.c deleted file mode 100644 index f3b74d2..0000000 --- a/debug/memmove_chk.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Copy memory to memory until the specified number of bytes - has been copied with error checking. Overlap is handled correctly. - Copyright (C) 1991,1995,1996,1997,2003,2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <string.h> -#include <memcopy.h> -#include <pagecopy.h> - -void * -__memmove_chk (dest, src, len, destlen) - void *dest; - const void *src; - size_t len; - size_t destlen; -{ - if (__builtin_expect (destlen < len, 0)) - __chk_fail (); - - unsigned long int dstp = (long int) dest; - unsigned long int srcp = (long int) src; - - /* This test makes the forward copying code be used whenever possible. - Reduces the working set. */ - if (dstp - srcp >= len) /* *Unsigned* compare! */ - { - /* Copy from the beginning to the end. */ - - /* If there not too few bytes to copy, use word copy. */ - if (len >= OP_T_THRES) - { - /* Copy just a few bytes to make DSTP aligned. */ - len -= (-dstp) % OPSIZ; - BYTE_COPY_FWD (dstp, srcp, (-dstp) % OPSIZ); - - /* Copy whole pages from SRCP to DSTP by virtual address - manipulation, as much as possible. */ - - PAGE_COPY_FWD_MAYBE (dstp, srcp, len, len); - - /* Copy from SRCP to DSTP taking advantage of the known - alignment of DSTP. Number of bytes remaining is put - in the third argument, i.e. in LEN. This number may - vary from machine to machine. */ - - WORD_COPY_FWD (dstp, srcp, len, len); - - /* Fall out and copy the tail. */ - } - - /* There are just a few bytes to copy. Use byte memory operations. */ - BYTE_COPY_FWD (dstp, srcp, len); - } - else - { - /* Copy from the end to the beginning. */ - srcp += len; - dstp += len; - - /* If there not too few bytes to copy, use word copy. */ - if (len >= OP_T_THRES) - { - /* Copy just a few bytes to make DSTP aligned. */ - len -= dstp % OPSIZ; - BYTE_COPY_BWD (dstp, srcp, dstp % OPSIZ); - - /* Copy from SRCP to DSTP taking advantage of the known - alignment of DSTP. Number of bytes remaining is put - in the third argument, i.e. in LEN. This number may - vary from machine to machine. */ - - WORD_COPY_BWD (dstp, srcp, len, len); - - /* Fall out and copy the tail. */ - } - - /* There are just a few bytes to copy. Use byte memory operations. */ - BYTE_COPY_BWD (dstp, srcp, len); - } - - return dest; -} diff --git a/debug/mempcpy_chk.c b/debug/mempcpy_chk.c deleted file mode 100644 index 5297bba..0000000 --- a/debug/mempcpy_chk.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copy memory to memory until the specified number of bytes - has been copied, return pointer to following byte, with error checking. - Overlap is NOT handled correctly. - Copyright (C) 1991, 1997, 1998, 2002, 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <string.h> -#include <memcopy.h> -#include <pagecopy.h> - -void * -__mempcpy_chk (dstpp, srcpp, len, dstlen) - void *dstpp; - const void *srcpp; - size_t len; - size_t dstlen; -{ - if (__builtin_expect (dstlen < len, 0)) - __chk_fail (); - - unsigned long int dstp = (long int) dstpp; - unsigned long int srcp = (long int) srcpp; - - /* Copy from the beginning to the end. */ - - /* If there not too few bytes to copy, use word copy. */ - if (len >= OP_T_THRES) - { - /* Copy just a few bytes to make DSTP aligned. */ - len -= (-dstp) % OPSIZ; - BYTE_COPY_FWD (dstp, srcp, (-dstp) % OPSIZ); - - /* Copy whole pages from SRCP to DSTP by virtual address manipulation, - as much as possible. */ - - PAGE_COPY_FWD_MAYBE (dstp, srcp, len, len); - - /* Copy from SRCP to DSTP taking advantage of the known alignment of - DSTP. Number of bytes remaining is put in the third argument, - i.e. in LEN. This number may vary from machine to machine. */ - - WORD_COPY_FWD (dstp, srcp, len, len); - - /* Fall out and copy the tail. */ - } - - /* There are just a few bytes to copy. Use byte memory operations. */ - BYTE_COPY_FWD (dstp, srcp, len); - - return (void *) dstp; -} diff --git a/debug/memset_chk.c b/debug/memset_chk.c deleted file mode 100644 index d6206ff..0000000 --- a/debug/memset_chk.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 1991, 1997, 2003, 2004, 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <string.h> -#include <memcopy.h> - -void * -__memset_chk (dstpp, c, len, dstlen) - void *dstpp; - int c; - size_t len; - size_t dstlen; -{ - if (__builtin_expect (dstlen < len, 0)) - __chk_fail (); - - long int dstp = (long int) dstpp; - - if (len >= 8) - { - size_t xlen; - op_t cccc; - - cccc = (unsigned char) c; - cccc |= cccc << 8; - cccc |= cccc << 16; - if (OPSIZ > 4) - /* Do the shift in two steps to avoid warning if long has 32 bits. */ - cccc |= (cccc << 16) << 16; - - /* There are at least some bytes to set. - No need to test for LEN == 0 in this alignment loop. */ - while (dstp % OPSIZ != 0) - { - ((byte *) dstp)[0] = c; - dstp += 1; - len -= 1; - } - - /* Write 8 `op_t' per iteration until less than 8 `op_t' remain. */ - xlen = len / (OPSIZ * 8); - while (xlen > 0) - { - ((op_t *) dstp)[0] = cccc; - ((op_t *) dstp)[1] = cccc; - ((op_t *) dstp)[2] = cccc; - ((op_t *) dstp)[3] = cccc; - ((op_t *) dstp)[4] = cccc; - ((op_t *) dstp)[5] = cccc; - ((op_t *) dstp)[6] = cccc; - ((op_t *) dstp)[7] = cccc; - dstp += 8 * OPSIZ; - xlen -= 1; - } - len %= OPSIZ * 8; - - /* Write 1 `op_t' per iteration until less than OPSIZ bytes remain. */ - xlen = len / OPSIZ; - while (xlen > 0) - { - ((op_t *) dstp)[0] = cccc; - dstp += OPSIZ; - xlen -= 1; - } - len %= OPSIZ; - } - - /* Write the last few bytes. */ - while (len > 0) - { - ((byte *) dstp)[0] = c; - dstp += 1; - len -= 1; - } - - return dstpp; -} diff --git a/debug/pread64_chk.c b/debug/pread64_chk.c deleted file mode 100644 index 318579f..0000000 --- a/debug/pread64_chk.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <unistd.h> -#include <sys/param.h> - - -ssize_t -__pread64_chk (int fd, void *buf, size_t nbytes, off64_t offset, size_t buflen) -{ - if (nbytes > buflen) - __chk_fail (); - - return __libc_pread64 (fd, buf, nbytes, offset); -} diff --git a/debug/pread_chk.c b/debug/pread_chk.c deleted file mode 100644 index de111ea..0000000 --- a/debug/pread_chk.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <unistd.h> -#include <sys/param.h> - - -ssize_t -__pread_chk (int fd, void *buf, size_t nbytes, off_t offset, size_t buflen) -{ - if (nbytes > buflen) - __chk_fail (); - - return __pread (fd, buf, nbytes, offset); -} diff --git a/debug/printf_chk.c b/debug/printf_chk.c index b8f0096..86096b4 100644 --- a/debug/printf_chk.c +++ b/debug/printf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2006 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -24,7 +24,7 @@ /* Write formatted output to stdout from the format string FORMAT. */ int -___printf_chk (int flag, const char *format, ...) +__printf_chk (int flag, const char *format, ...) { va_list ap; int done; @@ -43,4 +43,3 @@ ___printf_chk (int flag, const char *format, ...) return done; } -ldbl_strong_alias (___printf_chk, __printf_chk) diff --git a/debug/ptsname_r_chk.c b/debug/ptsname_r_chk.c deleted file mode 100644 index 5f03592..0000000 --- a/debug/ptsname_r_chk.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdlib.h> - - -int -__ptsname_r_chk (int fd, char *buf, size_t buflen, size_t nreal) -{ - if (buflen > nreal) - __chk_fail (); - - return __ptsname_r (fd, buf, buflen); -} diff --git a/debug/read_chk.c b/debug/read_chk.c deleted file mode 100644 index da2bc94..0000000 --- a/debug/read_chk.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <unistd.h> -#include <sys/param.h> -#ifdef HAVE_INLINED_SYSCALLS -# include <errno.h> -# include <sysdep.h> -#endif - - -ssize_t -__read_chk (int fd, void *buf, size_t nbytes, size_t buflen) -{ - if (nbytes > buflen) - __chk_fail (); - -#ifdef HAVE_INLINED_SYSCALLS - return INLINE_SYSCALL (read, 3, fd, buf, nbytes); -#else - return __read (fd, buf, nbytes); -#endif -} diff --git a/debug/readlink_chk.c b/debug/readlink_chk.c deleted file mode 100644 index ac18ee2..0000000 --- a/debug/readlink_chk.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <unistd.h> -#include <sys/param.h> -#ifdef HAVE_INLINED_SYSCALLS -# include <errno.h> -# include <sysdep.h> -#endif - - -ssize_t -__readlink_chk (const char *path, void *buf, size_t len, size_t buflen) -{ - if (len > buflen) - __chk_fail (); - -#ifdef HAVE_INLINED_SYSCALLS - return INLINE_SYSCALL (readlink, 3, path, buf, len); -#else - return __readlink (path, buf, len); -#endif -} diff --git a/debug/readlinkat_chk.c b/debug/readlinkat_chk.c deleted file mode 100644 index eab99c0..0000000 --- a/debug/readlinkat_chk.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2006 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <unistd.h> -#include <sys/param.h> - - -ssize_t -__readlinkat_chk (int fd, const char *path, void *buf, size_t len, - size_t buflen) -{ - if (len > buflen) - __chk_fail (); - - return readlinkat (fd, path, buf, len); -} diff --git a/debug/readonly-area.c b/debug/readonly-area.c deleted file mode 100644 index 4b8172f..0000000 --- a/debug/readonly-area.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdlib.h> - -/* Return 1 if the whole area PTR .. PTR+SIZE is not writable. - Return -1 if it is writable. */ - -int -__readonly_area (const void *ptr, size_t size) -{ - /* We cannot determine in general whether memory is writable or not. - This must be handled in a system-dependent manner. to not - unconditionally break code we need to return here a positive - answer. This disables this security measure but that is the - price people have to pay for using systems without a real - implementation of this interface. */ - return 1; -} diff --git a/debug/realpath_chk.c b/debug/realpath_chk.c deleted file mode 100644 index 961aea0..0000000 --- a/debug/realpath_chk.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <limits.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - - -char * -__realpath_chk (const char *buf, char *resolved, size_t resolvedlen) -{ -#ifdef PATH_MAX - if (resolvedlen < PATH_MAX) - __chk_fail (); - - return __realpath (buf, resolved); -#else - long int pathmax =__pathconf (buf, _PC_PATH_MAX); - if (pathmax != -1) - { - /* We do have a fixed limit. */ - if (resolvedlen < pathmax) - __chk_fail (); - - return __realpath (buf, resolved); - } - - /* Since there is no fixed limit we check whether the size is large - enough. */ - char *res = __realpath (buf, NULL); - if (res != NULL) - { - size_t actlen = strlen (res) + 1; - if (actlen > resolvedlen) - __chk_fail (); - - memcpy (resolved, res, actlen); - free (res); - res = resolved; - } - - return res; -#endif -} diff --git a/debug/recv_chk.c b/debug/recv_chk.c deleted file mode 100644 index 479ebdf..0000000 --- a/debug/recv_chk.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sys/param.h> -#include <sys/socket.h> - - -ssize_t -__recv_chk (int fd, void *buf, size_t n, size_t buflen, int flags) -{ - if (n > buflen) - __chk_fail (); - - return __recv (fd, buf, n, flags); -} diff --git a/debug/recvfrom_chk.c b/debug/recvfrom_chk.c deleted file mode 100644 index 9790a15..0000000 --- a/debug/recvfrom_chk.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sys/param.h> -#include <sys/socket.h> - - -ssize_t -__recvfrom_chk (int fd, void *buf, size_t n, size_t buflen, int flags, - __SOCKADDR_ARG addr, socklen_t *addr_len) -{ - if (n > buflen) - __chk_fail (); - - return __recvfrom (fd, buf, n, flags, addr, addr_len); -} diff --git a/debug/segfault.c b/debug/segfault.c deleted file mode 100644 index f141fff..0000000 --- a/debug/segfault.c +++ /dev/null @@ -1,214 +0,0 @@ -/* Catch segmentation faults and print backtrace. - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <alloca.h> -#include <ctype.h> -#include <errno.h> -#include <execinfo.h> -#include <fcntl.h> -#include <signal.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <stdio-common/_itoa.h> -#include <ldsodefs.h> - -#include <bp-checks.h> - -/* This file defines macros to access the content of the sigcontext element - passed up by the signal handler. */ -#include <sigcontextinfo.h> - -/* Get code to possibly dump the content of all registers. */ -#include <register-dump.h> - -/* We'll use tis a lot. */ -#define WRITE_STRING(s) write (fd, s, strlen (s)) - -/* Name of the output file. */ -static const char *fname; - - -/* We better should not use `strerror' since it can call far too many - other functions which might fail. Do it here ourselves. */ -static void -write_strsignal (int fd, int signal) -{ - if (signal < 0 || signal >= _NSIG || _sys_siglist[signal] == NULL) - { - char buf[30]; - char *ptr = _itoa_word (signal, &buf[sizeof (buf)], 10, 0); - WRITE_STRING ("signal "); - write (fd, buf, &buf[sizeof (buf)] - ptr); - } - else - WRITE_STRING (_sys_siglist[signal]); -} - - -/* This function is called when a segmentation fault is caught. The system - is in an instable state now. This means especially that malloc() might - not work anymore. */ -static void -catch_segfault (int signal, SIGCONTEXT ctx) -{ - int fd, cnt, i; - void **arr; - struct sigaction sa; - uintptr_t pc; - - /* This is the name of the file we are writing to. If none is given - or we cannot write to this file write to stderr. */ - fd = 2; - if (fname != NULL) - { - fd = open (fname, O_TRUNC | O_WRONLY | O_CREAT, 0666); - if (fd == -1) - fd = 2; - } - - WRITE_STRING ("*** "); - write_strsignal (fd, signal); - WRITE_STRING ("\n"); - -#ifdef REGISTER_DUMP - REGISTER_DUMP; -#endif - - WRITE_STRING ("\nBacktrace:\n"); - - /* Get the backtrace. */ - arr = alloca (256 * sizeof (void *)); - cnt = backtrace (arr, 256); - - /* Now try to locate the PC from signal context in the backtrace. - Normally it will be found at arr[2], but it might appear later - if there were some signal handler wrappers. Allow a few bytes - difference to cope with as many arches as possible. */ - pc = (uintptr_t) GET_PC (ctx); - for (i = 0; i < cnt; ++i) - if ((uintptr_t) arr[i] >= pc - 16 && (uintptr_t) arr[i] <= pc + 16) - break; - - /* If we haven't found it, better dump full backtrace even including - the signal handler frames instead of not dumping anything. */ - if (i == cnt) - i = 0; - - /* Now generate nicely formatted output. */ - __backtrace_symbols_fd (arr + i, cnt - i, fd); - -#ifdef HAVE_PROC_SELF - /* Now the link map. */ - int mapfd = open ("/proc/self/maps", O_RDONLY); - if (mapfd != -1) - { - write (fd, "\nMemory map:\n\n", 14); - - char buf[256]; - ssize_t n; - - while ((n = TEMP_FAILURE_RETRY (read (mapfd, buf, sizeof (buf)))) > 0) - TEMP_FAILURE_RETRY (write (fd, buf, n)); - - close (mapfd); - } -#endif - - /* Pass on the signal (so that a core file is produced). */ - sa.sa_handler = SIG_DFL; - sigemptyset (&sa.sa_mask); - sa.sa_flags = 0; - sigaction (signal, &sa, NULL); - raise (signal); -} - - -static void -__attribute__ ((constructor)) -install_handler (void) -{ - struct sigaction sa; - const char *sigs = getenv ("SEGFAULT_SIGNALS"); - const char *name; - - sa.sa_handler = (void *) catch_segfault; - sigemptyset (&sa.sa_mask); - sa.sa_flags = SA_RESTART; - - /* Maybe we are expected to use an alternative stack. */ - if (getenv ("SEGFAULT_USE_ALTSTACK") != 0) - { - void *stack_mem = malloc (2 * SIGSTKSZ); - struct sigaltstack ss; - - if (stack_mem != NULL) - { - ss.ss_sp = stack_mem; - ss.ss_flags = 0; - ss.ss_size = 2 * SIGSTKSZ; - - if (sigaltstack (&ss, NULL) == 0) - sa.sa_flags |= SA_ONSTACK; - } - } - - if (sigs == NULL) - sigaction (SIGSEGV, &sa, NULL); - else if (sigs[0] == '\0') - /* Do not do anything. */ - return; - else - { - const char *where; - int all = __strcasecmp (sigs, "all") == 0; - -#define INSTALL_FOR_SIG(sig, name) \ - where = __strcasestr (sigs, name); \ - if (all || (where != NULL \ - && (where == sigs || !isalnum (where[-1])) \ - && !isalnum (where[sizeof (name) - 1]))) \ - sigaction (sig, &sa, NULL); - - INSTALL_FOR_SIG (SIGSEGV, "segv"); - INSTALL_FOR_SIG (SIGILL, "ill"); -#ifdef SIGBUS - INSTALL_FOR_SIG (SIGBUS, "bus"); -#endif -#ifdef SIGSTKFLT - INSTALL_FOR_SIG (SIGSTKFLT, "stkflt"); -#endif - INSTALL_FOR_SIG (SIGABRT, "abrt"); - INSTALL_FOR_SIG (SIGFPE, "fpe"); - } - - /* Preserve the output file name if there is any given. */ - name = getenv ("SEGFAULT_OUTPUT_NAME"); - if (name != NULL && name[0] != '\0') - { - int ret = access (name, R_OK | W_OK); - - if (ret == 0 || (ret == -1 && errno == ENOENT)) - fname = __strdup (name); - } -} diff --git a/debug/snprintf_chk.c b/debug/snprintf_chk.c index 315d47c..5a77afe 100644 --- a/debug/snprintf_chk.c +++ b/debug/snprintf_chk.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1991, 1995, 1997, 1998, 2004, 2006 - Free Software Foundation, Inc. +/* Copyright (C) 1991, 1995, 1997, 1998, 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 @@ -17,7 +16,6 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <libioP.h> #include <stdarg.h> #include <stdio.h> @@ -26,8 +24,8 @@ string FORMAT, writing no more than MAXLEN characters. */ /* VARARGS5 */ int -___snprintf_chk (char *s, size_t maxlen, int flags, size_t slen, - const char *format, ...) +__snprintf_chk (char *s, size_t maxlen, int flags, size_t slen, + const char *format, ...) { va_list arg; int done; @@ -38,4 +36,3 @@ ___snprintf_chk (char *s, size_t maxlen, int flags, size_t slen, return done; } -ldbl_strong_alias (___snprintf_chk, __snprintf_chk) diff --git a/debug/sprintf_chk.c b/debug/sprintf_chk.c index 658c0cc..d141633 100644 --- a/debug/sprintf_chk.c +++ b/debug/sprintf_chk.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1991, 1995, 1997, 1998, 2002, 2004, 2006 - Free Software Foundation, Inc. +/* Copyright (C) 1991,1995,1997,1998,2002,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 @@ -17,14 +16,13 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <libioP.h> #include <stdarg.h> #include <stdio.h> /* Write formatted output into S, according to the format string FORMAT. */ /* VARARGS4 */ int -___sprintf_chk (char *s, int flags, size_t slen, const char *format, ...) +__sprintf_chk (char *s, int flags, size_t slen, const char *format, ...) { va_list arg; int done; @@ -35,4 +33,3 @@ ___sprintf_chk (char *s, int flags, size_t slen, const char *format, ...) return done; } -ldbl_strong_alias (___sprintf_chk, __sprintf_chk) diff --git a/debug/stack_chk_fail.c b/debug/stack_chk_fail.c deleted file mode 100644 index 298b323..0000000 --- a/debug/stack_chk_fail.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdio.h> -#include <stdlib.h> - - -extern char **__libc_argv attribute_hidden; - -void -__attribute__ ((noreturn)) -__stack_chk_fail (void) -{ - /* The loop is added only to keep gcc happy. */ - while (1) - __libc_message (1, "*** stack smashing detected ***: %s terminated\n", - __libc_argv[0] ?: "<unknown>"); -} diff --git a/debug/stack_chk_fail_local.c b/debug/stack_chk_fail_local.c deleted file mode 100644 index de0de8f..0000000 --- a/debug/stack_chk_fail_local.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sys/cdefs.h> - -extern void __stack_chk_fail (void) __attribute__ ((noreturn)); - -/* On some architectures, this helps needless PIC pointer setup - that would be needed just for the __stack_chk_fail call. */ - -void __attribute__ ((noreturn)) attribute_hidden -__stack_chk_fail_local (void) -{ - __stack_chk_fail (); -} diff --git a/debug/stpcpy_chk.c b/debug/stpcpy_chk.c deleted file mode 100644 index dacda01..0000000 --- a/debug/stpcpy_chk.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1992, 1995, 1997, 2002, 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#include <string.h> - - -/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ -char * -__stpcpy_chk (dest, src, destlen) - char *dest; - const char *src; - size_t destlen; -{ - register char *d = dest; - register const char *s = src; - - do - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - *d++ = *s; - } - while (*s++ != '\0'); - - return d - 1; -} diff --git a/debug/stpncpy_chk.c b/debug/stpncpy_chk.c deleted file mode 100644 index d136339..0000000 --- a/debug/stpncpy_chk.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 1993,1995,1996,1997,2002,2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* This is almost copied from strncpy.c, written by Torbjorn Granlund. */ - -#include <string.h> - - -/* Copy no more than N characters of SRC to DEST, returning the address of - the terminating '\0' in DEST, if any, or else DEST + N. */ -char * -__stpncpy_chk (char *dest, const char *src, size_t n, size_t destlen) -{ - char c; - char *s = dest; - - if (__builtin_expect (destlen < n, 0)) - __chk_fail (); - - if (n >= 4) - { - size_t n4 = n >> 2; - - for (;;) - { - c = *src++; - *dest++ = c; - if (c == '\0') - break; - c = *src++; - *dest++ = c; - if (c == '\0') - break; - c = *src++; - *dest++ = c; - if (c == '\0') - break; - c = *src++; - *dest++ = c; - if (c == '\0') - break; - if (--n4 == 0) - goto last_chars; - } - n -= dest - s; - goto zero_fill; - } - - last_chars: - n &= 3; - if (n == 0) - return dest; - - for (;;) - { - c = *src++; - --n; - *dest++ = c; - if (c == '\0') - break; - if (n == 0) - return dest; - } - - zero_fill: - while (n-- > 0) - dest[n] = '\0'; - - return dest - 1; -} diff --git a/debug/strcat_chk.c b/debug/strcat_chk.c deleted file mode 100644 index b3fb347..0000000 --- a/debug/strcat_chk.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 1991, 1997, 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <string.h> -#include <memcopy.h> - - -/* Append SRC on the end of DEST. */ -char * -__strcat_chk (dest, src, destlen) - char *dest; - const char *src; - size_t destlen; -{ - char *s1 = dest; - const char *s2 = src; - reg_char c; - - /* Find the end of the string. */ - do - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *s1++; - } - while (c != '\0'); - - /* Make S1 point before the next character, so we can increment - it while memory is read (wins on pipelined cpus). */ - ++destlen; - s1 -= 2; - - do - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *s2++; - *++s1 = c; - } - while (c != '\0'); - - return dest; -} diff --git a/debug/strcpy_chk.c b/debug/strcpy_chk.c deleted file mode 100644 index a4d909f..0000000 --- a/debug/strcpy_chk.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 1991, 1997, 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stddef.h> -#include <string.h> -#include <memcopy.h> - -#undef strcpy - -/* Copy SRC to DEST with checking of destination buffer overflow. */ -char * -__strcpy_chk (dest, src, destlen) - char *dest; - const char *src; - size_t destlen; -{ - reg_char c; - char *s = (char *) src; - const ptrdiff_t off = dest - s; - - while (__builtin_expect (destlen >= 4, 0)) - { - c = s[0]; - s[off] = c; - if (c == '\0') - return dest; - c = s[1]; - s[off + 1] = c; - if (c == '\0') - return dest; - c = s[2]; - s[off + 2] = c; - if (c == '\0') - return dest; - c = s[3]; - s[off + 3] = c; - if (c == '\0') - return dest; - destlen -= 4; - s += 4; - } - - do - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *s; - *(s++ + off) = c; - } - while (c != '\0'); - - return dest; -} diff --git a/debug/strncat_chk.c b/debug/strncat_chk.c deleted file mode 100644 index 953b435..0000000 --- a/debug/strncat_chk.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 1991, 1997, 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <string.h> - -#include <memcopy.h> - - -char * -__strncat_chk (s1, s2, n, s1len) - char *s1; - const char *s2; - size_t n; - size_t s1len; -{ - reg_char c; - char *s = s1; - - /* Find the end of S1. */ - do - { - if (__builtin_expect (s1len-- == 0, 0)) - __chk_fail (); - c = *s1++; - } - while (c != '\0'); - - /* Make S1 point before next character, so we can increment - it while memory is read (wins on pipelined cpus). */ - ++s1len; - s1 -= 2; - - if (n >= 4) - { - size_t n4 = n >> 2; - do - { - if (__builtin_expect (s1len-- == 0, 0)) - __chk_fail (); - c = *s2++; - *++s1 = c; - if (c == '\0') - return s; - if (__builtin_expect (s1len-- == 0, 0)) - __chk_fail (); - c = *s2++; - *++s1 = c; - if (c == '\0') - return s; - if (__builtin_expect (s1len-- == 0, 0)) - __chk_fail (); - c = *s2++; - *++s1 = c; - if (c == '\0') - return s; - if (__builtin_expect (s1len-- == 0, 0)) - __chk_fail (); - c = *s2++; - *++s1 = c; - if (c == '\0') - return s; - } while (--n4 > 0); - n &= 3; - } - - while (n > 0) - { - if (__builtin_expect (s1len-- == 0, 0)) - __chk_fail (); - c = *s2++; - *++s1 = c; - if (c == '\0') - return s; - n--; - } - - if (c != '\0') - { - if (__builtin_expect (s1len-- == 0, 0)) - __chk_fail (); - *++s1 = '\0'; - } - - return s; -} diff --git a/debug/strncpy_chk.c b/debug/strncpy_chk.c deleted file mode 100644 index bdede77..0000000 --- a/debug/strncpy_chk.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 1991, 1997, 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <string.h> -#include <memcopy.h> - - -char * -__strncpy_chk (s1, s2, n, s1len) - char *s1; - const char *s2; - size_t n; - size_t s1len; -{ - reg_char c; - char *s = s1; - - if (__builtin_expect (s1len < n, 0)) - __chk_fail (); - - --s1; - - if (n >= 4) - { - size_t n4 = n >> 2; - - for (;;) - { - c = *s2++; - *++s1 = c; - if (c == '\0') - break; - c = *s2++; - *++s1 = c; - if (c == '\0') - break; - c = *s2++; - *++s1 = c; - if (c == '\0') - break; - c = *s2++; - *++s1 = c; - if (c == '\0') - break; - if (--n4 == 0) - goto last_chars; - } - n = n - (s1 - s) - 1; - if (n == 0) - return s; - goto zero_fill; - } - - last_chars: - n &= 3; - if (n == 0) - return s; - - do - { - c = *s2++; - *++s1 = c; - if (--n == 0) - return s; - } - while (c != '\0'); - - zero_fill: - do - *++s1 = '\0'; - while (--n > 0); - - return s; -} diff --git a/debug/swprintf_chk.c b/debug/swprintf_chk.c deleted file mode 100644 index 554cbe6..0000000 --- a/debug/swprintf_chk.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1991,1995,1997,1998,1999,2000,2003,2005 - 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdarg.h> -#include <wchar.h> - -/* Write formatted output into S, according to the format string FORMAT. */ -/* VARARGS5 */ -int -__swprintf_chk (wchar_t *s, size_t n, int flag, size_t s_len, - const wchar_t *format, ...) -{ - va_list arg; - int done; - - va_start (arg, format); - done = __vswprintf_chk (s, n, flag, s_len, format, arg); - va_end (arg); - - return done; -} diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c index c450744..0df660d 100644 --- a/debug/tst-chk1.c +++ b/debug/tst-chk1.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. @@ -17,12 +17,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -/* Hack: make sure GCC doesn't know __chk_fail () will not return. */ -#define __noreturn__ - -#include <assert.h> #include <fcntl.h> -#include <locale.h> #include <paths.h> #include <setjmp.h> #include <signal.h> @@ -30,9 +25,6 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> -#include <wchar.h> -#include <sys/socket.h> -#include <sys/un.h> char *temp_filename; static void do_prepare (void); @@ -77,20 +69,13 @@ handler (int sig) } char buf[10]; -wchar_t wbuf[10]; volatile size_t l0; volatile char *p; -volatile wchar_t *wp; const char *str1 = "JIHGFEDCBA"; const char *str2 = "F"; const char *str3 = "%s%n%s%n"; const char *str4 = "Hello, "; const char *str5 = "World!\n"; -const wchar_t *wstr1 = L"JIHGFEDCBA"; -const wchar_t *wstr2 = L"F"; -const wchar_t *wstr3 = L"%s%n%s%n"; -const wchar_t *wstr4 = L"Hello, "; -const wchar_t *wstr5 = L"World!\n"; char buf2[10] = "%s"; int num1 = 67; int num2 = 987654; @@ -135,7 +120,6 @@ do_test (void) setenv ("LIBC_FATAL_STDERR_", "1", 1); struct A { char buf1[9]; char buf2[1]; } a; - struct wA { wchar_t buf1[9]; wchar_t buf2[1]; } wa; printf ("Test checking routines at fortify level %d\n", #ifdef __USE_FORTIFY_LEVEL @@ -151,8 +135,7 @@ do_test (void) if (memcmp (buf, "aabcdefghi", 10)) FAIL (); - if (mempcpy (buf + 5, "abcde", 5) != buf + 10 - || memcmp (buf, "aabcdabcde", 10)) + if (mempcpy (buf + 5, "abcde", 5) != buf + 10 || memcmp (buf, "aabcdabcde", 10)) FAIL (); memset (buf + 8, 'j', 2); @@ -183,8 +166,7 @@ do_test (void) if (memcmp (buf, "aabcdefghi", 10)) FAIL (); - if (mempcpy (buf + 5, "abcde", l0 + 5) != buf + 10 - || memcmp (buf, "aabcdabcde", 10)) + if (mempcpy (buf + 5, "abcde", l0 + 5) != buf + 10 || memcmp (buf, "aabcdabcde", 10)) FAIL (); memset (buf + 8, 'j', l0 + 2); @@ -202,24 +184,20 @@ do_test (void) if (memcmp (buf, "aabcEDX\0\0", 10)) FAIL (); - if (stpncpy (buf + 5, "cd", l0 + 5) != buf + 7 - || memcmp (buf, "aabcEcd\0\0", 10)) - FAIL (); - - if (sprintf (buf + 7, "%d", num1) != 2 || memcmp (buf, "aabcEcd67", 10)) + if (sprintf (buf + 7, "%d", num1) != 2 || memcmp (buf, "aabcEDX67", 10)) FAIL (); - if (snprintf (buf + 7, 3, "%d", num2) != 6 || memcmp (buf, "aabcEcd98", 10)) + if (snprintf (buf + 7, 3, "%d", num2) != 6 || memcmp (buf, "aabcEDX98", 10)) FAIL (); buf[l0 + 8] = '\0'; strcat (buf, "A"); - if (memcmp (buf, "aabcEcd9A", 10)) + if (memcmp (buf, "aabcEDX9A", 10)) FAIL (); buf[l0 + 7] = '\0'; strncat (buf, "ZYXWV", l0 + 2); - if (memcmp (buf, "aabcEcdZY", 10)) + if (memcmp (buf, "aabcEDXZY", 10)) FAIL (); memcpy (a.buf1, "abcdefghij", l0 + 10); @@ -235,7 +213,7 @@ do_test (void) if (memcmp (a.buf1, "aabcdabcjj", 10)) FAIL (); -#if __USE_FORTIFY_LEVEL < 2 || !__GNUC_PREREQ (4, 0) +#if __USE_FORTIFY_LEVEL < 2 /* The following tests are supposed to crash with -D_FORTIFY_SOURCE=2 and sufficient GCC support, as the string operations overflow from a.buf1 into a.buf2. */ @@ -243,16 +221,14 @@ do_test (void) if (memcmp (a.buf1, "aabcEDCBA", 10)) FAIL (); - if (stpcpy (a.buf1 + 8, str2) != a.buf1 + 9 - || memcmp (a.buf1, "aabcEDCBF", 10)) + if (stpcpy (a.buf1 + 8, str2) != a.buf1 + 9 || memcmp (a.buf1, "aabcEDCBF", 10)) FAIL (); strncpy (a.buf1 + 6, "X", l0 + 4); if (memcmp (a.buf1, "aabcEDX\0\0", 10)) FAIL (); - if (sprintf (a.buf1 + 7, "%d", num1) != 2 - || memcmp (a.buf1, "aabcEDX67", 10)) + if (sprintf (a.buf1 + 7, "%d", num1) != 2 || memcmp (a.buf1, "aabcEDX67", 10)) FAIL (); if (snprintf (a.buf1 + 7, 3, "%d", num2) != 6 @@ -303,10 +279,6 @@ do_test (void) CHK_FAIL_END CHK_FAIL_START - stpncpy (buf + 6, "cd", l0 + 5); - CHK_FAIL_END - - CHK_FAIL_START sprintf (buf + 8, "%d", num1); CHK_FAIL_END @@ -340,7 +312,7 @@ do_test (void) memset (a.buf1 + 9, 'j', l0 + 2); CHK_FAIL_END -#if __USE_FORTIFY_LEVEL >= 2 && __GNUC_PREREQ (4, 0) +#if __USE_FORTIFY_LEVEL >= 2 # define O 0 #else # define O 1 @@ -377,219 +349,6 @@ do_test (void) CHK_FAIL_END #endif - - /* These ops can be done without runtime checking of object size. */ - wmemcpy (wbuf, L"abcdefghij", 10); - wmemmove (wbuf + 1, wbuf, 9); - if (wmemcmp (wbuf, L"aabcdefghi", 10)) - FAIL (); - - if (wmempcpy (wbuf + 5, L"abcde", 5) != wbuf + 10 - || wmemcmp (wbuf, L"aabcdabcde", 10)) - FAIL (); - - wmemset (wbuf + 8, L'j', 2); - if (wmemcmp (wbuf, L"aabcdabcjj", 10)) - FAIL (); - - wcscpy (wbuf + 4, L"EDCBA"); - if (wmemcmp (wbuf, L"aabcEDCBA", 10)) - FAIL (); - - if (wcpcpy (wbuf + 8, L"F") != wbuf + 9 || wmemcmp (wbuf, L"aabcEDCBF", 10)) - FAIL (); - - wcsncpy (wbuf + 6, L"X", 4); - if (wmemcmp (wbuf, L"aabcEDX\0\0", 10)) - FAIL (); - - if (swprintf (wbuf + 7, 3, L"%ls", L"987654") >= 0 - || wmemcmp (wbuf, L"aabcEDX98", 10)) - FAIL (); - - if (swprintf (wbuf + 7, 3, L"64") != 2 - || wmemcmp (wbuf, L"aabcEDX64", 10)) - FAIL (); - - /* These ops need runtime checking, but shouldn't __chk_fail. */ - wmemcpy (wbuf, L"abcdefghij", l0 + 10); - wmemmove (wbuf + 1, wbuf, l0 + 9); - if (wmemcmp (wbuf, L"aabcdefghi", 10)) - FAIL (); - - if (wmempcpy (wbuf + 5, L"abcde", l0 + 5) != wbuf + 10 - || wmemcmp (wbuf, L"aabcdabcde", 10)) - FAIL (); - - wmemset (wbuf + 8, L'j', l0 + 2); - if (wmemcmp (wbuf, L"aabcdabcjj", 10)) - FAIL (); - - wcscpy (wbuf + 4, wstr1 + 5); - if (wmemcmp (wbuf, L"aabcEDCBA", 10)) - FAIL (); - - if (wcpcpy (wbuf + 8, wstr2) != wbuf + 9 || wmemcmp (wbuf, L"aabcEDCBF", 10)) - FAIL (); - - wcsncpy (wbuf + 6, L"X", l0 + 4); - if (wmemcmp (wbuf, L"aabcEDX\0\0", 10)) - FAIL (); - - if (wcpncpy (wbuf + 5, L"cd", l0 + 5) != wbuf + 7 - || wmemcmp (wbuf, L"aabcEcd\0\0", 10)) - FAIL (); - - if (swprintf (wbuf + 7, 3, L"%d", num2) >= 0 - || wmemcmp (wbuf, L"aabcEcd98", 10)) - FAIL (); - - wbuf[l0 + 8] = L'\0'; - wcscat (wbuf, L"A"); - if (wmemcmp (wbuf, L"aabcEcd9A", 10)) - FAIL (); - - wbuf[l0 + 7] = L'\0'; - wcsncat (wbuf, L"ZYXWV", l0 + 2); - if (wmemcmp (wbuf, L"aabcEcdZY", 10)) - FAIL (); - - wmemcpy (wa.buf1, L"abcdefghij", l0 + 10); - wmemmove (wa.buf1 + 1, wa.buf1, l0 + 9); - if (wmemcmp (wa.buf1, L"aabcdefghi", 10)) - FAIL (); - - if (wmempcpy (wa.buf1 + 5, L"abcde", l0 + 5) != wa.buf1 + 10 - || wmemcmp (wa.buf1, L"aabcdabcde", 10)) - FAIL (); - - wmemset (wa.buf1 + 8, L'j', l0 + 2); - if (wmemcmp (wa.buf1, L"aabcdabcjj", 10)) - FAIL (); - -#if __USE_FORTIFY_LEVEL < 2 - /* The following tests are supposed to crash with -D_FORTIFY_SOURCE=2 - and sufficient GCC support, as the string operations overflow - from a.buf1 into a.buf2. */ - wcscpy (wa.buf1 + 4, wstr1 + 5); - if (wmemcmp (wa.buf1, L"aabcEDCBA", 10)) - FAIL (); - - if (wcpcpy (wa.buf1 + 8, wstr2) != wa.buf1 + 9 - || wmemcmp (wa.buf1, L"aabcEDCBF", 10)) - FAIL (); - - wcsncpy (wa.buf1 + 6, L"X", l0 + 4); - if (wmemcmp (wa.buf1, L"aabcEDX\0\0", 10)) - FAIL (); - - if (swprintf (wa.buf1 + 7, 3, L"%d", num2) >= 0 - || wmemcmp (wa.buf1, L"aabcEDX98", 10)) - FAIL (); - - wa.buf1[l0 + 8] = L'\0'; - wcscat (wa.buf1, L"A"); - if (wmemcmp (wa.buf1, L"aabcEDX9A", 10)) - FAIL (); - - wa.buf1[l0 + 7] = L'\0'; - wcsncat (wa.buf1, L"ZYXWV", l0 + 2); - if (wmemcmp (wa.buf1, L"aabcEDXZY", 10)) - FAIL (); - -#endif - -#if __USE_FORTIFY_LEVEL >= 1 - /* Now check if all buffer overflows are caught at runtime. */ - - CHK_FAIL_START - wmemcpy (wbuf + 1, L"abcdefghij", l0 + 10); - CHK_FAIL_END - - CHK_FAIL_START - wmemmove (wbuf + 2, wbuf + 1, l0 + 9); - CHK_FAIL_END - - CHK_FAIL_START - wp = wmempcpy (wbuf + 6, L"abcde", l0 + 5); - CHK_FAIL_END - - CHK_FAIL_START - wmemset (wbuf + 9, L'j', l0 + 2); - CHK_FAIL_END - - CHK_FAIL_START - wcscpy (wbuf + 5, wstr1 + 5); - CHK_FAIL_END - - CHK_FAIL_START - wp = wcpcpy (wbuf + 9, wstr2); - CHK_FAIL_END - - CHK_FAIL_START - wcsncpy (wbuf + 7, L"X", l0 + 4); - CHK_FAIL_END - - CHK_FAIL_START - wcpncpy (wbuf + 6, L"cd", l0 + 5); - CHK_FAIL_END - - wmemcpy (wbuf, wstr1 + 2, l0 + 9); - CHK_FAIL_START - wcscat (wbuf, L"AB"); - CHK_FAIL_END - - wmemcpy (wbuf, wstr1 + 3, l0 + 8); - CHK_FAIL_START - wcsncat (wbuf, L"ZYXWV", l0 + 3); - CHK_FAIL_END - - CHK_FAIL_START - wmemcpy (wa.buf1 + 1, L"abcdefghij", l0 + 10); - CHK_FAIL_END - - CHK_FAIL_START - wmemmove (wa.buf1 + 2, wa.buf1 + 1, l0 + 9); - CHK_FAIL_END - - CHK_FAIL_START - wp = wmempcpy (wa.buf1 + 6, L"abcde", l0 + 5); - CHK_FAIL_END - - CHK_FAIL_START - wmemset (wa.buf1 + 9, L'j', l0 + 2); - CHK_FAIL_END - -#if __USE_FORTIFY_LEVEL >= 2 -# define O 0 -#else -# define O 1 -#endif - - CHK_FAIL_START - wcscpy (wa.buf1 + (O + 4), wstr1 + 5); - CHK_FAIL_END - - CHK_FAIL_START - wp = wcpcpy (wa.buf1 + (O + 8), wstr2); - CHK_FAIL_END - - CHK_FAIL_START - wcsncpy (wa.buf1 + (O + 6), L"X", l0 + 4); - CHK_FAIL_END - - wmemcpy (wa.buf1, wstr1 + (3 - O), l0 + 8 + O); - CHK_FAIL_START - wcscat (wa.buf1, L"AB"); - CHK_FAIL_END - - wmemcpy (wa.buf1, wstr1 + (4 - O), l0 + 7 + O); - CHK_FAIL_START - wcsncat (wa.buf1, L"ZYXWV", l0 + 3); - CHK_FAIL_END -#endif - - /* Now checks for %n protection. */ /* Constant literals passed directly are always ok @@ -696,121 +455,6 @@ do_test (void) CHK_FAIL_END #endif - rewind (stdin); - - if (fgets (buf, sizeof (buf), stdin) != buf - || memcmp (buf, "abcdefgh\n", 10)) - FAIL (); - if (fgets (buf, sizeof (buf), stdin) != buf || memcmp (buf, "ABCDEFGHI", 10)) - FAIL (); - - rewind (stdin); - - if (fgets (buf, l0 + sizeof (buf), stdin) != buf - || memcmp (buf, "abcdefgh\n", 10)) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - if (fgets (buf, sizeof (buf) + 1, stdin) != buf) - FAIL (); - CHK_FAIL_END - - CHK_FAIL_START - if (fgets (buf, l0 + sizeof (buf) + 1, stdin) != buf) - FAIL (); - CHK_FAIL_END -#endif - - rewind (stdin); - - if (fgets_unlocked (buf, sizeof (buf), stdin) != buf - || memcmp (buf, "abcdefgh\n", 10)) - FAIL (); - if (fgets_unlocked (buf, sizeof (buf), stdin) != buf - || memcmp (buf, "ABCDEFGHI", 10)) - FAIL (); - - rewind (stdin); - - if (fgets_unlocked (buf, l0 + sizeof (buf), stdin) != buf - || memcmp (buf, "abcdefgh\n", 10)) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - if (fgets_unlocked (buf, sizeof (buf) + 1, stdin) != buf) - FAIL (); - CHK_FAIL_END - - CHK_FAIL_START - if (fgets_unlocked (buf, l0 + sizeof (buf) + 1, stdin) != buf) - FAIL (); - CHK_FAIL_END -#endif - - lseek (fileno (stdin), 0, SEEK_SET); - - if (read (fileno (stdin), buf, sizeof (buf) - 1) != sizeof (buf) - 1 - || memcmp (buf, "abcdefgh\n", 9)) - FAIL (); - if (read (fileno (stdin), buf, sizeof (buf) - 1) != sizeof (buf) - 1 - || memcmp (buf, "ABCDEFGHI", 9)) - FAIL (); - - lseek (fileno (stdin), 0, SEEK_SET); - - if (read (fileno (stdin), buf, l0 + sizeof (buf) - 1) != sizeof (buf) - 1 - || memcmp (buf, "abcdefgh\n", 9)) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - if (read (fileno (stdin), buf, sizeof (buf) + 1) != sizeof (buf) + 1) - FAIL (); - CHK_FAIL_END -#endif - - if (pread (fileno (stdin), buf, sizeof (buf) - 1, sizeof (buf) - 2) - != sizeof (buf) - 1 - || memcmp (buf, "\nABCDEFGH", 9)) - FAIL (); - if (pread (fileno (stdin), buf, sizeof (buf) - 1, 0) != sizeof (buf) - 1 - || memcmp (buf, "abcdefgh\n", 9)) - FAIL (); - if (pread (fileno (stdin), buf, l0 + sizeof (buf) - 1, sizeof (buf) - 3) - != sizeof (buf) - 1 - || memcmp (buf, "h\nABCDEFG", 9)) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - if (pread (fileno (stdin), buf, sizeof (buf) + 1, 2 * sizeof (buf)) - != sizeof (buf) + 1) - FAIL (); - CHK_FAIL_END -#endif - - if (pread64 (fileno (stdin), buf, sizeof (buf) - 1, sizeof (buf) - 2) - != sizeof (buf) - 1 - || memcmp (buf, "\nABCDEFGH", 9)) - FAIL (); - if (pread64 (fileno (stdin), buf, sizeof (buf) - 1, 0) != sizeof (buf) - 1 - || memcmp (buf, "abcdefgh\n", 9)) - FAIL (); - if (pread64 (fileno (stdin), buf, l0 + sizeof (buf) - 1, sizeof (buf) - 3) - != sizeof (buf) - 1 - || memcmp (buf, "h\nABCDEFG", 9)) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - if (pread64 (fileno (stdin), buf, sizeof (buf) + 1, 2 * sizeof (buf)) - != sizeof (buf) + 1) - FAIL (); - CHK_FAIL_END -#endif - if (freopen (temp_filename, "r", stdin) == NULL) { puts ("could not open temporary file"); @@ -847,474 +491,5 @@ do_test (void) snprintf (buf, sizeof (buf), "%3$d\n", 1, 2, 3, 4); CHK_FAIL2_END - int sp[2]; - if (socketpair (PF_UNIX, SOCK_STREAM, 0, sp)) - FAIL (); - else - { - const char *sendstr = "abcdefgh\nABCDEFGH\n0123456789\n"; - if (send (sp[0], sendstr, strlen (sendstr), 0) != strlen (sendstr)) - FAIL (); - - char recvbuf[12]; - if (recv (sp[1], recvbuf, sizeof recvbuf, MSG_PEEK) - != sizeof recvbuf - || memcmp (recvbuf, sendstr, sizeof recvbuf) != 0) - FAIL (); - - if (recv (sp[1], recvbuf + 6, l0 + sizeof recvbuf - 7, MSG_PEEK) - != sizeof recvbuf - 7 - || memcmp (recvbuf + 6, sendstr, sizeof recvbuf - 7) != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - if (recv (sp[1], recvbuf + 1, sizeof recvbuf, MSG_PEEK) - != sizeof recvbuf) - FAIL (); - CHK_FAIL_END - - CHK_FAIL_START - if (recv (sp[1], recvbuf + 4, l0 + sizeof recvbuf - 3, MSG_PEEK) - != sizeof recvbuf - 3) - FAIL (); - CHK_FAIL_END -#endif - - socklen_t sl; - struct sockaddr_un sa_un; - - sl = sizeof (sa_un); - if (recvfrom (sp[1], recvbuf, sizeof recvbuf, MSG_PEEK, &sa_un, &sl) - != sizeof recvbuf - || memcmp (recvbuf, sendstr, sizeof recvbuf) != 0) - FAIL (); - - sl = sizeof (sa_un); - if (recvfrom (sp[1], recvbuf + 6, l0 + sizeof recvbuf - 7, MSG_PEEK, - &sa_un, &sl) != sizeof recvbuf - 7 - || memcmp (recvbuf + 6, sendstr, sizeof recvbuf - 7) != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - sl = sizeof (sa_un); - if (recvfrom (sp[1], recvbuf + 1, sizeof recvbuf, MSG_PEEK, &sa_un, &sl) - != sizeof recvbuf) - FAIL (); - CHK_FAIL_END - - CHK_FAIL_START - sl = sizeof (sa_un); - if (recvfrom (sp[1], recvbuf + 4, l0 + sizeof recvbuf - 3, MSG_PEEK, - &sa_un, &sl) != sizeof recvbuf - 3) - FAIL (); - CHK_FAIL_END -#endif - - close (sp[0]); - close (sp[1]); - } - - char fname[] = "/tmp/tst-chk1-dir-XXXXXX\0foo"; - char *enddir = strchr (fname, '\0'); - if (mkdtemp (fname) == NULL) - { - printf ("mkdtemp failed: %m\n"); - return 1; - } - *enddir = '/'; - if (symlink ("bar", fname) != 0) - FAIL (); - - char readlinkbuf[4]; - if (readlink (fname, readlinkbuf, 4) != 3 - || memcmp (readlinkbuf, "bar", 3) != 0) - FAIL (); - if (readlink (fname, readlinkbuf + 1, l0 + 3) != 3 - || memcmp (readlinkbuf, "bbar", 4) != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - if (readlink (fname, readlinkbuf + 2, l0 + 3) != 3) - FAIL (); - CHK_FAIL_END - - CHK_FAIL_START - if (readlink (fname, readlinkbuf + 3, 4) != 3) - FAIL (); - CHK_FAIL_END -#endif - - int tmpfd = open ("/tmp", O_RDONLY | O_DIRECTORY); - if (tmpfd < 0) - FAIL (); - - if (readlinkat (tmpfd, fname + sizeof ("/tmp/") - 1, readlinkbuf, 4) != 3 - || memcmp (readlinkbuf, "bar", 3) != 0) - FAIL (); - if (readlinkat (tmpfd, fname + sizeof ("/tmp/") - 1, readlinkbuf + 1, - l0 + 3) != 3 - || memcmp (readlinkbuf, "bbar", 4) != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - if (readlinkat (tmpfd, fname + sizeof ("/tmp/") - 1, readlinkbuf + 2, - l0 + 3) != 3) - FAIL (); - CHK_FAIL_END - - CHK_FAIL_START - if (readlinkat (tmpfd, fname + sizeof ("/tmp/") - 1, readlinkbuf + 3, - 4) != 3) - FAIL (); - CHK_FAIL_END -#endif - - close (tmpfd); - - char *cwd1 = getcwd (NULL, 0); - if (cwd1 == NULL) - FAIL (); - - char *cwd2 = getcwd (NULL, 250); - if (cwd2 == NULL) - FAIL (); - - if (cwd1 && cwd2) - { - if (strcmp (cwd1, cwd2) != 0) - FAIL (); - - *enddir = '\0'; - if (chdir (fname)) - FAIL (); - - char *cwd3 = getcwd (NULL, 0); - if (cwd3 == NULL) - FAIL (); - if (strcmp (fname, cwd3) != 0) - printf ("getcwd after chdir is '%s' != '%s'," - "get{c,}wd tests skipped\n", cwd3, fname); - else - { - char getcwdbuf[sizeof fname - 3]; - - char *cwd4 = getcwd (getcwdbuf, sizeof getcwdbuf); - if (cwd4 != getcwdbuf - || strcmp (getcwdbuf, fname) != 0) - FAIL (); - - cwd4 = getcwd (getcwdbuf + 1, l0 + sizeof getcwdbuf - 1); - if (cwd4 != getcwdbuf + 1 - || getcwdbuf[0] != fname[0] - || strcmp (getcwdbuf + 1, fname) != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - if (getcwd (getcwdbuf + 2, l0 + sizeof getcwdbuf) - != getcwdbuf + 2) - FAIL (); - CHK_FAIL_END - - CHK_FAIL_START - if (getcwd (getcwdbuf + 2, sizeof getcwdbuf) - != getcwdbuf + 2) - FAIL (); - CHK_FAIL_END -#endif - - if (getwd (getcwdbuf) != getcwdbuf - || strcmp (getcwdbuf, fname) != 0) - FAIL (); - - if (getwd (getcwdbuf + 1) != getcwdbuf + 1 - || strcmp (getcwdbuf + 1, fname) != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - if (getwd (getcwdbuf + 2) != getcwdbuf + 2) - FAIL (); - CHK_FAIL_END -#endif - } - - if (chdir (cwd1) != 0) - FAIL (); - free (cwd3); - } - - free (cwd1); - free (cwd2); - *enddir = '/'; - if (unlink (fname) != 0) - FAIL (); - - *enddir = '\0'; - if (rmdir (fname) != 0) - FAIL (); - - -#if PATH_MAX > 0 - char largebuf[PATH_MAX]; - char *realres = realpath (".", largebuf); - if (realres != largebuf) - FAIL (); - -# if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char realbuf[1]; - realres = realpath (".", realbuf); - if (realres != realbuf) - FAIL (); - CHK_FAIL_END -# endif -#endif - - if (setlocale (LC_ALL, "de_DE.UTF-8") != NULL) - { - assert (MB_CUR_MAX <= 10); - - /* First a simple test. */ - char enough[10]; - if (wctomb (enough, L'A') != 1) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - /* We know the wchar_t encoding is ISO 10646. So pick a - character which has a multibyte representation which does not - fit. */ - CHK_FAIL_START - char smallbuf[2]; - if (wctomb (smallbuf, L'\x100') != 2) - FAIL (); - CHK_FAIL_END -#endif - - mbstate_t s; - memset (&s, '\0', sizeof (s)); - if (wcrtomb (enough, L'D', &s) != 1 || enough[0] != 'D') - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - /* We know the wchar_t encoding is ISO 10646. So pick a - character which has a multibyte representation which does not - fit. */ - CHK_FAIL_START - char smallbuf[2]; - if (wcrtomb (smallbuf, L'\x100', &s) != 2) - FAIL (); - CHK_FAIL_END -#endif - - wchar_t wenough[10]; - memset (&s, '\0', sizeof (s)); - const char *cp = "A"; - if (mbsrtowcs (wenough, &cp, 10, &s) != 1 - || wcscmp (wenough, L"A") != 0) - FAIL (); - - cp = "BC"; - if (mbsrtowcs (wenough, &cp, l0 + 10, &s) != 2 - || wcscmp (wenough, L"BC") != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - wchar_t wsmallbuf[2]; - cp = "ABC"; - mbsrtowcs (wsmallbuf, &cp, 10, &s); - CHK_FAIL_END -#endif - - cp = "A"; - if (mbstowcs (wenough, cp, 10) != 1 - || wcscmp (wenough, L"A") != 0) - FAIL (); - - cp = "DEF"; - if (mbstowcs (wenough, cp, l0 + 10) != 3 - || wcscmp (wenough, L"DEF") != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - wchar_t wsmallbuf[2]; - cp = "ABC"; - mbstowcs (wsmallbuf, cp, 10); - CHK_FAIL_END -#endif - - memset (&s, '\0', sizeof (s)); - cp = "ABC"; - wcscpy (wenough, L"DEF"); - if (mbsnrtowcs (wenough, &cp, 1, 10, &s) != 1 - || wcscmp (wenough, L"AEF") != 0) - FAIL (); - - cp = "IJ"; - if (mbsnrtowcs (wenough, &cp, 1, l0 + 10, &s) != 1 - || wcscmp (wenough, L"IEF") != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - wchar_t wsmallbuf[2]; - cp = "ABC"; - mbsnrtowcs (wsmallbuf, &cp, 3, 10, &s); - CHK_FAIL_END -#endif - - memset (&s, '\0', sizeof (s)); - const wchar_t *wcp = L"A"; - if (wcsrtombs (enough, &wcp, 10, &s) != 1 - || strcmp (enough, "A") != 0) - FAIL (); - - wcp = L"BC"; - if (wcsrtombs (enough, &wcp, l0 + 10, &s) != 2 - || strcmp (enough, "BC") != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char smallbuf[2]; - wcp = L"ABC"; - wcsrtombs (smallbuf, &wcp, 10, &s); - CHK_FAIL_END -#endif - - memset (enough, 'Z', sizeof (enough)); - wcp = L"EF"; - if (wcstombs (enough, wcp, 10) != 2 - || strcmp (enough, "EF") != 0) - FAIL (); - - wcp = L"G"; - if (wcstombs (enough, wcp, l0 + 10) != 1 - || strcmp (enough, "G") != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char smallbuf[2]; - wcp = L"ABC"; - wcstombs (smallbuf, wcp, 10); - CHK_FAIL_END -#endif - - memset (&s, '\0', sizeof (s)); - wcp = L"AB"; - if (wcsnrtombs (enough, &wcp, 1, 10, &s) != 1 - || strcmp (enough, "A") != 0) - FAIL (); - - wcp = L"BCD"; - if (wcsnrtombs (enough, &wcp, 1, l0 + 10, &s) != 1 - || strcmp (enough, "B") != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char smallbuf[2]; - wcp = L"ABC"; - wcsnrtombs (smallbuf, &wcp, 3, 10, &s); - CHK_FAIL_END -#endif - } - else - { - puts ("cannot set locale"); - ret = 1; - } - - fd = posix_openpt (O_RDWR); - if (fd != -1) - { - char enough[1000]; - if (ptsname_r (fd, enough, sizeof (enough)) != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char smallbuf[2]; - if (ptsname_r (fd, smallbuf, sizeof (smallbuf) + 1) == 0) - FAIL (); - CHK_FAIL_END -#endif - close (fd); - } - -#if PATH_MAX > 0 - confstr (_CS_GNU_LIBC_VERSION, largebuf, sizeof (largebuf)); -# if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char smallbuf[1]; - confstr (_CS_GNU_LIBC_VERSION, smallbuf, sizeof (largebuf)); - CHK_FAIL_END -# endif -#endif - - gid_t grpslarge[5]; - int ngr = getgroups (5, grpslarge); - asm volatile ("" : : "r" (ngr)); -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char smallbuf[1]; - ngr = getgroups (5, (gid_t *) smallbuf); - asm volatile ("" : : "r" (ngr)); - CHK_FAIL_END -#endif - - fd = open (_PATH_TTY, O_RDONLY); - if (fd != -1) - { - char enough[1000]; - if (ttyname_r (fd, enough, sizeof (enough)) != 0) - FAIL (); - -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char smallbuf[2]; - if (ttyname_r (fd, smallbuf, sizeof (smallbuf) + 1) == 0) - FAIL (); - CHK_FAIL_END -#endif - close (fd); - } - - char hostnamelarge[1000]; - gethostname (hostnamelarge, sizeof (hostnamelarge)); -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char smallbuf[1]; - gethostname (smallbuf, sizeof (hostnamelarge)); - CHK_FAIL_END -#endif - - char loginlarge[1000]; - getlogin_r (loginlarge, sizeof (hostnamelarge)); -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char smallbuf[1]; - getlogin_r (smallbuf, sizeof (loginlarge)); - CHK_FAIL_END -#endif - - char domainnamelarge[1000]; - int res = getdomainname (domainnamelarge, sizeof (domainnamelarge)); - asm volatile ("" : : "r" (res)); -#if __USE_FORTIFY_LEVEL >= 1 - CHK_FAIL_START - char smallbuf[1]; - res = getdomainname (smallbuf, sizeof (domainnamelarge)); - asm volatile ("" : : "r" (res)); - CHK_FAIL_END -#endif - return ret; } diff --git a/debug/tst-lfschk1.c b/debug/tst-lfschk1.c deleted file mode 100644 index f3e6d47..0000000 --- a/debug/tst-lfschk1.c +++ /dev/null @@ -1,2 +0,0 @@ -#define _FILE_OFFSET_BITS 64 -#include "tst-chk1.c" diff --git a/debug/tst-lfschk2.c b/debug/tst-lfschk2.c deleted file mode 100644 index 95d4db1..0000000 --- a/debug/tst-lfschk2.c +++ /dev/null @@ -1,2 +0,0 @@ -#define _FILE_OFFSET_BITS 64 -#include "tst-chk2.c" diff --git a/debug/tst-lfschk3.c b/debug/tst-lfschk3.c deleted file mode 100644 index 50a1ae1..0000000 --- a/debug/tst-lfschk3.c +++ /dev/null @@ -1,2 +0,0 @@ -#define _FILE_OFFSET_BITS 64 -#include "tst-chk3.c" diff --git a/debug/ttyname_r_chk.c b/debug/ttyname_r_chk.c deleted file mode 100644 index 9b06d5a..0000000 --- a/debug/ttyname_r_chk.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <unistd.h> - - -int -__ttyname_r_chk (int fd, char *buf, size_t buflen, size_t nreal) -{ - if (buflen > nreal) - __chk_fail (); - - return __ttyname_r (fd, buf, buflen); -} diff --git a/debug/vfprintf_chk.c b/debug/vfprintf_chk.c index bd2796e..c8e7c3b 100644 --- a/debug/vfprintf_chk.c +++ b/debug/vfprintf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005, 2006 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -24,7 +24,7 @@ /* Write formatted output to FP from the format string FORMAT. */ int -___vfprintf_chk (FILE *fp, int flag, const char *format, va_list ap) +__vfprintf_chk (FILE *fp, int flag, const char *format, va_list ap) { int done; @@ -40,5 +40,3 @@ ___vfprintf_chk (FILE *fp, int flag, const char *format, va_list ap) return done; } -ldbl_hidden_def (___vfprintf_chk, __vfprintf_chk) -ldbl_strong_alias (___vfprintf_chk, __vfprintf_chk) diff --git a/debug/vfwprintf_chk.c b/debug/vfwprintf_chk.c deleted file mode 100644 index a2612d5..0000000 --- a/debug/vfwprintf_chk.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005, 2006 - 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdarg.h> -#include <wchar.h> -#include "../libio/libioP.h" - - -/* Write formatted output to FP from the format string FORMAT. */ -int -__vfwprintf_chk (FILE *fp, int flag, const wchar_t *format, va_list ap) -{ - int done; - - _IO_acquire_lock (fp); - if (flag > 0) - fp->_flags2 |= _IO_FLAGS2_FORTIFY; - - done = _IO_vfwprintf (fp, format, ap); - - if (flag > 0) - fp->_flags2 &= ~_IO_FLAGS2_FORTIFY; - _IO_release_lock (fp); - - return done; -} -libc_hidden_def (__vfwprintf_chk) diff --git a/debug/vprintf_chk.c b/debug/vprintf_chk.c index 68a63ee..1fd5bcd 100644 --- a/debug/vprintf_chk.c +++ b/debug/vprintf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2006 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -24,7 +24,7 @@ /* Write formatted output to stdout from the format string FORMAT. */ int -___vprintf_chk (int flag, const char *format, va_list ap) +__vprintf_chk (int flag, const char *format, va_list ap) { int done; @@ -40,4 +40,3 @@ ___vprintf_chk (int flag, const char *format, va_list ap) return done; } -ldbl_strong_alias (___vprintf_chk, __vprintf_chk) diff --git a/debug/vsnprintf_chk.c b/debug/vsnprintf_chk.c index c46937f..a0fd4eb 100644 --- a/debug/vsnprintf_chk.c +++ b/debug/vsnprintf_chk.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1991, 1995, 1997, 1998, 2004, 2006 - Free Software Foundation, Inc. +/* Copyright (C) 1991, 1995, 1997, 1998, 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 @@ -28,8 +27,8 @@ extern const struct _IO_jump_t _IO_strn_jumps attribute_hidden; string FORMAT, writing no more than MAXLEN characters. */ /* VARARGS5 */ int -___vsnprintf_chk (char *s, size_t maxlen, int flags, size_t slen, - const char *format, va_list args) +__vsnprintf_chk (char *s, size_t maxlen, int flags, size_t slen, + const char *format, va_list args) { /* XXX Maybe for less strict version do not fail immediately. Though, maxlen is supposed to be the size of buffer pointed @@ -68,5 +67,4 @@ ___vsnprintf_chk (char *s, size_t maxlen, int flags, size_t slen, *sf.f._sbf._f._IO_write_ptr = '\0'; return ret; } -ldbl_hidden_def (___vsnprintf_chk, __vsnprintf_chk) -ldbl_strong_alias (___vsnprintf_chk, __vsnprintf_chk) +libc_hidden_def (__vsnprintf_chk) diff --git a/debug/vsprintf_chk.c b/debug/vsprintf_chk.c index 6538064..f41c5fc 100644 --- a/debug/vsprintf_chk.c +++ b/debug/vsprintf_chk.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1994, 1997, 1999-2003, 2004, 2006 - Free Software Foundation, Inc. +/* Copyright (C) 1994, 1997, 1999-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 @@ -62,8 +61,8 @@ static const struct _IO_jump_t _IO_str_chk_jumps = int -___vsprintf_chk (char *s, int flags, size_t slen, const char *format, - va_list args) +__vsprintf_chk (char *s, int flags, size_t slen, const char *format, + va_list args) { _IO_strfile f; int ret; @@ -89,5 +88,4 @@ ___vsprintf_chk (char *s, int flags, size_t slen, const char *format, *f._sbf._f._IO_write_ptr = '\0'; return ret; } -ldbl_hidden_def (___vsprintf_chk, __vsprintf_chk) -ldbl_strong_alias (___vsprintf_chk, __vsprintf_chk) +libc_hidden_def (__vsprintf_chk) diff --git a/debug/vswprintf_chk.c b/debug/vswprintf_chk.c deleted file mode 100644 index f9a50c6..0000000 --- a/debug/vswprintf_chk.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 1991,1995,1997,1998,2004,2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdarg.h> -#include <wchar.h> -#include "../libio/libioP.h" -#include "../libio/strfile.h" - - -/* Write formatted output into S, according to the format - string FORMAT, writing no more than MAXLEN characters. */ -/* VARARGS5 */ -int -__vswprintf_chk (wchar_t *s, size_t maxlen, int flags, size_t slen, - const wchar_t *format, va_list args) -{ - /* XXX Maybe for less strict version do not fail immediately. - Though, maxlen is supposed to be the size of buffer pointed - to by s, so a conforming program can't pass such maxlen - to *snprintf. */ - if (__builtin_expect (slen < maxlen, 0)) - __chk_fail (); - - _IO_wstrnfile sf; - struct _IO_wide_data wd; - int ret; -#ifdef _IO_MTSAFE_IO - sf.f._sbf._f._lock = NULL; -#endif - - /* We need to handle the special case where MAXLEN is 0. Use the - overflow buffer right from the start. */ - if (__builtin_expect (maxlen == 0, 0)) - /* Since we have to write at least the terminating L'\0' a buffer - length of zero always makes the function fail. */ - return -1; - - _IO_no_init (&sf.f._sbf._f, _IO_USER_LOCK, 0, &wd, &_IO_wstrn_jumps); - _IO_fwide (&sf.f._sbf._f, 1); - s[0] = L'\0'; - - /* For flags > 0 (i.e. __USE_FORTIFY_LEVEL > 1) request that %n - can only come from read-only format strings. */ - if (flags > 0) - sf.f._sbf._f._flags2 |= _IO_FLAGS2_FORTIFY; - - _IO_wstr_init_static (&sf.f._sbf._f, s, maxlen - 1, s); - ret = _IO_vfwprintf ((_IO_FILE *) &sf.f._sbf, format, args); - - if (sf.f._sbf._f._wide_data->_IO_buf_base == sf.overflow_buf) - /* ISO C99 requires swprintf/vswprintf to return an error if the - output does not fit int he provided buffer. */ - return -1; - - /* Terminate the string. */ - *sf.f._sbf._f._wide_data->_IO_write_ptr = '\0'; - - return ret; -} -libc_hidden_def (__vswprintf_chk) diff --git a/debug/vwprintf_chk.c b/debug/vwprintf_chk.c deleted file mode 100644 index 3b959b2..0000000 --- a/debug/vwprintf_chk.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005 - 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdarg.h> -#include <stdio.h> -#include <wchar.h> -#include "../libio/libioP.h" - - -/* Write formatted output to stdout from the format string FORMAT. */ -int -__vwprintf_chk (int flag, const wchar_t *format, va_list ap) -{ - int done; - - _IO_acquire_lock (stdout); - if (flag > 0) - stdout->_flags2 |= _IO_FLAGS2_FORTIFY; - - done = _IO_vfwprintf (stdout, format, ap); - - if (flag > 0) - stdout->_flags2 &= ~_IO_FLAGS2_FORTIFY; - _IO_release_lock (stdout); - - return done; -} diff --git a/debug/warning-nop.c b/debug/warning-nop.c deleted file mode 100644 index 8f2f66e..0000000 --- a/debug/warning-nop.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Dummy nop functions to elicit link-time warnings. - Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sys/cdefs.h> - -static void -nop (void) -{ -} - -/* Don't insert any other #include's before this #undef! */ - -#undef __warndecl -#define __warndecl(name, msg) \ - extern void name (void) __attribute__ ((alias ("nop"))) attribute_hidden; \ - link_warning (name, msg) - -#undef __USE_FORTIFY_LEVEL -#define __USE_FORTIFY_LEVEL 99 - -/* Following here we need an #include for each public header file - that uses __warndecl. */ - -/* Define away to avoid warnings with compilers that do not have these - builtins. */ -#define __builtin___memcpy_chk(dest, src, len, bos) NULL -#define __builtin___memmove_chk(dest, src, len, bos) NULL -#define __builtin___mempcpy_chk(dest, src, len, bos) NULL -#define __builtin___memset_chk(dest, ch, len, bos) NULL -#define __builtin___stpcpy_chk(dest, src, bos) NULL -#define __builtin___strcat_chk(dest, src, bos) NULL -#define __builtin___strcpy_chk(dest, src, bos) NULL -#define __builtin___strncat_chk(dest, src, len, bos) NULL -#define __builtin___strncpy_chk(dest, src, len, bos) NULL -#define __builtin_object_size(bos, level) 0 - -#include <string.h> diff --git a/debug/wcpcpy_chk.c b/debug/wcpcpy_chk.c deleted file mode 100644 index c48ec68..0000000 --- a/debug/wcpcpy_chk.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1996, 1997, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <wchar.h> - -#define __need_ptrdiff_t -#include <stddef.h> - - -/* Copy SRC to DEST, returning the address of the terminating L'\0' in - DEST. Check for overflows. */ -wchar_t * -__wcpcpy_chk (wchar_t *dest, const wchar_t *src, size_t destlen) -{ - wchar_t *wcp = (wchar_t *) dest - 1; - wint_t c; - const ptrdiff_t off = src - dest + 1; - - do - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = wcp[off]; - *++wcp = c; - } - while (c != L'\0'); - - return wcp; -} diff --git a/debug/wcpncpy_chk.c b/debug/wcpncpy_chk.c deleted file mode 100644 index ea13401..0000000 --- a/debug/wcpncpy_chk.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <wchar.h> - - -/* Copy no more than N wide-characters of SRC to DEST. */ -wchar_t * -__wcpncpy_chk (wchar_t *dest, const wchar_t *src, size_t n, size_t destlen) -{ - if (__builtin_expect (destlen < n, 0)) - __chk_fail (); - - /* This function is not often enough used to justify not using a - tail call. */ - return __wcpncpy (dest, src, n); -} diff --git a/debug/wcrtomb_chk.c b/debug/wcrtomb_chk.c deleted file mode 100644 index 228430f..0000000 --- a/debug/wcrtomb_chk.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <langinfo.h> -#include <locale.h> -#include <stdlib.h> -#include <wchar.h> -#include <locale/localeinfo.h> - - -size_t -__wcrtomb_chk (char *s, wchar_t wchar, mbstate_t *ps, size_t buflen) -{ - /* We do not have to implement the full wctomb semantics since we - know that S cannot be NULL when we come here. */ - if (buflen < MB_CUR_MAX) - __chk_fail (); - - return __wcrtomb (s, wchar, ps); -} diff --git a/debug/wcscat_chk.c b/debug/wcscat_chk.c deleted file mode 100644 index eef0451..0000000 --- a/debug/wcscat_chk.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 2001, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <wchar.h> - - -/* Append SRC on the end of DEST. Check for overflows. */ -wchar_t * -__wcscat_chk (wchar_t *dest, const wchar_t *src, size_t destlen) -{ - register wchar_t *s1 = dest; - register const wchar_t *s2 = src; - wchar_t c; - - /* Find the end of the string. */ - do - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *s1++; - } - while (c != L'\0'); - - /* Make S1 point before the next character, so we can increment - it while memory is read (wins on pipelined cpus). */ - s1 -= 2; - ++destlen; - - do - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *s2++; - *++s1 = c; - } - while (c != L'\0'); - - return dest; -} diff --git a/debug/wcscpy_chk.c b/debug/wcscpy_chk.c deleted file mode 100644 index 93b78cd..0000000 --- a/debug/wcscpy_chk.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 2003, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stddef.h> -#include <wchar.h> - - -/* Copy SRC to DEST. */ -wchar_t * -__wcscpy_chk (wchar_t *dest, const wchar_t *src, size_t n) -{ - wint_t c; - wchar_t *wcp; - - if (__alignof__ (wchar_t) >= sizeof (wchar_t)) - { - const ptrdiff_t off = dest - src - 1; - - wcp = (wchar_t *) src; - - do - { - if (__builtin_expect (n-- == 0, 0)) - __chk_fail (); - c = *wcp++; - wcp[off] = c; - } - while (c != L'\0'); - } - else - { - wcp = dest; - - do - { - if (__builtin_expect (n-- == 0, 0)) - __chk_fail (); - c = *src++; - *wcp++ = c; - } - while (c != L'\0'); - } - - return dest; -} diff --git a/debug/wcsncat_chk.c b/debug/wcsncat_chk.c deleted file mode 100644 index b28773f..0000000 --- a/debug/wcsncat_chk.c +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <wchar.h> - - -/* Append no more than N wide-character of SRC onto DEST. */ -wchar_t * -__wcsncat_chk (wchar_t *dest, const wchar_t *src, size_t n, size_t destlen) -{ - wchar_t c; - wchar_t * const s = dest; - - /* Find the end of DEST. */ - do - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *dest++; - } - while (c != L'\0'); - - /* Make DEST point before next character, so we can increment - it while memory is read (wins on pipelined cpus). */ - ++destlen; - dest -= 2; - - if (n >= 4) - { - size_t n4 = n >> 2; - do - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *src++; - *++dest = c; - if (c == L'\0') - return s; - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *src++; - *++dest = c; - if (c == L'\0') - return s; - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *src++; - *++dest = c; - if (c == L'\0') - return s; - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *src++; - *++dest = c; - if (c == L'\0') - return s; - } while (--n4 > 0); - n &= 3; - } - - while (n > 0) - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - c = *src++; - *++dest = c; - if (c == L'\0') - return s; - n--; - } - - if (c != L'\0') - { - if (__builtin_expect (destlen-- == 0, 0)) - __chk_fail (); - *++dest = L'\0'; - } - - return s; -} diff --git a/debug/wcsncpy_chk.c b/debug/wcsncpy_chk.c deleted file mode 100644 index 199e4b0..0000000 --- a/debug/wcsncpy_chk.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <wchar.h> - - -/* Copy no more than N wide-characters of SRC to DEST. */ -wchar_t * -__wcsncpy_chk (wchar_t *dest, const wchar_t *src, size_t n, size_t destlen) -{ - if (__builtin_expect (destlen < n, 0)) - __chk_fail (); - - /* This function is not often enough used to justify not using a - tail call. */ - return __wcsncpy (dest, src, n); -} diff --git a/debug/wcsnrtombs_chk.c b/debug/wcsnrtombs_chk.c deleted file mode 100644 index 67644bd..0000000 --- a/debug/wcsnrtombs_chk.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <locale.h> -#include <wchar.h> - - -size_t -__wcsnrtombs_chk (char *dst, __const wchar_t **src, size_t nwc, size_t len, - mbstate_t *ps, size_t dstlen) -{ - if (__builtin_expect (dstlen < len, 0)) - __chk_fail (); - - return __wcsnrtombs (dst, src, nwc, len, ps); -} diff --git a/debug/wcsrtombs_chk.c b/debug/wcsrtombs_chk.c deleted file mode 100644 index 9334267..0000000 --- a/debug/wcsrtombs_chk.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <locale.h> -#include <wchar.h> - - -size_t -__wcsrtombs_chk (char *dst, __const wchar_t **src, size_t len, - mbstate_t *ps, size_t dstlen) -{ - if (__builtin_expect (dstlen < len, 0)) - __chk_fail (); - - return __wcsrtombs (dst, src, len, ps); -} diff --git a/debug/wcstombs_chk.c b/debug/wcstombs_chk.c deleted file mode 100644 index 0da48f9..0000000 --- a/debug/wcstombs_chk.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <locale.h> -#include <string.h> -#include <wchar.h> - - -size_t -__wcstombs_chk (char *dst, __const wchar_t *src, size_t len, size_t dstlen) -{ - if (__builtin_expect (dstlen < len, 0)) - __chk_fail (); - - mbstate_t state; - - memset (&state, '\0', sizeof state); - - /* Return how many we wrote (or maybe an error). */ - return __wcsrtombs (dst, &src, len, &state); -} diff --git a/debug/wctomb_chk.c b/debug/wctomb_chk.c deleted file mode 100644 index d036634..0000000 --- a/debug/wctomb_chk.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <locale.h> -#include <stdlib.h> -#include <wcsmbs/wcsmbsload.h> - - -extern mbstate_t __no_r_state attribute_hidden; /* Defined in mbtowc.c. */ - - -int -__wctomb_chk (char *s, wchar_t wchar, size_t buflen) -{ - /* We do not have to implement the full wctomb semantics since we - know that S cannot be NULL when we come here. */ - if (buflen < MB_CUR_MAX) - __chk_fail (); - - return __wcrtomb (s, wchar, &__no_r_state); -} diff --git a/debug/wmemcpy_chk.c b/debug/wmemcpy_chk.c deleted file mode 100644 index eeee927..0000000 --- a/debug/wmemcpy_chk.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1996, 1997, 1999, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <wchar.h> -#include <string.h> - - -wchar_t * -__wmemcpy_chk (wchar_t *s1, const wchar_t *s2, size_t n, size_t ns1) -{ - if (__builtin_expect (ns1 < n, 0)) - __chk_fail (); - return (wchar_t *) memcpy ((char *) s1, (char *) s2, n * sizeof (wchar_t)); -} diff --git a/debug/wmemmove_chk.c b/debug/wmemmove_chk.c deleted file mode 100644 index da0446e..0000000 --- a/debug/wmemmove_chk.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1996, 1997, 1999, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu> - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <wchar.h> -#include <string.h> - - -wchar_t * -__wmemmove_chk (wchar_t *s1, const wchar_t *s2, size_t n, size_t ns1) -{ - if (__builtin_expect (ns1 < n, 0)) - __chk_fail (); - return (wchar_t *) memmove ((char *) s1, (char *) s2, n * sizeof (wchar_t)); -} diff --git a/debug/wmempcpy_chk.c b/debug/wmempcpy_chk.c deleted file mode 100644 index 52c629a..0000000 --- a/debug/wmempcpy_chk.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1999, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.org>, 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <wchar.h> -#include <string.h> - - -wchar_t * -__wmempcpy_chk (wchar_t *s1, const wchar_t *s2, size_t n, size_t ns1) -{ - if (__builtin_expect (ns1 < n, 0)) - __chk_fail (); - return (wchar_t *) __mempcpy ((char *) s1, (char *) s2, - n * sizeof (wchar_t)); -} diff --git a/debug/wmemset_chk.c b/debug/wmemset_chk.c deleted file mode 100644 index 5ed88e8..0000000 --- a/debug/wmemset_chk.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1996,97,99,2002,2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <wchar.h> - - -wchar_t * -__wmemset_chk (wchar_t *s, wchar_t c, size_t n, size_t dstlen) -{ - if (__builtin_expect (dstlen < n, 0)) - __chk_fail (); - - return wmemset (s, c, n); -} diff --git a/debug/wprintf_chk.c b/debug/wprintf_chk.c deleted file mode 100644 index e0a8261..0000000 --- a/debug/wprintf_chk.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005 - 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdarg.h> -#include <stdio.h> -#include <wchar.h> -#include "../libio/libioP.h" - - -/* Write formatted output to stdout from the format string FORMAT. */ -int -__wprintf_chk (int flag, const wchar_t *format, ...) -{ - va_list ap; - int done; - - _IO_acquire_lock (stdout); - if (flag > 0) - stdout->_flags2 |= _IO_FLAGS2_FORTIFY; - - va_start (ap, format); - done = _IO_vfwprintf (stdout, format, ap); - va_end (ap); - - if (flag > 0) - stdout->_flags2 &= ~_IO_FLAGS2_FORTIFY; - _IO_release_lock (stdout); - - return done; -} diff --git a/debug/xtrace.sh b/debug/xtrace.sh index c913c76..4ce8888 100755 --- a/debug/xtrace.sh +++ b/debug/xtrace.sh @@ -1,5 +1,5 @@ #! @BASH@ -# Copyright (C) 1999, 2001-2006, 2007 Free Software Foundation, Inc. +# Copyright (C) 1999, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. # This file is part of the GNU C Library. # Contributed by Ulrich Drepper <drepper@gnu.org>, 1999. @@ -18,8 +18,8 @@ # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA # 02111-1307 USA. -pcprofileso='@SLIBDIR@/libpcprofile.so' -pcprofiledump='@BINDIR@/pcprofiledump' +pcprofileso=@SLIBDIR@/libpcprofile.so +pcprofiledump=@BINDIR@/pcprofiledump TEXTDOMAIN=libc # Print usage message. @@ -64,7 +64,7 @@ do_version() { printf $"Copyright (C) %s Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -" "2006" +" "2004" printf $"Written by %s. " "Ulrich Drepper" exit 0 @@ -107,7 +107,7 @@ while test $# -gt 0; do --d=* | --da=* | --dat=* | --data=*) data=${1##*=} ;; - -\? | --h | --he | --hel | --help) + -? | --h | --he | --hel | --help) do_help ;; -V | --v | --ve | --ver | --vers | --versi | --versio | --version) @@ -161,32 +161,32 @@ if test -n "$data"; then while read fct; do read file if test "$fct" != '??' -a "$file" != '??:0'; then - format_line "$fct" "$file" + format_line $fct $file fi done else - fifo=$(mktemp -ut xtrace.XXXXXX) || exit - trap 'rm -f "$fifo"; exit 1' HUP INT QUIT TERM PIPE + fifo=$(mktemp -u ${TMPDIR:-/tmp}/xtrace.XXXXXX) mkfifo -m 0600 $fifo || exit 1 + trap 'rm $fifo; exit 1' SIGINT SIGTERM SIGPIPE # Now start the program and let it write to the FIFO. $TERMINAL_PROG -T "xtrace - $program $*" -e /bin/sh -c "LD_PRELOAD=$pcprofileso PCPROFILE_OUTPUT=$fifo $program $*; read < $fifo" & termpid=$! - $pcprofiledump -u "$fifo" | + $pcprofiledump -u $fifo | while read line; do - echo "$line" | + echo $line | sed 's/this = \([^,]*\).*/\1/' | - addr2line -fC -e "$program" + addr2line -fC -e $program done | while read fct; do read file if test "$fct" != '??' -a "$file" != '??:0'; then - format_line "$fct" "$file" + format_line $fct $file fi done read -p "Press return here to close $TERMINAL_PROG($program)." - echo > "$fifo" - rm "$fifo" + echo > $fifo + rm $fifo fi exit 0 |