diff --git a/contrib/netbsd-tests/lib/libc/ssp/h_gets.c b/contrib/netbsd-tests/lib/libc/ssp/h_gets.c --- a/contrib/netbsd-tests/lib/libc/ssp/h_gets.c +++ b/contrib/netbsd-tests/lib/libc/ssp/h_gets.c @@ -34,6 +34,9 @@ #include #ifdef __FreeBSD__ +/* _FORTIFY_SOURCE, at the very least, may #define a gets() macro. */ +#undef gets + /* * We want to test the gets() implementation, but cannot simply link against * the gets symbol because it is not in the default version. (We've made it diff --git a/include/ssp/unistd.h b/include/ssp/unistd.h --- a/include/ssp/unistd.h +++ b/include/ssp/unistd.h @@ -36,8 +36,12 @@ #if __SSP_FORTIFY_LEVEL > 0 __BEGIN_DECLS -__ssp_redirect0(ssize_t, read, (int __fd, void *__buf, size_t __len), \ - (__fd, __buf, __len)); +#ifndef _FORTIFY_SOURCE_read +#define _FORTIFY_SOURCE_read read +#endif + +__ssp_redirect0(ssize_t, _FORTIFY_SOURCE_read, (int __fd, void *__buf, + size_t __len), (__fd, __buf, __len)); __ssp_redirect(ssize_t, readlink, (const char *__restrict __path, \ char *__restrict __buf, size_t __len), (__path, __buf, __len)); diff --git a/lib/libc/Makefile b/lib/libc/Makefile --- a/lib/libc/Makefile +++ b/lib/libc/Makefile @@ -19,6 +19,8 @@ LIBC_ARCH=${MACHINE_CPUARCH} .endif +CFLAGS+=-D_FORTIFY_SOURCE_read=_read + # All library objects contain FreeBSD revision strings by default; they may be # excluded as a space-saving measure. To produce a library that does # not contain these strings, add -DSTRIP_FBSDID (see ) to CFLAGS diff --git a/lib/libc/amd64/string/bcopy.c b/lib/libc/amd64/string/bcopy.c --- a/lib/libc/amd64/string/bcopy.c +++ b/lib/libc/amd64/string/bcopy.c @@ -5,7 +5,7 @@ #include void -bcopy(const void *src, void *dst, size_t len) +(bcopy)(const void *src, void *dst, size_t len) { memmove(dst, src, len); diff --git a/lib/libc/amd64/string/bzero.c b/lib/libc/amd64/string/bzero.c --- a/lib/libc/amd64/string/bzero.c +++ b/lib/libc/amd64/string/bzero.c @@ -5,7 +5,7 @@ #include void -bzero(void *b, size_t len) +(bzero)(void *b, size_t len) { memset(b, 0, len); diff --git a/lib/libc/amd64/string/strncat.c b/lib/libc/amd64/string/strncat.c --- a/lib/libc/amd64/string/strncat.c +++ b/lib/libc/amd64/string/strncat.c @@ -11,7 +11,7 @@ void *__memccpy(void *restrict, const void *restrict, int, size_t); char * -strncat(char *dest, const char *src, size_t n) +(strncat)(char *dest, const char *src, size_t n) { size_t len; char *endptr; diff --git a/lib/libc/amd64/string/strncpy.c b/lib/libc/amd64/string/strncpy.c --- a/lib/libc/amd64/string/strncpy.c +++ b/lib/libc/amd64/string/strncpy.c @@ -32,7 +32,7 @@ char *__stpncpy(char *restrict, const char *restrict, size_t); char * -strncpy(char *restrict dst, const char *restrict src, size_t len) +(strncpy)(char *restrict dst, const char *restrict src, size_t len) { __stpncpy(dst, src, len); diff --git a/lib/libc/gen/getcwd.c b/lib/libc/gen/getcwd.c --- a/lib/libc/gen/getcwd.c +++ b/lib/libc/gen/getcwd.c @@ -40,6 +40,7 @@ #include #include #include +#include #include "un-namespace.h" #include "gen-private.h" @@ -51,7 +52,7 @@ extern int __getcwd(char *, size_t); char * -getcwd(char *pt, size_t size) +__ssp_real(getcwd)(char *pt, size_t size) { struct dirent *dp; DIR *dir = NULL; diff --git a/lib/libc/stdio/fgets.c b/lib/libc/stdio/fgets.c --- a/lib/libc/stdio/fgets.c +++ b/lib/libc/stdio/fgets.c @@ -46,7 +46,7 @@ * Return first argument, or NULL if no characters were read. */ char * -fgets(char * __restrict buf, int n, FILE * __restrict fp) +(fgets)(char * __restrict buf, int n, FILE * __restrict fp) { size_t len; char *s, *ret; diff --git a/lib/libc/stdio/snprintf.c b/lib/libc/stdio/snprintf.c --- a/lib/libc/stdio/snprintf.c +++ b/lib/libc/stdio/snprintf.c @@ -46,7 +46,7 @@ #include "local.h" int -snprintf(char * __restrict str, size_t n, char const * __restrict fmt, ...) +(snprintf)(char * __restrict str, size_t n, char const * __restrict fmt, ...) { size_t on; int ret; diff --git a/lib/libc/stdio/sprintf.c b/lib/libc/stdio/sprintf.c --- a/lib/libc/stdio/sprintf.c +++ b/lib/libc/stdio/sprintf.c @@ -44,7 +44,7 @@ #include "xlocale_private.h" int -sprintf(char * __restrict str, char const * __restrict fmt, ...) +(sprintf)(char * __restrict str, char const * __restrict fmt, ...) { int ret; va_list ap; diff --git a/lib/libc/stdio/vsnprintf.c b/lib/libc/stdio/vsnprintf.c --- a/lib/libc/stdio/vsnprintf.c +++ b/lib/libc/stdio/vsnprintf.c @@ -77,7 +77,7 @@ return (ret); } int -vsnprintf(char * __restrict str, size_t n, const char * __restrict fmt, +(vsnprintf)(char * __restrict str, size_t n, const char * __restrict fmt, __va_list ap) { return vsnprintf_l(str, n, __get_locale(), fmt, ap); diff --git a/lib/libc/stdio/vsprintf.c b/lib/libc/stdio/vsprintf.c --- a/lib/libc/stdio/vsprintf.c +++ b/lib/libc/stdio/vsprintf.c @@ -58,7 +58,7 @@ return (ret); } int -vsprintf(char * __restrict str, const char * __restrict fmt, __va_list ap) +(vsprintf)(char * __restrict str, const char * __restrict fmt, __va_list ap) { return vsprintf_l(str, __get_locale(), fmt, ap); } diff --git a/lib/libc/string/bcopy.c b/lib/libc/string/bcopy.c --- a/lib/libc/string/bcopy.c +++ b/lib/libc/string/bcopy.c @@ -49,16 +49,16 @@ void * #ifdef MEMCOPY -memcpy +(memcpy) #else -memmove +(memmove) #endif (void *dst0, const void *src0, size_t length) #else #include void -bcopy(const void *src0, void *dst0, size_t length) +(bcopy)(const void *src0, void *dst0, size_t length) #endif { char *dst = dst0; diff --git a/lib/libc/string/memset.c b/lib/libc/string/memset.c --- a/lib/libc/string/memset.c +++ b/lib/libc/string/memset.c @@ -47,7 +47,7 @@ #define WIDEVAL 0 void -bzero(void *dst0, size_t length) +(bzero)(void *dst0, size_t length) #else #include @@ -56,7 +56,7 @@ #define WIDEVAL c void * -memset(void *dst0, int c0, size_t length) +(memset)(void *dst0, int c0, size_t length) #endif { size_t t; diff --git a/lib/libc/string/stpcpy.c b/lib/libc/string/stpcpy.c --- a/lib/libc/string/stpcpy.c +++ b/lib/libc/string/stpcpy.c @@ -34,7 +34,7 @@ #include char * -stpcpy(char * __restrict to, const char * __restrict from) +(stpcpy)(char * __restrict to, const char * __restrict from) { for (; (*to = *from); ++from, ++to); diff --git a/lib/libc/string/stpncpy.c b/lib/libc/string/stpncpy.c --- a/lib/libc/string/stpncpy.c +++ b/lib/libc/string/stpncpy.c @@ -29,7 +29,7 @@ #include char * -stpncpy(char * __restrict dst, const char * __restrict src, size_t n) +(stpncpy)(char * __restrict dst, const char * __restrict src, size_t n) { for (; n--; dst++, src++) { diff --git a/lib/libc/string/strcat.c b/lib/libc/string/strcat.c --- a/lib/libc/string/strcat.c +++ b/lib/libc/string/strcat.c @@ -32,7 +32,7 @@ #include char * -strcat(char * __restrict s, const char * __restrict append) +(strcat)(char * __restrict s, const char * __restrict append) { char *save = s; diff --git a/lib/libc/string/strncat.c b/lib/libc/string/strncat.c --- a/lib/libc/string/strncat.c +++ b/lib/libc/string/strncat.c @@ -39,7 +39,7 @@ * are written at dst (at most n+1 bytes being appended). Return dst. */ char * -strncat(char * __restrict dst, const char * __restrict src, size_t n) +(strncat)(char * __restrict dst, const char * __restrict src, size_t n) { if (n != 0) { char *d = dst; diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h --- a/sys/sys/cdefs.h +++ b/sys/sys/cdefs.h @@ -609,6 +609,16 @@ #define __DEQUALIFY(type, var) ((type)(__uintptr_t)(const volatile void *)(var)) #endif +#if !defined(_STANDALONE) && !defined(_KERNEL) +#if defined(__GNUC__) || defined(__PCC__) +#define __RENAME(x) __asm(__STRING(x)) +#else +#define __RENAME(x) no renaming support for compiler in use +#endif /* __GNUC__ */ +#else /* _STANDALONE || _KERNEL */ +#define __RENAME(x) no renaming in kernel/standalone environment +#endif + /*- * The following definitions are an extension of the behavior originally * implemented in , but with a different level of granularity.