diff --git a/libc/arch-arm/include/machine/cdefs.h b/libc/arch-arm/include/machine/cdefs.h deleted file mode 100644 index 44f1542d6..000000000 --- a/libc/arch-arm/include/machine/cdefs.h +++ /dev/null @@ -1,19 +0,0 @@ -/* $OpenBSD: cdefs.h,v 1.2 2005/11/24 20:46:44 deraadt Exp $ */ - -#ifndef _MACHINE_CDEFS_H_ -#define _MACHINE_CDEFS_H_ - -#if defined(lint) -#define __indr_reference(sym,alias) __lint_equal__(sym,alias) -#define __warn_references(sym,msg) -#define __weak_alias(alias,sym) __lint_equal__(sym,alias) -#elif defined(__GNUC__) && defined(__STDC__) -#define __weak_alias(alias,sym) \ - __asm__(".weak " __STRING(alias) " ; " __STRING(alias) \ - " = " __STRING(sym)); -#define __warn_references(sym,msg) \ - __asm__(".section .gnu.warning." __STRING(sym) \ - " ; .ascii \"" msg "\" ; .text"); -#endif - -#endif /* !_MACHINE_CDEFS_H_ */ diff --git a/libc/arch-mips/include/machine/cdefs.h b/libc/arch-mips/include/machine/cdefs.h deleted file mode 100644 index d52376ae1..000000000 --- a/libc/arch-mips/include/machine/cdefs.h +++ /dev/null @@ -1,47 +0,0 @@ -/* $OpenBSD: cdefs.h,v 1.4 2006/01/10 00:04:04 millert Exp $ */ - -/* - * Copyright (c) 2002-2003 Opsycon AB (www.opsycon.se / www.opsycon.com) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - - -#ifndef _MIPS_CDEFS_H_ -#define _MIPS_CDEFS_H_ - -#if defined(lint) -#define __indr_reference(sym,alias) __lint_equal__(sym,alias) -#define __warn_references(sym,msg) -#define __weak_alias(alias,sym) __lint_equal__(sym,alias) -#elif defined(__GNUC__) && defined(__STDC__) -#define __weak_alias(alias,sym) \ - __asm__(".weak " __STRING(alias) " ; " \ - __STRING(alias) " = " __STRING(sym)) -#define __warn_references(sym,msg) \ - __asm__(".section .gnu.warning." __STRING(sym) \ - " ; .ascii \"" msg "\" ; .text") -#define __indr_references(sym,msg) /* nothing */ -#endif - -#endif /* !_MIPS_CDEFS_H_ */ diff --git a/libc/arch-x86/include/machine/cdefs.h b/libc/arch-x86/include/machine/cdefs.h deleted file mode 100644 index 6efee6ac4..000000000 --- a/libc/arch-x86/include/machine/cdefs.h +++ /dev/null @@ -1,24 +0,0 @@ -/* $OpenBSD: cdefs.h,v 1.9 2005/11/24 20:46:45 deraadt Exp $ */ - -/* - * Written by J.T. Conklin 01/17/95. - * Public domain. - */ - -#ifndef _MACHINE_CDEFS_H_ -#define _MACHINE_CDEFS_H_ - -#if defined(lint) -#define __indr_reference(sym,alias) __lint_equal__(sym,alias) -#define __warn_references(sym,msg) -#define __weak_alias(alias,sym) __lint_equal__(sym,alias) -#elif defined(__GNUC__) && defined(__STDC__) -#define __weak_alias(alias,sym) \ - __asm__(".weak " __STRING(alias) " ; " \ - __STRING(alias) " = " __STRING(sym)); -#define __warn_references(sym,msg) \ - __asm__(".section .gnu.warning." __STRING(sym) \ - " ; .ascii \"" msg "\" ; .text"); -#endif - -#endif /* !_MACHINE_CDEFS_H_ */ diff --git a/libc/arch-x86_64/include/machine/cdefs.h b/libc/arch-x86_64/include/machine/cdefs.h deleted file mode 100644 index eb243a33d..000000000 --- a/libc/arch-x86_64/include/machine/cdefs.h +++ /dev/null @@ -1,21 +0,0 @@ -/* $OpenBSD: cdefs.h,v 1.3 2013/03/28 17:30:45 martynas Exp $ */ - -/* - * Written by J.T. Conklin 01/17/95. - * Public domain. - */ - -#ifndef _MACHINE_CDEFS_H_ -#define _MACHINE_CDEFS_H_ - -#define __strong_alias(alias,sym) \ - __asm__(".global " __STRING(alias) " ; " __STRING(alias) \ - " = " __STRING(sym)) -#define __weak_alias(alias,sym) \ - __asm__(".weak " __STRING(alias) " ; " __STRING(alias) \ - " = " __STRING(sym)) -#define __warn_references(sym,msg) \ - __asm__(".section .gnu.warning." __STRING(sym) \ - " ; .ascii \"" msg "\" ; .text") - -#endif /* !_MACHINE_CDEFS_H_ */ diff --git a/libc/include/stdio.h b/libc/include/stdio.h index 409afeaf8..260a4e706 100644 --- a/libc/include/stdio.h +++ b/libc/include/stdio.h @@ -222,13 +222,13 @@ int getchar(void); ssize_t getdelim(char ** __restrict, size_t * __restrict, int, FILE * __restrict); ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict); -char *gets(char *); + #if __BSD_VISIBLE && !defined(__SYS_ERRLIST) #define __SYS_ERRLIST - extern int sys_nerr; /* perror(3) external variables */ extern char *sys_errlist[]; #endif + void perror(const char *); int printf(const char * __restrict, ...) __printflike(1, 2); @@ -251,13 +251,16 @@ int vprintf(const char * __restrict, __va_list) __printflike(1, 0); #ifndef __AUDIT__ -char *gets(char *); -int sprintf(char * __restrict, const char * __restrict, ...) - __printflike(2, 3); -char *tmpnam(char *); -int vsprintf(char * __restrict, const char * __restrict, - __va_list) - __printflike(2, 0); +char* gets(char*) __warnattr("gets is very unsafe; consider using fgets"); +int sprintf(char* __restrict, const char* __restrict, ...) + __printflike(2, 3) __warnattr("sprintf is often misused; please use snprintf"); +char* tmpnam(char*) __warnattr("tmpnam possibly used unsafely; consider using mkstemp"); +int vsprintf(char* __restrict, const char* __restrict, __va_list) + __printflike(2, 0) __warnattr("vsprintf is often misused; please use vsnprintf"); +#if __XPG_VISIBLE +char* tempnam(const char*, const char*) + __warnattr("tempnam possibly used unsafely; consider using mkstemp"); +#endif #endif extern int rename(const char*, const char*); @@ -320,9 +323,6 @@ int putc_unlocked(int, FILE *); int putchar_unlocked(int); #endif /* __POSIX_VISIBLE >= 199506 */ -#if __XPG_VISIBLE -char *tempnam(const char *, const char *); -#endif __END_DECLS #endif /* __BSD_VISIBLE || __POSIX_VISIBLE || __XPG_VISIBLE */ diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h index 9fa84c1d3..72b554fd4 100644 --- a/libc/include/stdlib.h +++ b/libc/include/stdlib.h @@ -51,9 +51,9 @@ extern int setenv(const char *, const char *, int); extern int unsetenv(const char *); extern int clearenv(void); -extern char *mkdtemp(char *); -extern char *mktemp(char *); -extern int mkstemp(char *); +extern char* mkdtemp(char*); +extern char* mktemp(char*) __warnattr("mktemp possibly used unsafely; consider using mkstemp"); +extern int mkstemp(char*); extern long strtol(const char *, char **, int); extern long long strtoll(const char *, char **, int); diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index c7f2ac7ac..b4dad74f8 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -334,8 +334,10 @@ #if __GNUC_PREREQ__(4, 3) #define __errordecl(name, msg) extern void name(void) __attribute__((__error__(msg))) +#define __warnattr(msg) __attribute__((__warning__(msg))) #else #define __errordecl(name, msg) extern void name(void) +#define __warnattr(msg) #endif /* diff --git a/libc/include/sys/cdefs_elf.h b/libc/include/sys/cdefs_elf.h index 0887fa57b..bb846b7fd 100644 --- a/libc/include/sys/cdefs_elf.h +++ b/libc/include/sys/cdefs_elf.h @@ -38,20 +38,10 @@ #define _C_LABEL_STRING(x) x #endif -#if __STDC__ #define ___RENAME(x) __asm__(___STRING(_C_LABEL(x))) -#else -#ifdef __LEADING_UNDERSCORE -#define ___RENAME(x) ____RENAME(_/**/x) -#define ____RENAME(x) __asm__(___STRING(x)) -#else -#define ___RENAME(x) __asm__(___STRING(x)) -#endif -#endif #define __indr_reference(sym,alias) /* nada, since we do weak refs */ -#if __STDC__ #define __strong_alias(alias,sym) \ __asm__(".global " _C_LABEL_STRING(#alias) "\n" \ _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym)); @@ -61,39 +51,15 @@ _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym)); #define __weak_extern(sym) \ __asm__(".weak " _C_LABEL_STRING(#sym)); + +/* We use __warnattr instead of __warn_references. + * TODO: remove this and put an empty definition in one of the upstream-* compatibility headers. + */ #define __warn_references(sym,msg) \ - __asm__(".section .gnu.warning." #sym "\n\t.ascii \"" msg "\"\n\t.text"); + /*__asm__(".section .gnu.warning." #sym "\n\t.ascii \"" msg "\"\n\t.text");*/ -#else /* !__STDC__ */ - -#ifdef __LEADING_UNDERSCORE -#define __weak_alias(alias,sym) ___weak_alias(_/**/alias,_/**/sym) -#define ___weak_alias(alias,sym) \ - __asm__(".weak alias\nalias = sym"); -#else -#define __weak_alias(alias,sym) \ - __asm__(".weak alias\nalias = sym"); -#endif -#ifdef __LEADING_UNDERSCORE -#define __weak_extern(sym) ___weak_extern(_/**/sym) -#define ___weak_extern(sym) \ - __asm__(".weak sym"); -#else -#define __weak_extern(sym) \ - __asm__(".weak sym"); -#endif -#define __warn_references(sym,msg) \ - __asm__(".section .gnu.warning.sym\n\t.ascii msg ; .text"); - -#endif /* !__STDC__ */ - -#if __STDC__ #define __SECTIONSTRING(_sec, _str) \ __asm__(".section " #_sec "\n\t.asciz \"" _str "\"\n\t.previous") -#else -#define __SECTIONSTRING(_sec, _str) \ - __asm__(".section _sec\n\t.asciz _str\n\t.previous") -#endif /* GCC visibility helper macro */ /* This must be used to tag non-static functions that are private, i.e.