summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPhilip Guenther <guenther@cvs.openbsd.org>2015-08-31 02:53:58 +0000
committerPhilip Guenther <guenther@cvs.openbsd.org>2015-08-31 02:53:58 +0000
commita4c7e44b581895df2d4b7cc4f88e39b12a83c740 (patch)
tree0990e8c4dea4839a061c02403f3b3bb05884c4de /lib
parent105db1ed9f850ad922a57ad78b72b1919c986e21 (diff)
Add framework for resolving (pun intended) libc namespace issues, using
wrapper .h files and asm labels to let internal calls resolve directly and not be overridable or use the PLT. Then, apply that framework to most of the functions in stdio.h, string.h, err.h, and wchar.h. Delete the should-have-been-hidden-all-along _v?(err|warn)[cx]? symbols while here. tests clean on i386, amd64, sparc64, powerpc, and mips64 naming feedback from kettenis@ and millert@ ok kettenis@
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/Makefile.inc5
-rw-r--r--lib/libc/Symbols.list12
-rw-r--r--lib/libc/arch/alpha/SYS.h25
-rw-r--r--lib/libc/arch/alpha/string/bcopy.S6
-rw-r--r--lib/libc/arch/alpha/string/bzero.S6
-rw-r--r--lib/libc/arch/alpha/string/ffs.S6
-rw-r--r--lib/libc/arch/alpha/string/memcpy.S6
-rw-r--r--lib/libc/arch/alpha/string/memmove.S6
-rw-r--r--lib/libc/arch/amd64/SYS.h32
-rw-r--r--lib/libc/arch/amd64/string/bcmp.S4
-rw-r--r--lib/libc/arch/amd64/string/bzero.S4
-rw-r--r--lib/libc/arch/amd64/string/ffs.S6
-rw-r--r--lib/libc/arch/amd64/string/memchr.S4
-rw-r--r--lib/libc/arch/amd64/string/memmove.S6
-rw-r--r--lib/libc/arch/amd64/string/memset.S4
-rw-r--r--lib/libc/arch/amd64/string/strchr.S6
-rw-r--r--lib/libc/arch/amd64/string/strcmp.S6
-rw-r--r--lib/libc/arch/amd64/string/strlen.S6
-rw-r--r--lib/libc/arch/amd64/string/strrchr.S6
-rw-r--r--lib/libc/arch/arm/SYS.h26
-rw-r--r--lib/libc/arch/arm/string/_memcpy.S5
-rw-r--r--lib/libc/arch/arm/string/bcopy.S5
-rw-r--r--lib/libc/arch/arm/string/bzero.S5
-rw-r--r--lib/libc/arch/arm/string/ffs.S5
-rw-r--r--lib/libc/arch/arm/string/memcmp.S5
-rw-r--r--lib/libc/arch/arm/string/memcpy.S5
-rw-r--r--lib/libc/arch/arm/string/memmove.S5
-rw-r--r--lib/libc/arch/arm/string/memset.S5
-rw-r--r--lib/libc/arch/arm/string/strcmp.S5
-rw-r--r--lib/libc/arch/arm/string/strncmp.S5
-rw-r--r--lib/libc/arch/hppa/SYS.h28
-rw-r--r--lib/libc/arch/hppa/string/memmove.S8
-rw-r--r--lib/libc/arch/hppa64/SYS.h28
-rw-r--r--lib/libc/arch/i386/SYS.h26
-rw-r--r--lib/libc/arch/i386/string/bcmp.S5
-rw-r--r--lib/libc/arch/i386/string/bzero.S5
-rw-r--r--lib/libc/arch/i386/string/ffs.S5
-rw-r--r--lib/libc/arch/i386/string/memchr.S5
-rw-r--r--lib/libc/arch/i386/string/memcmp.S5
-rw-r--r--lib/libc/arch/i386/string/memmove.S8
-rw-r--r--lib/libc/arch/i386/string/memset.S5
-rw-r--r--lib/libc/arch/i386/string/strcat.S3
-rw-r--r--lib/libc/arch/i386/string/strchr.S5
-rw-r--r--lib/libc/arch/i386/string/strcmp.S5
-rw-r--r--lib/libc/arch/i386/string/strcpy.S3
-rw-r--r--lib/libc/arch/i386/string/strncmp.S5
-rw-r--r--lib/libc/arch/i386/string/strrchr.S5
-rw-r--r--lib/libc/arch/m88k/SYS.h25
-rw-r--r--lib/libc/arch/mips64/SYS.h27
-rw-r--r--lib/libc/arch/mips64/string/bcmp.S6
-rw-r--r--lib/libc/arch/mips64/string/bcopy.S6
-rw-r--r--lib/libc/arch/mips64/string/bzero.S6
-rw-r--r--lib/libc/arch/mips64/string/ffs.S6
-rw-r--r--lib/libc/arch/mips64/string/strchr.S6
-rw-r--r--lib/libc/arch/mips64/string/strcmp.S6
-rw-r--r--lib/libc/arch/mips64/string/strlen.S6
-rw-r--r--lib/libc/arch/mips64/string/strrchr.S6
-rw-r--r--lib/libc/arch/powerpc/SYS.h25
-rw-r--r--lib/libc/arch/powerpc/string/memmove.S6
-rw-r--r--lib/libc/arch/sh/SYS.h27
-rw-r--r--lib/libc/arch/sh/string/bcopy.S5
-rw-r--r--lib/libc/arch/sh/string/ffs.S5
-rw-r--r--lib/libc/arch/sh/string/memcpy.S5
-rw-r--r--lib/libc/arch/sh/string/memmove.S5
-rw-r--r--lib/libc/arch/sh/string/memset.S9
-rw-r--r--lib/libc/arch/sparc/DEFS.h25
-rw-r--r--lib/libc/arch/sparc/SYS.h4
-rw-r--r--lib/libc/arch/sparc/string/bzero.S3
-rw-r--r--lib/libc/arch/sparc/string/ffs.S3
-rw-r--r--lib/libc/arch/sparc/string/strlen.S3
-rw-r--r--lib/libc/arch/sparc64/SYS.h26
-rw-r--r--lib/libc/arch/sparc64/string/ffs.S5
-rw-r--r--lib/libc/arch/sparc64/string/strlen.S5
-rw-r--r--lib/libc/arch/vax/DEFS.h25
-rw-r--r--lib/libc/arch/vax/SYS.h4
-rw-r--r--lib/libc/arch/vax/string/bcmp.S3
-rw-r--r--lib/libc/arch/vax/string/bcopy.S3
-rw-r--r--lib/libc/arch/vax/string/bzero.S3
-rw-r--r--lib/libc/arch/vax/string/ffs.S3
-rw-r--r--lib/libc/arch/vax/string/memcmp.S3
-rw-r--r--lib/libc/arch/vax/string/memcpy.S3
-rw-r--r--lib/libc/arch/vax/string/memmove.S3
-rw-r--r--lib/libc/arch/vax/string/memset.S3
-rw-r--r--lib/libc/arch/vax/string/strchr.S3
-rw-r--r--lib/libc/gen/auth_subr.c12
-rw-r--r--lib/libc/gen/authenticate.c16
-rw-r--r--lib/libc/gen/ctermid.c3
-rw-r--r--lib/libc/gen/err.c12
-rw-r--r--lib/libc/gen/errc.c10
-rw-r--r--lib/libc/gen/errx.c12
-rw-r--r--lib/libc/gen/getbsize.c8
-rw-r--r--lib/libc/gen/getnetgrent.c6
-rw-r--r--lib/libc/gen/popen.c4
-rw-r--r--lib/libc/gen/psignal.c4
-rw-r--r--lib/libc/gen/shm_open.c4
-rw-r--r--lib/libc/gen/verr.c8
-rw-r--r--lib/libc/gen/verrc.c8
-rw-r--r--lib/libc/gen/verrx.c8
-rw-r--r--lib/libc/gen/vwarn.c8
-rw-r--r--lib/libc/gen/vwarnc.c8
-rw-r--r--lib/libc/gen/vwarnx.c8
-rw-r--r--lib/libc/gen/warn.c12
-rw-r--r--lib/libc/gen/warnc.c10
-rw-r--r--lib/libc/gen/warnx.c12
-rw-r--r--lib/libc/hidden/err.h37
-rw-r--r--lib/libc/hidden/stdio.h109
-rw-r--r--lib/libc/hidden/string.h79
-rw-r--r--lib/libc/hidden/wchar.h95
-rw-r--r--lib/libc/include/namespace.h158
-rw-r--r--lib/libc/stdio/asprintf.c4
-rw-r--r--lib/libc/stdio/clrerr.c3
-rw-r--r--lib/libc/stdio/dprintf.c3
-rw-r--r--lib/libc/stdio/fclose.c3
-rw-r--r--lib/libc/stdio/fdopen.c3
-rw-r--r--lib/libc/stdio/feof.c3
-rw-r--r--lib/libc/stdio/ferror.c3
-rw-r--r--lib/libc/stdio/fflush.c3
-rw-r--r--lib/libc/stdio/fgetc.c3
-rw-r--r--lib/libc/stdio/fgetln.c3
-rw-r--r--lib/libc/stdio/fgetpos.c3
-rw-r--r--lib/libc/stdio/fgets.c3
-rw-r--r--lib/libc/stdio/fgetwc.c3
-rw-r--r--lib/libc/stdio/fgetws.c3
-rw-r--r--lib/libc/stdio/fileno.c3
-rw-r--r--lib/libc/stdio/fmemopen.c3
-rw-r--r--lib/libc/stdio/fopen.c3
-rw-r--r--lib/libc/stdio/fprintf.c4
-rw-r--r--lib/libc/stdio/fpurge.c3
-rw-r--r--lib/libc/stdio/fputc.c3
-rw-r--r--lib/libc/stdio/fputs.c3
-rw-r--r--lib/libc/stdio/fputwc.c3
-rw-r--r--lib/libc/stdio/fputws.c3
-rw-r--r--lib/libc/stdio/fread.c3
-rw-r--r--lib/libc/stdio/freopen.c3
-rw-r--r--lib/libc/stdio/fscanf.c4
-rw-r--r--lib/libc/stdio/fseek.c4
-rw-r--r--lib/libc/stdio/fsetpos.c3
-rw-r--r--lib/libc/stdio/ftell.c4
-rw-r--r--lib/libc/stdio/funopen.c3
-rw-r--r--lib/libc/stdio/fwide.c3
-rw-r--r--lib/libc/stdio/fwprintf.c3
-rw-r--r--lib/libc/stdio/fwrite.c3
-rw-r--r--lib/libc/stdio/fwscanf.c3
-rw-r--r--lib/libc/stdio/getc.c4
-rw-r--r--lib/libc/stdio/getchar.c4
-rw-r--r--lib/libc/stdio/getdelim.c3
-rw-r--r--lib/libc/stdio/getline.c3
-rw-r--r--lib/libc/stdio/getw.c3
-rw-r--r--lib/libc/stdio/getwc.c3
-rw-r--r--lib/libc/stdio/getwchar.c3
-rw-r--r--lib/libc/stdio/mktemp.c4
-rw-r--r--lib/libc/stdio/open_memstream.c3
-rw-r--r--lib/libc/stdio/open_wmemstream.c3
-rw-r--r--lib/libc/stdio/perror.c3
-rw-r--r--lib/libc/stdio/printf.c4
-rw-r--r--lib/libc/stdio/putc.c4
-rw-r--r--lib/libc/stdio/putchar.c4
-rw-r--r--lib/libc/stdio/puts.c3
-rw-r--r--lib/libc/stdio/putw.c3
-rw-r--r--lib/libc/stdio/putwc.c3
-rw-r--r--lib/libc/stdio/putwchar.c3
-rw-r--r--lib/libc/stdio/remove.c3
-rw-r--r--lib/libc/stdio/rewind.c3
-rw-r--r--lib/libc/stdio/rget.c3
-rw-r--r--lib/libc/stdio/scanf.c4
-rw-r--r--lib/libc/stdio/setbuf.c3
-rw-r--r--lib/libc/stdio/setbuffer.c4
-rw-r--r--lib/libc/stdio/setvbuf.c3
-rw-r--r--lib/libc/stdio/snprintf.c4
-rw-r--r--lib/libc/stdio/sscanf.c5
-rw-r--r--lib/libc/stdio/swprintf.c3
-rw-r--r--lib/libc/stdio/swscanf.c3
-rw-r--r--lib/libc/stdio/tempnam.c4
-rw-r--r--lib/libc/stdio/tmpfile.c3
-rw-r--r--lib/libc/stdio/tmpnam.c4
-rw-r--r--lib/libc/stdio/ungetc.c3
-rw-r--r--lib/libc/stdio/ungetwc.c3
-rw-r--r--lib/libc/stdio/vasprintf.c3
-rw-r--r--lib/libc/stdio/vdprintf.c3
-rw-r--r--lib/libc/stdio/vfprintf.c3
-rw-r--r--lib/libc/stdio/vfscanf.c3
-rw-r--r--lib/libc/stdio/vfwprintf.c3
-rw-r--r--lib/libc/stdio/vfwscanf.c3
-rw-r--r--lib/libc/stdio/vprintf.c3
-rw-r--r--lib/libc/stdio/vscanf.c3
-rw-r--r--lib/libc/stdio/vsnprintf.c3
-rw-r--r--lib/libc/stdio/vsscanf.c4
-rw-r--r--lib/libc/stdio/vswprintf.c3
-rw-r--r--lib/libc/stdio/vswscanf.c3
-rw-r--r--lib/libc/stdio/vwprintf.c3
-rw-r--r--lib/libc/stdio/vwscanf.c3
-rw-r--r--lib/libc/stdio/wbuf.c3
-rw-r--r--lib/libc/stdio/wprintf.c3
-rw-r--r--lib/libc/stdio/wscanf.c3
-rw-r--r--lib/libc/string/bcmp.c3
-rw-r--r--lib/libc/string/bcopy.c3
-rw-r--r--lib/libc/string/bzero.c3
-rw-r--r--lib/libc/string/explicit_bzero.c3
-rw-r--r--lib/libc/string/ffs.c3
-rw-r--r--lib/libc/string/memccpy.c3
-rw-r--r--lib/libc/string/memchr.c3
-rw-r--r--lib/libc/string/memcmp.c3
-rw-r--r--lib/libc/string/memcpy.c3
-rw-r--r--lib/libc/string/memmem.c3
-rw-r--r--lib/libc/string/memmove.c3
-rw-r--r--lib/libc/string/memrchr.c3
-rw-r--r--lib/libc/string/memset.c3
-rw-r--r--lib/libc/string/stpncpy.c3
-rw-r--r--lib/libc/string/strcasecmp.c4
-rw-r--r--lib/libc/string/strcasestr.c3
-rw-r--r--lib/libc/string/strchr.c3
-rw-r--r--lib/libc/string/strcmp.c3
-rw-r--r--lib/libc/string/strcoll.c3
-rw-r--r--lib/libc/string/strcspn.c3
-rw-r--r--lib/libc/string/strdup.c3
-rw-r--r--lib/libc/string/strerror.c3
-rw-r--r--lib/libc/string/strerror_r.c3
-rw-r--r--lib/libc/string/strlcat.c3
-rw-r--r--lib/libc/string/strlcpy.c3
-rw-r--r--lib/libc/string/strlen.c3
-rw-r--r--lib/libc/string/strmode.c3
-rw-r--r--lib/libc/string/strncat.c3
-rw-r--r--lib/libc/string/strncmp.c3
-rw-r--r--lib/libc/string/strncpy.c3
-rw-r--r--lib/libc/string/strndup.c3
-rw-r--r--lib/libc/string/strnlen.c3
-rw-r--r--lib/libc/string/strpbrk.c3
-rw-r--r--lib/libc/string/strrchr.c3
-rw-r--r--lib/libc/string/strsep.c3
-rw-r--r--lib/libc/string/strsignal.c1
-rw-r--r--lib/libc/string/strspn.c3
-rw-r--r--lib/libc/string/strstr.c3
-rw-r--r--lib/libc/string/strtok.c2
-rw-r--r--lib/libc/string/strxfrm.c3
-rw-r--r--lib/libc/string/timingsafe_bcmp.c3
-rw-r--r--lib/libc/string/timingsafe_memcmp.c3
236 files changed, 1320 insertions, 432 deletions
diff --git a/lib/libc/Makefile.inc b/lib/libc/Makefile.inc
index b989cb6b3ca..d6b30e1c593 100644
--- a/lib/libc/Makefile.inc
+++ b/lib/libc/Makefile.inc
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.inc,v 1.22 2014/08/31 09:36:39 miod Exp $
+# $OpenBSD: Makefile.inc,v 1.23 2015/08/31 02:53:56 guenther Exp $
#
# This file contains make rules used to build libc
#
@@ -8,7 +8,8 @@ all:
@echo "need to define LIBCSRCDIR" >&2; exit 1
.endif
-CFLAGS+= -I${LIBCSRCDIR}/include -Werror-implicit-function-declaration
+CFLAGS+=-I${LIBCSRCDIR}/include -I${LIBCSRCDIR}/hidden \
+ -Werror-implicit-function-declaration
# Include link-time warnings about unsafe API uses (ie. strcpy)
CFLAGS+=-DAPIWARN
diff --git a/lib/libc/Symbols.list b/lib/libc/Symbols.list
index 3a05331230b..10e01678c7d 100644
--- a/lib/libc/Symbols.list
+++ b/lib/libc/Symbols.list
@@ -519,8 +519,6 @@ __sys_errlist
__sys_nerr
__sys_siglist
_ctype_
-_err
-_errx
_getgrent_yp
_longjmp
_ng_makekey
@@ -538,12 +536,6 @@ _tolower
_tolower_tab_
_toupper
_toupper_tab_
-_verr
-_verrx
-_vwarn
-_vwarnx
-_warn
-_warnx
alarm
alphasort
auth_approval
@@ -827,10 +819,6 @@ errc
verrc
vwarnc
warnc
-_errc
-_verrc
-_vwarnc
-_warnc
/* crypt */
Blowfish_decipher
diff --git a/lib/libc/arch/alpha/SYS.h b/lib/libc/arch/alpha/SYS.h
index f1d15c6a501..e05715cca4b 100644
--- a/lib/libc/arch/alpha/SYS.h
+++ b/lib/libc/arch/alpha/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.10 2015/04/07 01:27:06 guenther Exp $ */
+/* $OpenBSD: SYS.h,v 1.11 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: SYS.h,v 1.4 1996/10/17 03:03:53 cgd Exp $ */
/*
@@ -31,6 +31,29 @@
#include <machine/asm.h>
#include <sys/syscall.h>
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); \
+ .size _HIDDEN(x), . - _HIDDEN(x)
+#define END_WEAK(x) END_STRONG(x); .weak x
+
#define CALLSYS_ERROR(name) \
CALLSYS_NOERROR(name); \
diff --git a/lib/libc/arch/alpha/string/bcopy.S b/lib/libc/arch/alpha/string/bcopy.S
index 65a7d55e407..8008a44c9db 100644
--- a/lib/libc/arch/alpha/string/bcopy.S
+++ b/lib/libc/arch/alpha/string/bcopy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bcopy.S,v 1.7 2014/11/30 19:43:54 deraadt Exp $ */
+/* $OpenBSD: bcopy.S,v 1.8 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: bcopy.S,v 1.3 1996/10/17 03:08:11 cgd Exp $ */
/*
@@ -29,7 +29,7 @@
* rights to redistribute these changes.
*/
-#include <machine/asm.h>
+#include "SYS.h"
#define SRCREG a0
#define DSTREG a1
@@ -266,4 +266,4 @@ bcopy_ov_short:
ldq_u t2,0(SRCREG)
br zero,bcopy_da_finish
- END(bcopy)
+ END_WEAK(bcopy)
diff --git a/lib/libc/arch/alpha/string/bzero.S b/lib/libc/arch/alpha/string/bzero.S
index 5967dcb0f1a..159a2fd815b 100644
--- a/lib/libc/arch/alpha/string/bzero.S
+++ b/lib/libc/arch/alpha/string/bzero.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bzero.S,v 1.4 2005/08/07 16:40:13 espie Exp $ */
+/* $OpenBSD: bzero.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: bzero.S,v 1.2 1996/10/17 03:08:12 cgd Exp $ */
/*
@@ -28,7 +28,7 @@
* rights to redistribute these changes.
*/
-#include <machine/asm.h>
+#include "SYS.h"
LEAF(bzero,2)
ble a1,bzero_done
@@ -108,4 +108,4 @@ bzero_finish_lp_done:
bzero_done:
RET
- END(bzero)
+ END_WEAK(bzero)
diff --git a/lib/libc/arch/alpha/string/ffs.S b/lib/libc/arch/alpha/string/ffs.S
index 9ad222a4806..6600b3aeeb2 100644
--- a/lib/libc/arch/alpha/string/ffs.S
+++ b/lib/libc/arch/alpha/string/ffs.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: ffs.S,v 1.2 2004/10/01 04:08:45 jsg Exp $ */
+/* $OpenBSD: ffs.S,v 1.3 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: ffs.S,v 1.3 1996/10/17 03:08:13 cgd Exp $ */
/*
@@ -32,7 +32,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
LEAF(ffs, 1)
addl a0, 0, t0
@@ -89,4 +89,4 @@ Ldone:
Lallzero:
bis zero, zero, v0
RET
-END(ffs)
+END_WEAK(ffs)
diff --git a/lib/libc/arch/alpha/string/memcpy.S b/lib/libc/arch/alpha/string/memcpy.S
index 695872491ea..ffdcea3b832 100644
--- a/lib/libc/arch/alpha/string/memcpy.S
+++ b/lib/libc/arch/alpha/string/memcpy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memcpy.S,v 1.5 2014/11/30 19:43:54 deraadt Exp $ */
+/* $OpenBSD: memcpy.S,v 1.6 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: bcopy.S,v 1.3 1996/10/17 03:08:11 cgd Exp $ */
/*
@@ -29,7 +29,7 @@
* rights to redistribute these changes.
*/
-#include <machine/asm.h>
+#include "SYS.h"
#define SRCREG a1
#define DSTREG a0
@@ -197,4 +197,4 @@ bcopy_da_finish:
bcopy_done:
RET
- END(memcpy)
+ END_STRONG(memcpy)
diff --git a/lib/libc/arch/alpha/string/memmove.S b/lib/libc/arch/alpha/string/memmove.S
index dc74e8c3de4..f0ebde808e8 100644
--- a/lib/libc/arch/alpha/string/memmove.S
+++ b/lib/libc/arch/alpha/string/memmove.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memmove.S,v 1.5 2014/11/30 19:43:54 deraadt Exp $ */
+/* $OpenBSD: memmove.S,v 1.6 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: bcopy.S,v 1.3 1996/10/17 03:08:11 cgd Exp $ */
/*
@@ -29,7 +29,7 @@
* rights to redistribute these changes.
*/
-#include <machine/asm.h>
+#include "SYS.h"
#define SRCREG a1
#define DSTREG a0
@@ -270,4 +270,4 @@ bcopy_ov_short:
ldq_u t2,0(SRCREG)
br zero,bcopy_da_finish
- END(memmove)
+ END_STRONG(memmove)
diff --git a/lib/libc/arch/amd64/SYS.h b/lib/libc/arch/amd64/SYS.h
index a61385fc13a..d96101b77c4 100644
--- a/lib/libc/arch/amd64/SYS.h
+++ b/lib/libc/arch/amd64/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.13 2015/08/26 01:54:09 guenther Exp $ */
+/* $OpenBSD: SYS.h,v 1.14 2015/08/31 02:53:56 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -38,18 +38,40 @@
#include <machine/asm.h>
#include <sys/syscall.h>
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
+#define END_WEAK(x) END_STRONG(x); .weak x
+
#define SYSTRAP(x) movl $(SYS_ ## x),%eax; movq %rcx, %r10; syscall
#define SYSENTRY(x) \
SYSENTRY_HIDDEN(x); \
- .weak _C_LABEL(x); \
- _C_LABEL(x) = _C_LABEL(_thread_sys_ ## x)
+ WEAK_ALIAS(x, _thread_sys_##x)
#define SYSENTRY_HIDDEN(x) \
- ENTRY(_thread_sys_ ## x) \
+ ENTRY(_thread_sys_ ## x); \
+ _HIDDEN_FALIAS(x,_thread_sys_##x)
#define SYSEXIT_HIDDEN(x) END(_thread_sys_ ## x)
-#define SYSEXIT(x) SYSEXIT_HIDDEN(x); END(x)
+#define SYSEXIT(x) SYSEXIT_HIDDEN(x); END(x)
#define CERROR _C_LABEL(__cerror)
#define _CERROR _C_LABEL(___cerror)
diff --git a/lib/libc/arch/amd64/string/bcmp.S b/lib/libc/arch/amd64/string/bcmp.S
index 82d239bd233..fc7afe5b8be 100644
--- a/lib/libc/arch/amd64/string/bcmp.S
+++ b/lib/libc/arch/amd64/string/bcmp.S
@@ -1,4 +1,4 @@
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(bcmp)
xorl %eax,%eax /* clear return value */
@@ -18,4 +18,4 @@ ENTRY(bcmp)
L1: incl %eax
L2: ret
-END(bcmp)
+END_WEAK(bcmp)
diff --git a/lib/libc/arch/amd64/string/bzero.S b/lib/libc/arch/amd64/string/bzero.S
index e91dd882115..eb3a7713be7 100644
--- a/lib/libc/arch/amd64/string/bzero.S
+++ b/lib/libc/arch/amd64/string/bzero.S
@@ -4,7 +4,7 @@
* Adapted for NetBSD/x86_64 by Frank van der Linden <fvdl@wasabisystems.com>
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(bzero)
movq %rsi,%rdx
@@ -38,4 +38,4 @@ L1: movq %rdx,%rcx /* zero remainder by bytes */
stosb
ret
-END(bzero)
+END_WEAK(bzero)
diff --git a/lib/libc/arch/amd64/string/ffs.S b/lib/libc/arch/amd64/string/ffs.S
index 6738183a4ec..3e2d81e56b5 100644
--- a/lib/libc/arch/amd64/string/ffs.S
+++ b/lib/libc/arch/amd64/string/ffs.S
@@ -1,11 +1,11 @@
-/* $OpenBSD: ffs.S,v 1.2 2015/05/29 07:21:09 uebayasi Exp $ */
+/* $OpenBSD: ffs.S,v 1.3 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
* Adapted for NetBSD/x86_64 by Frank van der Linden <fvdl@wasabisystems.com>
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(ffs)
bsfl %edi,%eax
@@ -16,4 +16,4 @@ ENTRY(ffs)
_ALIGN_TEXT
L1: xorl %eax,%eax /* clear result */
ret
-END(ffs)
+END_WEAK(ffs)
diff --git a/lib/libc/arch/amd64/string/memchr.S b/lib/libc/arch/amd64/string/memchr.S
index 9458f87eb4c..4fe2d4d996a 100644
--- a/lib/libc/arch/amd64/string/memchr.S
+++ b/lib/libc/arch/amd64/string/memchr.S
@@ -4,7 +4,7 @@
* Adapted for NetBSD/x86_64 by Frank van der Linden <fvdl@wasabisystems.com>
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(memchr)
movb %sil,%al /* set character to search for */
@@ -19,4 +19,4 @@ ENTRY(memchr)
ret
L1: xorq %rax,%rax
ret
-END(memchr)
+END_STRONG(memchr)
diff --git a/lib/libc/arch/amd64/string/memmove.S b/lib/libc/arch/amd64/string/memmove.S
index f8bd571252c..8a924a06801 100644
--- a/lib/libc/arch/amd64/string/memmove.S
+++ b/lib/libc/arch/amd64/string/memmove.S
@@ -33,7 +33,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* memmove (dst,src,cnt)
@@ -86,5 +86,5 @@ ENTRY(memmove)
cld
ret
// END(memcpy)
-END(memmove)
-END(bcopy)
+END_STRONG(memmove)
+END_WEAK(bcopy)
diff --git a/lib/libc/arch/amd64/string/memset.S b/lib/libc/arch/amd64/string/memset.S
index 5b9d9a16ffc..779ea53b9f8 100644
--- a/lib/libc/arch/amd64/string/memset.S
+++ b/lib/libc/arch/amd64/string/memset.S
@@ -4,7 +4,7 @@
* Adapted for NetBSD/x86_64 by Frank van der Linden <fvdl@wasabisystems.com>
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(memset)
movq %rsi,%rax
@@ -53,4 +53,4 @@ L1: rep
movq %r11,%rax
ret
-END(memset)
+END_STRONG(memset)
diff --git a/lib/libc/arch/amd64/string/strchr.S b/lib/libc/arch/amd64/string/strchr.S
index a2f02a09664..285ce084114 100644
--- a/lib/libc/arch/amd64/string/strchr.S
+++ b/lib/libc/arch/amd64/string/strchr.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strchr.S,v 1.6 2015/05/29 07:21:09 uebayasi Exp $ */
+/* $OpenBSD: strchr.S,v 1.7 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: strchr.S,v 1.7 2014/03/22 19:16:34 jakllsch Exp $ */
/*-
@@ -32,7 +32,7 @@
/* See comments in strlen.S about checking words for byte values */
-#include <machine/asm.h>
+#include "SYS.h"
WEAK_ALIAS(index, strchr)
@@ -123,4 +123,4 @@ ENTRY(strchr)
sar %cl,%r10 /* top bytes 0xff */
and %r10,%rax /* clear lsb from unwanted low bytes */
jmp 21b
-END(strchr)
+END_STRONG(strchr)
diff --git a/lib/libc/arch/amd64/string/strcmp.S b/lib/libc/arch/amd64/string/strcmp.S
index 2aa55f45f15..752d8e8c1d7 100644
--- a/lib/libc/arch/amd64/string/strcmp.S
+++ b/lib/libc/arch/amd64/string/strcmp.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strcmp.S,v 1.5 2015/05/29 07:21:09 uebayasi Exp $ */
+/* $OpenBSD: strcmp.S,v 1.6 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: strcmp.S,v 1.2 2014/03/22 19:16:34 jakllsch Exp $ */
/*
@@ -6,7 +6,7 @@
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(strcmp)
/*
@@ -69,4 +69,4 @@ ENTRY(strcmp)
movzbq %dl,%rdx
subq %rdx,%rax
ret
-END(strcmp)
+END_STRONG(strcmp)
diff --git a/lib/libc/arch/amd64/string/strlen.S b/lib/libc/arch/amd64/string/strlen.S
index 7e7395385f2..bde5df68e6e 100644
--- a/lib/libc/arch/amd64/string/strlen.S
+++ b/lib/libc/arch/amd64/string/strlen.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strlen.S,v 1.4 2015/05/29 07:21:09 uebayasi Exp $ */
+/* $OpenBSD: strlen.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: strlen.S,v 1.6 2014/03/22 19:16:34 jakllsch Exp $ */
/*-
@@ -35,7 +35,7 @@
* (Only the long comment really remains his work!)
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* There are many well known branch-free sequences which are used
@@ -154,4 +154,4 @@ ENTRY(strlen)
dec %rsi
or %rsi,%rdx /* low bytes now non-zero */
jmp 2b
-END(strlen)
+END_STRONG(strlen)
diff --git a/lib/libc/arch/amd64/string/strrchr.S b/lib/libc/arch/amd64/string/strrchr.S
index 802be5a2831..44a3839cf96 100644
--- a/lib/libc/arch/amd64/string/strrchr.S
+++ b/lib/libc/arch/amd64/string/strrchr.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strrchr.S,v 1.6 2015/05/29 07:21:09 uebayasi Exp $ */
+/* $OpenBSD: strrchr.S,v 1.7 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: strrchr.S,v 1.3 2014/03/22 19:16:34 jakllsch Exp $ */
/*
@@ -6,7 +6,7 @@
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
WEAK_ALIAS(rindex, strrchr)
@@ -121,4 +121,4 @@ ENTRY(strrchr)
.Ldone:
ret
-END(strrchr)
+END_STRONG(strrchr)
diff --git a/lib/libc/arch/arm/SYS.h b/lib/libc/arch/arm/SYS.h
index ce42349711a..df72e5c1b3c 100644
--- a/lib/libc/arch/arm/SYS.h
+++ b/lib/libc/arch/arm/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.10 2015/08/26 01:54:09 guenther Exp $ */
+/* $OpenBSD: SYS.h,v 1.11 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: SYS.h,v 1.8 2003/08/07 16:42:02 agc Exp $ */
/*-
@@ -38,6 +38,30 @@
#include <machine/asm.h>
#include <sys/syscall.h>
+
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
+#define END_WEAK(x) END_STRONG(x); .weak x
+
+
#define SYSENTRY(x) \
.weak _C_LABEL(x); \
_C_LABEL(x) = _C_LABEL(_thread_sys_ ## x); \
diff --git a/lib/libc/arch/arm/string/_memcpy.S b/lib/libc/arch/arm/string/_memcpy.S
index dee8de3e080..ef2ccc442b9 100644
--- a/lib/libc/arch/arm/string/_memcpy.S
+++ b/lib/libc/arch/arm/string/_memcpy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: _memcpy.S,v 1.4 2015/06/08 14:22:05 jsg Exp $ */
+/* $OpenBSD: _memcpy.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: _memcpy.S,v 1.4 2003/04/05 23:08:52 bjh21 Exp $ */
/*-
@@ -30,7 +30,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* This is one fun bit of code ...
@@ -462,3 +462,4 @@ ENTRY(_memcpy)
.Lmemcpy_bsrcul1l4:
add r1, r1, #1
b .Lmemcpy_bl4
+END(_memcpy)
diff --git a/lib/libc/arch/arm/string/bcopy.S b/lib/libc/arch/arm/string/bcopy.S
index 3953fef1732..f71b5ce7cbd 100644
--- a/lib/libc/arch/arm/string/bcopy.S
+++ b/lib/libc/arch/arm/string/bcopy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bcopy.S,v 1.3 2008/06/26 05:42:04 ray Exp $ */
+/* $OpenBSD: bcopy.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: bcopy.S,v 1.2 2001/07/16 05:50:06 matt Exp $ */
/*-
@@ -30,7 +30,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/* bcopy = memcpy/memmove with arguments reversed. */
@@ -40,3 +40,4 @@ ENTRY(bcopy)
eor r1, r0, r1
eor r0, r1, r0
b PIC_SYM(_C_LABEL(_memcpy), PLT)
+END_WEAK(bcopy)
diff --git a/lib/libc/arch/arm/string/bzero.S b/lib/libc/arch/arm/string/bzero.S
index 40430a86873..419e2bbdc9d 100644
--- a/lib/libc/arch/arm/string/bzero.S
+++ b/lib/libc/arch/arm/string/bzero.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bzero.S,v 1.3 2008/06/26 05:42:04 ray Exp $ */
+/* $OpenBSD: bzero.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: bzero.S,v 1.2 2001/07/16 05:50:06 matt Exp $ */
/*-
@@ -30,9 +30,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(bzero)
mov r2, r1
mov r1, #0
b PIC_SYM(_C_LABEL(memset), PLT)
+END_WEAK(bzero)
diff --git a/lib/libc/arch/arm/string/ffs.S b/lib/libc/arch/arm/string/ffs.S
index 9dd7e5aef2f..7f4b289d860 100644
--- a/lib/libc/arch/arm/string/ffs.S
+++ b/lib/libc/arch/arm/string/ffs.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: ffs.S,v 1.3 2009/10/28 06:49:54 deraadt Exp $ */
+/* $OpenBSD: ffs.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: ffs.S,v 1.5 2003/04/05 23:08:52 bjh21 Exp $ */
/*
* Copyright (c) 2001 Christopher Gilbert
@@ -29,7 +29,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* ffs - find first set bit, this algorithm isolates the first set
@@ -61,6 +61,7 @@ ENTRY(ffs)
ldrneb r0, [ r2, r0, lsr #26 ]
mov pc, lr
+END_WEAK(ffs)
.text;
.type .L_ffs_table, _ASM_TYPE_OBJECT;
.L_ffs_table:
diff --git a/lib/libc/arch/arm/string/memcmp.S b/lib/libc/arch/arm/string/memcmp.S
index 3a564c7338a..f7c5c966663 100644
--- a/lib/libc/arch/arm/string/memcmp.S
+++ b/lib/libc/arch/arm/string/memcmp.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memcmp.S,v 1.4 2009/10/28 06:49:54 deraadt Exp $ */
+/* $OpenBSD: memcmp.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: memcmp.S,v 1.2 2003/04/05 23:08:52 bjh21 Exp $ */
/*
@@ -29,7 +29,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(memcmp)
/* if (len == 0) return 0 */
@@ -50,3 +50,4 @@ ENTRY(memcmp)
beq 1b
sub r0, r2, r3
mov pc, lr
+END_STRONG(memcmp)
diff --git a/lib/libc/arch/arm/string/memcpy.S b/lib/libc/arch/arm/string/memcpy.S
index 6aeb5b84bac..5797c6d6f33 100644
--- a/lib/libc/arch/arm/string/memcpy.S
+++ b/lib/libc/arch/arm/string/memcpy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memcpy.S,v 1.4 2014/11/30 19:43:56 deraadt Exp $ */
+/* $OpenBSD: memcpy.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: memcpy.S,v 1.3 2003/04/05 23:08:52 bjh21 Exp $ */
/*-
@@ -30,7 +30,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* XXX
@@ -42,3 +42,4 @@ ENTRY(memcpy)
stmfd sp!, {r0, lr}
bl PIC_SYM(_C_LABEL(_memcpy), PLT)
ldmfd sp!, {r0, pc}
+END_STRONG(memcpy)
diff --git a/lib/libc/arch/arm/string/memmove.S b/lib/libc/arch/arm/string/memmove.S
index 8244afb7de1..c2f107e3cd8 100644
--- a/lib/libc/arch/arm/string/memmove.S
+++ b/lib/libc/arch/arm/string/memmove.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memmove.S,v 1.3 2008/06/26 05:42:04 ray Exp $ */
+/* $OpenBSD: memmove.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: memmove.S,v 1.3 2003/04/05 23:08:52 bjh21 Exp $ */
/*-
@@ -30,9 +30,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(memmove)
stmfd sp!, {r0, lr}
bl PIC_SYM(_C_LABEL(_memcpy), PLT)
ldmfd sp!, {r0, pc}
+END_STRONG(memmove)
diff --git a/lib/libc/arch/arm/string/memset.S b/lib/libc/arch/arm/string/memset.S
index a4c3d158938..5ab2f9f3bcd 100644
--- a/lib/libc/arch/arm/string/memset.S
+++ b/lib/libc/arch/arm/string/memset.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memset.S,v 1.3 2015/06/08 14:22:05 jsg Exp $ */
+/* $OpenBSD: memset.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: memset.S,v 1.3 2003/04/05 23:08:52 bjh21 Exp $ */
/*
@@ -33,7 +33,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* Sets a block of memory to the specified value
@@ -127,3 +127,4 @@ ENTRY(memset)
ldmfd sp!, {r0}
mov pc, lr /* Exit */
+END_STRONG(memset)
diff --git a/lib/libc/arch/arm/string/strcmp.S b/lib/libc/arch/arm/string/strcmp.S
index ea6078e7f9c..223610d0925 100644
--- a/lib/libc/arch/arm/string/strcmp.S
+++ b/lib/libc/arch/arm/string/strcmp.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strcmp.S,v 1.3 2005/08/07 16:40:14 espie Exp $ */
+/* $OpenBSD: strcmp.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: strcmp.S,v 1.3 2003/04/05 23:08:52 bjh21 Exp $ */
/*
@@ -29,7 +29,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(strcmp)
1:
@@ -40,3 +40,4 @@ ENTRY(strcmp)
beq 1b
sub r0, r2, r3
mov pc, lr
+END_STRONG(strcmp)
diff --git a/lib/libc/arch/arm/string/strncmp.S b/lib/libc/arch/arm/string/strncmp.S
index f8960bbc84b..1014d5dc4ea 100644
--- a/lib/libc/arch/arm/string/strncmp.S
+++ b/lib/libc/arch/arm/string/strncmp.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strncmp.S,v 1.4 2009/05/03 05:09:40 drahn Exp $ */
+/* $OpenBSD: strncmp.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/* $NetBSD: strncmp.S,v 1.2 2003/04/05 23:08:52 bjh21 Exp $ */
/*
@@ -29,7 +29,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(strncmp)
/* if (len == 0) return 0 */
@@ -51,3 +51,4 @@ ENTRY(strncmp)
beq 1b
sub r0, r2, r3
mov pc, lr
+END_STRONG(strncmp)
diff --git a/lib/libc/arch/hppa/SYS.h b/lib/libc/arch/hppa/SYS.h
index a2dbef50244..b07287224b2 100644
--- a/lib/libc/arch/hppa/SYS.h
+++ b/lib/libc/arch/hppa/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.17 2015/04/07 01:27:06 guenther Exp $ */
+/* $OpenBSD: SYS.h,v 1.18 2015/08/31 02:53:56 guenther Exp $ */
/*
* Copyright (c) 1998-2002 Michael Shalayeff
@@ -33,6 +33,32 @@
#include <machine/vmparam.h>
#undef _LOCORE
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y) !\
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y) !\
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * EXIT_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * EXIT_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define EXIT_STRONG(x) EXIT(x) !\
+ _HIDDEN_FALIAS(x,x) !\
+ .size _HIDDEN(x), . - _HIDDEN(x)
+#define EXIT_WEAK(x) EXIT_STRONG(x) !\
+ .weak x
+
+
#define SYSENTRY(x) !\
LEAF_ENTRY(__CONCAT(_thread_sys_,x)) !\
WEAK_ALIAS(x,__CONCAT(_thread_sys_,x))
diff --git a/lib/libc/arch/hppa/string/memmove.S b/lib/libc/arch/hppa/string/memmove.S
index 8ed210a168a..4b14de65110 100644
--- a/lib/libc/arch/hppa/string/memmove.S
+++ b/lib/libc/arch/hppa/string/memmove.S
@@ -31,11 +31,7 @@
*/
-
-#undef _LOCORE
-#define _LOCORE
-#include <machine/asm.h>
-#include <machine/frame.h>
+#include "SYS.h"
LEAF_ENTRY(bcopy)
@@ -155,6 +151,6 @@ $bcopy_r.done
bv 0(rp)
nop
-EXIT(bcopy)
+EXIT_WEAK(bcopy)
.end
diff --git a/lib/libc/arch/hppa64/SYS.h b/lib/libc/arch/hppa64/SYS.h
index 510ab2c5fba..c61fcface6b 100644
--- a/lib/libc/arch/hppa64/SYS.h
+++ b/lib/libc/arch/hppa64/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.7 2015/04/07 01:27:06 guenther Exp $ */
+/* $OpenBSD: SYS.h,v 1.8 2015/08/31 02:53:56 guenther Exp $ */
/*
* Copyright (c) 1998-2002 Michael Shalayeff
@@ -33,6 +33,32 @@
#include <machine/vmparam.h>
#undef _LOCORE
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y) !\
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y) !\
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * EXIT_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * EXIT_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define EXIT_STRONG(x) EXIT(x) !\
+ _HIDDEN_FALIAS(x,x) !\
+ .size _HIDDEN(x), . - _HIDDEN(x)
+#define EXIT_WEAK(x) EXIT_STRONG(x) !\
+ .weak x
+
+
#define SYSENTRY(x) !\
LEAF_ENTRY(__CONCAT(_thread_sys_,x)) !\
WEAK_ALIAS(x,__CONCAT(_thread_sys_,x))
diff --git a/lib/libc/arch/i386/SYS.h b/lib/libc/arch/i386/SYS.h
index 9328b480020..4e1a54f003e 100644
--- a/lib/libc/arch/i386/SYS.h
+++ b/lib/libc/arch/i386/SYS.h
@@ -29,12 +29,36 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $OpenBSD: SYS.h,v 1.21 2015/08/26 01:54:09 guenther Exp $
+ * $OpenBSD: SYS.h,v 1.22 2015/08/31 02:53:56 guenther Exp $
*/
#include <machine/asm.h>
#include <sys/syscall.h>
+
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
+#define END_WEAK(x) END_STRONG(x); .weak x
+
+
/*
* Design note:
*
diff --git a/lib/libc/arch/i386/string/bcmp.S b/lib/libc/arch/i386/string/bcmp.S
index a5b46ae745a..b55c93a6e14 100644
--- a/lib/libc/arch/i386/string/bcmp.S
+++ b/lib/libc/arch/i386/string/bcmp.S
@@ -1,10 +1,10 @@
-/* $OpenBSD: bcmp.S,v 1.3 2005/08/07 11:30:38 espie Exp $ */
+/* $OpenBSD: bcmp.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(bcmp)
pushl %edi
@@ -30,3 +30,4 @@ L1: incl %eax
L2: popl %esi
popl %edi
ret
+END_WEAK(bcmp)
diff --git a/lib/libc/arch/i386/string/bzero.S b/lib/libc/arch/i386/string/bzero.S
index eea840afdca..43251b5cdff 100644
--- a/lib/libc/arch/i386/string/bzero.S
+++ b/lib/libc/arch/i386/string/bzero.S
@@ -1,10 +1,10 @@
-/* $OpenBSD: bzero.S,v 1.4 2007/05/25 20:32:29 krw Exp $ */
+/* $OpenBSD: bzero.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(bzero)
pushl %edi
@@ -41,3 +41,4 @@ L1: movl %edx,%ecx /* zero remainder by bytes */
popl %edi
ret
+END_WEAK(bzero)
diff --git a/lib/libc/arch/i386/string/ffs.S b/lib/libc/arch/i386/string/ffs.S
index 96affabed07..4de8c6aaaf0 100644
--- a/lib/libc/arch/i386/string/ffs.S
+++ b/lib/libc/arch/i386/string/ffs.S
@@ -1,10 +1,10 @@
-/* $OpenBSD: ffs.S,v 1.3 2005/08/07 11:30:38 espie Exp $ */
+/* $OpenBSD: ffs.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(ffs)
bsfl 4(%esp),%eax
@@ -15,3 +15,4 @@ ENTRY(ffs)
.align 2
L1: xorl %eax,%eax /* clear result */
ret
+END_WEAK(ffs)
diff --git a/lib/libc/arch/i386/string/memchr.S b/lib/libc/arch/i386/string/memchr.S
index d6bcbe688b5..87191eb0f2d 100644
--- a/lib/libc/arch/i386/string/memchr.S
+++ b/lib/libc/arch/i386/string/memchr.S
@@ -1,10 +1,10 @@
-/* $OpenBSD: memchr.S,v 1.3 2005/08/07 11:30:38 espie Exp $ */
+/* $OpenBSD: memchr.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(memchr)
pushl %edi
@@ -24,3 +24,4 @@ ENTRY(memchr)
L1: xorl %eax,%eax
popl %edi
ret
+END_STRONG(memchr)
diff --git a/lib/libc/arch/i386/string/memcmp.S b/lib/libc/arch/i386/string/memcmp.S
index 1be189aefbb..171af0734b1 100644
--- a/lib/libc/arch/i386/string/memcmp.S
+++ b/lib/libc/arch/i386/string/memcmp.S
@@ -1,10 +1,10 @@
-/* $OpenBSD: memcmp.S,v 1.4 2005/08/07 11:30:38 espie Exp $ */
+/* $OpenBSD: memcmp.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(memcmp)
pushl %edi
@@ -41,3 +41,4 @@ L6: movzbl -1(%edi),%eax /* Perform unsigned comparison */
popl %esi
popl %edi
ret
+END_STRONG(memcmp)
diff --git a/lib/libc/arch/i386/string/memmove.S b/lib/libc/arch/i386/string/memmove.S
index a1621ec1f1e..afa465aa4dd 100644
--- a/lib/libc/arch/i386/string/memmove.S
+++ b/lib/libc/arch/i386/string/memmove.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memmove.S,v 1.5 2014/12/02 03:07:13 tedu Exp $ */
+/* $OpenBSD: memmove.S,v 1.6 2015/08/31 02:53:56 guenther Exp $ */
/*-
* Copyright (c) 1993, 1994, 1995 Charles M. Hannum. All rights reserved.
@@ -33,8 +33,7 @@
* SUCH DAMAGE.
*/
-#include <machine/param.h>
-#include <machine/asm.h>
+#include "SYS.h"
/*
* Emulate bcopy() by swapping the first two arguments, and jumping
@@ -105,4 +104,5 @@ docopyf:
popl %esi
cld
ret
-
+END_STRONG(memmove)
+END_WEAK(bcopy)
diff --git a/lib/libc/arch/i386/string/memset.S b/lib/libc/arch/i386/string/memset.S
index 912b74a19e1..0eb4381558e 100644
--- a/lib/libc/arch/i386/string/memset.S
+++ b/lib/libc/arch/i386/string/memset.S
@@ -1,10 +1,10 @@
-/* $OpenBSD: memset.S,v 1.4 2007/05/25 20:32:29 krw Exp $ */
+/* $OpenBSD: memset.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(memset)
pushl %edi
@@ -53,3 +53,4 @@ L1: rep
popl %ebx
popl %edi
ret
+END_STRONG(memset)
diff --git a/lib/libc/arch/i386/string/strcat.S b/lib/libc/arch/i386/string/strcat.S
index 60fdd554ee0..fb8008e8035 100644
--- a/lib/libc/arch/i386/string/strcat.S
+++ b/lib/libc/arch/i386/string/strcat.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strcat.S,v 1.8 2005/08/07 11:30:38 espie Exp $ */
+/* $OpenBSD: strcat.S,v 1.9 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
@@ -71,3 +71,4 @@ L1: movb (%edx),%al /* unroll loop, but not too much */
L2: popl %eax /* pop destination address */
popl %edi /* restore edi */
ret
+END(strcat)
diff --git a/lib/libc/arch/i386/string/strchr.S b/lib/libc/arch/i386/string/strchr.S
index f8cd8e6589a..3792d2292ab 100644
--- a/lib/libc/arch/i386/string/strchr.S
+++ b/lib/libc/arch/i386/string/strchr.S
@@ -1,10 +1,10 @@
-/* $OpenBSD: strchr.S,v 1.6 2015/05/15 22:29:37 millert Exp $ */
+/* $OpenBSD: strchr.S,v 1.7 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
WEAK_ALIAS(index, strchr)
@@ -22,3 +22,4 @@ L1:
xorl %eax,%eax
L2:
ret
+END_STRONG(strchr)
diff --git a/lib/libc/arch/i386/string/strcmp.S b/lib/libc/arch/i386/string/strcmp.S
index 22ba5460eae..373232419e9 100644
--- a/lib/libc/arch/i386/string/strcmp.S
+++ b/lib/libc/arch/i386/string/strcmp.S
@@ -1,10 +1,10 @@
-/* $OpenBSD: strcmp.S,v 1.3 2005/08/07 11:30:38 espie Exp $ */
+/* $OpenBSD: strcmp.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* NOTE: I've unrolled the loop eight times: large enough to make a
@@ -79,3 +79,4 @@ L3: movzbl (%eax),%eax /* unsigned comparison */
movzbl (%edx),%edx
subl %edx,%eax
ret
+END_STRONG(strcmp)
diff --git a/lib/libc/arch/i386/string/strcpy.S b/lib/libc/arch/i386/string/strcpy.S
index 341eb6c39a9..f72990f8f0e 100644
--- a/lib/libc/arch/i386/string/strcpy.S
+++ b/lib/libc/arch/i386/string/strcpy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strcpy.S,v 1.8 2005/08/07 11:30:38 espie Exp $ */
+/* $OpenBSD: strcpy.S,v 1.9 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
@@ -61,3 +61,4 @@ L1: movb (%edx),%al /* unroll loop, but not too much */
jnz L1
L2: popl %eax /* pop dst address */
ret
+END(strcpy)
diff --git a/lib/libc/arch/i386/string/strncmp.S b/lib/libc/arch/i386/string/strncmp.S
index 5aa88d7e798..6e480c95f2e 100644
--- a/lib/libc/arch/i386/string/strncmp.S
+++ b/lib/libc/arch/i386/string/strncmp.S
@@ -1,10 +1,10 @@
-/* $OpenBSD: strncmp.S,v 1.3 2005/08/07 11:30:38 espie Exp $ */
+/* $OpenBSD: strncmp.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* NOTE: I've unrolled the loop eight times: large enough to make a
@@ -111,3 +111,4 @@ L3: movzbl (%eax),%eax /* unsigned comparision */
L4: xorl %eax,%eax
popl %ebx
ret
+END_STRONG(strncmp)
diff --git a/lib/libc/arch/i386/string/strrchr.S b/lib/libc/arch/i386/string/strrchr.S
index 738c369b378..e1f5cc2e32e 100644
--- a/lib/libc/arch/i386/string/strrchr.S
+++ b/lib/libc/arch/i386/string/strrchr.S
@@ -1,10 +1,10 @@
-/* $OpenBSD: strrchr.S,v 1.6 2015/05/15 22:29:37 millert Exp $ */
+/* $OpenBSD: strrchr.S,v 1.7 2015/08/31 02:53:56 guenther Exp $ */
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
* Public domain.
*/
-#include <machine/asm.h>
+#include "SYS.h"
WEAK_ALIAS(rindex, strrchr)
@@ -25,3 +25,4 @@ L2:
jnz L1
popl %ebx
ret
+END_STRONG(strrchr)
diff --git a/lib/libc/arch/m88k/SYS.h b/lib/libc/arch/m88k/SYS.h
index 70292c9d585..0c48e6cedeb 100644
--- a/lib/libc/arch/m88k/SYS.h
+++ b/lib/libc/arch/m88k/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.19 2015/04/07 01:27:06 guenther Exp $*/
+/* $OpenBSD: SYS.h,v 1.20 2015/08/31 02:53:56 guenther Exp $*/
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -37,6 +37,29 @@
#include <sys/syscall.h>
#include <machine/asm.h>
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
+#define END_WEAK(x) END_STRONG(x); .weak x
+
+
#define __CONCAT(p,x) p##x
#define __ENTRY(p,x) ENTRY(__CONCAT(p,x))
#define __END(p,x) END(__CONCAT(p,x))
diff --git a/lib/libc/arch/mips64/SYS.h b/lib/libc/arch/mips64/SYS.h
index 55926724eb9..f9b2063dc5b 100644
--- a/lib/libc/arch/mips64/SYS.h
+++ b/lib/libc/arch/mips64/SYS.h
@@ -29,12 +29,37 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $OpenBSD: SYS.h,v 1.7 2015/04/07 01:27:06 guenther Exp $
+ * $OpenBSD: SYS.h,v 1.8 2015/08/31 02:53:56 guenther Exp $
*/
#include <sys/syscall.h>
#include <machine/asm.h>
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) END(x); \
+ _HIDDEN_FALIAS(x,x); \
+ .size _HIDDEN(x), . - _HIDDEN(x)
+#define END_WEAK(x) END_STRONG(x); .weak x
+
+
#define CERROR _C_LABEL(__cerror)
#define _CERROR _C_LABEL(___cerror)
diff --git a/lib/libc/arch/mips64/string/bcmp.S b/lib/libc/arch/mips64/string/bcmp.S
index 2ff4a6e817e..fe51d35fce4 100644
--- a/lib/libc/arch/mips64/string/bcmp.S
+++ b/lib/libc/arch/mips64/string/bcmp.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bcmp.S,v 1.4 2009/12/11 05:10:17 miod Exp $ */
+/* $OpenBSD: bcmp.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/* bcmp(s1, s2, n) */
@@ -109,4 +109,4 @@ nomatch:
j ra
li v0, 1
.set reorder
-END(bcmp)
+END_WEAK(bcmp)
diff --git a/lib/libc/arch/mips64/string/bcopy.S b/lib/libc/arch/mips64/string/bcopy.S
index e5098a2cffc..bd63a62a890 100644
--- a/lib/libc/arch/mips64/string/bcopy.S
+++ b/lib/libc/arch/mips64/string/bcopy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bcopy.S,v 1.4 2009/12/11 05:10:17 miod Exp $ */
+/* $OpenBSD: bcopy.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/* bcopy(s1, s2, n) */
@@ -116,4 +116,4 @@ smallcpy:
j ra
nop
.set reorder
-END(bcopy)
+END_WEAK(bcopy)
diff --git a/lib/libc/arch/mips64/string/bzero.S b/lib/libc/arch/mips64/string/bzero.S
index 0b0c477aaa7..8fae96ec188 100644
--- a/lib/libc/arch/mips64/string/bzero.S
+++ b/lib/libc/arch/mips64/string/bzero.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bzero.S,v 1.5 2009/12/11 05:10:17 miod Exp $ */
+/* $OpenBSD: bzero.S,v 1.6 2015/08/31 02:53:56 guenther Exp $ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/* bzero(s1, n) */
@@ -63,4 +63,4 @@ smallclr:
2:
j ra
nop
-END(bzero)
+END_WEAK(bzero)
diff --git a/lib/libc/arch/mips64/string/ffs.S b/lib/libc/arch/mips64/string/ffs.S
index 0fa0803e316..f09de46a930 100644
--- a/lib/libc/arch/mips64/string/ffs.S
+++ b/lib/libc/arch/mips64/string/ffs.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: ffs.S,v 1.3 2005/08/07 16:40:15 espie Exp $ */
+/* $OpenBSD: ffs.S,v 1.4 2015/08/31 02:53:56 guenther Exp $ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/* bit = ffs(value) */
@@ -46,4 +46,4 @@ LEAF(ffs, 0)
beq v1, zero, 1b # no, continue
done:
j ra
-END(ffs)
+END_WEAK(ffs)
diff --git a/lib/libc/arch/mips64/string/strchr.S b/lib/libc/arch/mips64/string/strchr.S
index a5a12c53940..05f50f0da73 100644
--- a/lib/libc/arch/mips64/string/strchr.S
+++ b/lib/libc/arch/mips64/string/strchr.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strchr.S,v 1.2 2015/05/15 22:29:37 millert Exp $ */
+/* $OpenBSD: strchr.S,v 1.3 2015/08/31 02:53:56 guenther Exp $ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
WEAK_ALIAS(index, strchr)
@@ -48,4 +48,4 @@ notfnd:
fnd:
dsubu v0, a0, 1
j ra
-END(strchr)
+END_STRONG(strchr)
diff --git a/lib/libc/arch/mips64/string/strcmp.S b/lib/libc/arch/mips64/string/strcmp.S
index 7193a6bf131..282cc929441 100644
--- a/lib/libc/arch/mips64/string/strcmp.S
+++ b/lib/libc/arch/mips64/string/strcmp.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strcmp.S,v 1.4 2009/12/11 05:10:17 miod Exp $ */
+/* $OpenBSD: strcmp.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* NOTE: this version assumes unsigned chars in order to be "8 bit clean".
@@ -55,4 +55,4 @@ NotEq:
LessOrEq:
dsubu v0, zero, t1
j ra
-END(strcmp)
+END_STRONG(strcmp)
diff --git a/lib/libc/arch/mips64/string/strlen.S b/lib/libc/arch/mips64/string/strlen.S
index 5bc80bf847c..7817d753fdb 100644
--- a/lib/libc/arch/mips64/string/strlen.S
+++ b/lib/libc/arch/mips64/string/strlen.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strlen.S,v 1.4 2009/12/11 05:10:17 miod Exp $ */
+/* $OpenBSD: strlen.S,v 1.5 2015/08/31 02:53:56 guenther Exp $ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
LEAF(strlen, 0)
.set reorder
@@ -42,4 +42,4 @@ LEAF(strlen, 0)
bne v0, zero, 1b # continue if not end
dsubu v0, a0, v1 # compute length - 1 for '\0' char
j ra
-END(strlen)
+END_STRONG(strlen)
diff --git a/lib/libc/arch/mips64/string/strrchr.S b/lib/libc/arch/mips64/string/strrchr.S
index a7f5b74c320..ad35b84cb95 100644
--- a/lib/libc/arch/mips64/string/strrchr.S
+++ b/lib/libc/arch/mips64/string/strrchr.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strrchr.S,v 1.2 2015/05/15 22:29:37 millert Exp $ */
+/* $OpenBSD: strrchr.S,v 1.3 2015/08/31 02:53:56 guenther Exp $ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
WEAK_ALIAS(rindex, strrchr)
@@ -46,4 +46,4 @@ LEAF(strrchr, 0)
2:
bne a3, zero, 1b # continue if not end
j ra
-END(strrchr)
+END_STRONG(strrchr)
diff --git a/lib/libc/arch/powerpc/SYS.h b/lib/libc/arch/powerpc/SYS.h
index 6303d68f7b6..b9cd88b7c30 100644
--- a/lib/libc/arch/powerpc/SYS.h
+++ b/lib/libc/arch/powerpc/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.17 2015/08/23 15:51:28 kettenis Exp $ */
+/* $OpenBSD: SYS.h,v 1.18 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1994
* Andrew Cagney. All rights reserved.
@@ -44,6 +44,29 @@
#include "machine/asm.h"
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
+#define END_WEAK(x) END_STRONG(x); .weak x
+
+
#define _CONCAT(x,y) x##y
#define PSEUDO_PREFIX(p,x,y) .extern _ASM_LABEL(___cerror) ; \
ENTRY(p##x) \
diff --git a/lib/libc/arch/powerpc/string/memmove.S b/lib/libc/arch/powerpc/string/memmove.S
index 875c562b0b2..80aca10ce78 100644
--- a/lib/libc/arch/powerpc/string/memmove.S
+++ b/lib/libc/arch/powerpc/string/memmove.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memmove.S,v 1.1 2014/12/04 12:10:26 deraadt Exp $ */
+/* $OpenBSD: memmove.S,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: memmove.S,v 1.3 2011/01/15 07:31:12 matt Exp $ */
/* stropt/memmove.S, pl_string_common, pl_linux 10/11/04 11:45:37
@@ -39,7 +39,7 @@
* ==========================================================================
*/
-#include <machine/asm.h>
+#include "SYS.h"
.text
@@ -166,3 +166,5 @@ rlast2:
bdnz+ rlast2 /* Dec ctr, and branch if more */
/* bytes left */
blr
+END_STRONG(memmove)
+END_WEAK(bcopy)
diff --git a/lib/libc/arch/sh/SYS.h b/lib/libc/arch/sh/SYS.h
index 468e265c947..ac7991f7cd3 100644
--- a/lib/libc/arch/sh/SYS.h
+++ b/lib/libc/arch/sh/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.6 2015/04/07 01:27:06 guenther Exp $ */
+/* $OpenBSD: SYS.h,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -37,6 +37,31 @@
#include <machine/asm.h>
#include <sys/syscall.h>
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) SET_ENTRY_SIZE(x); \
+ _HIDDEN_FALIAS(x,x); \
+ SET_ENTRY_SIZE(_HIDDEN(x))
+#define END_WEAK(x) END_STRONG(x); .weak x
+
+
#define SYSENTRY(x) \
WEAK_ALIAS(x,_thread_sys_ ## x); \
ENTRY(_thread_sys_ ## x)
diff --git a/lib/libc/arch/sh/string/bcopy.S b/lib/libc/arch/sh/string/bcopy.S
index 533583d9792..473bc429bbe 100644
--- a/lib/libc/arch/sh/string/bcopy.S
+++ b/lib/libc/arch/sh/string/bcopy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bcopy.S,v 1.2 2014/11/30 19:43:56 deraadt Exp $ */
+/* $OpenBSD: bcopy.S,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: memcpy.S,v 1.2 2006/04/22 23:53:47 uwe Exp $ */
/*
@@ -28,7 +28,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
#define REG_SRC r4
#define REG_DST r5
@@ -238,3 +238,4 @@ ov_no_align_delay:
9:
rts
nop
+END_WEAK(bcopy)
diff --git a/lib/libc/arch/sh/string/ffs.S b/lib/libc/arch/sh/string/ffs.S
index 7e0dd7e2834..0a639c79211 100644
--- a/lib/libc/arch/sh/string/ffs.S
+++ b/lib/libc/arch/sh/string/ffs.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: ffs.S,v 1.2 2008/06/26 05:42:05 ray Exp $ */
+/* $OpenBSD: ffs.S,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: ffs.S,v 1.1 2005/12/20 19:28:50 christos Exp $ */
/*-
@@ -30,7 +30,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* ffs - find first bit set
@@ -91,3 +91,4 @@ L8bit:
Lzero: rts
nop
+END_WEAK(ffs)
diff --git a/lib/libc/arch/sh/string/memcpy.S b/lib/libc/arch/sh/string/memcpy.S
index f12004e1edd..ed266caa71c 100644
--- a/lib/libc/arch/sh/string/memcpy.S
+++ b/lib/libc/arch/sh/string/memcpy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memcpy.S,v 1.2 2014/11/30 19:43:56 deraadt Exp $ */
+/* $OpenBSD: memcpy.S,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: memcpy.S,v 1.2 2006/04/22 23:53:47 uwe Exp $ */
/*
@@ -28,7 +28,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
#define REG_DST0 r3
#define REG_SRC r5
@@ -137,3 +137,4 @@ no_align_delay:
bcopy_return:
rts
mov REG_DST0,r0
+END_STRONG(memcpy)
diff --git a/lib/libc/arch/sh/string/memmove.S b/lib/libc/arch/sh/string/memmove.S
index 3a570c62355..131be417efc 100644
--- a/lib/libc/arch/sh/string/memmove.S
+++ b/lib/libc/arch/sh/string/memmove.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memmove.S,v 1.2 2014/11/30 19:43:56 deraadt Exp $ */
+/* $OpenBSD: memmove.S,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: memcpy.S,v 1.2 2006/04/22 23:53:47 uwe Exp $ */
/*
@@ -28,7 +28,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
#define REG_DST0 r3
#define REG_SRC r5
@@ -239,3 +239,4 @@ ov_no_align_delay:
9:
rts
mov REG_DST0,r0
+END_STRONG(memmove)
diff --git a/lib/libc/arch/sh/string/memset.S b/lib/libc/arch/sh/string/memset.S
index 2ed22197ce8..f82f4a4ecfb 100644
--- a/lib/libc/arch/sh/string/memset.S
+++ b/lib/libc/arch/sh/string/memset.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memset.S,v 1.1 2006/10/10 22:07:10 miod Exp $ */
+/* $OpenBSD: memset.S,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: memset.S,v 1.1 2005/12/20 19:28:50 christos Exp $ */
/*-
@@ -27,7 +27,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
#define REG_PTR r0
#define REG_TMP1 r1
@@ -293,3 +293,8 @@ unaligned_len:
bra aligned
sub REG_DST,REG_LEN
+#ifdef BZERO
+END_WEAK(bzero)
+#else
+END_STRONG(memset)
+#endif
diff --git a/lib/libc/arch/sparc/DEFS.h b/lib/libc/arch/sparc/DEFS.h
index 151b30fd946..13efbc6a428 100644
--- a/lib/libc/arch/sparc/DEFS.h
+++ b/lib/libc/arch/sparc/DEFS.h
@@ -30,7 +30,30 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $OpenBSD: DEFS.h,v 1.3 2003/06/02 20:18:32 millert Exp $
+ * $OpenBSD: DEFS.h,v 1.4 2015/08/31 02:53:57 guenther Exp $
*/
#include <machine/asm.h>
+
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
+#define END_WEAK(x) END_STRONG(x); .weak x
+
diff --git a/lib/libc/arch/sparc/SYS.h b/lib/libc/arch/sparc/SYS.h
index 729c386bfaa..be262c8abfd 100644
--- a/lib/libc/arch/sparc/SYS.h
+++ b/lib/libc/arch/sparc/SYS.h
@@ -30,10 +30,10 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $OpenBSD: SYS.h,v 1.17 2015/04/07 01:27:07 guenther Exp $
+ * $OpenBSD: SYS.h,v 1.18 2015/08/31 02:53:57 guenther Exp $
*/
-#include <machine/asm.h>
+#include "DEFS.h"
#include <sys/syscall.h>
#include <machine/trap.h>
diff --git a/lib/libc/arch/sparc/string/bzero.S b/lib/libc/arch/sparc/string/bzero.S
index cb0a6845062..13ffe17f56b 100644
--- a/lib/libc/arch/sparc/string/bzero.S
+++ b/lib/libc/arch/sparc/string/bzero.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bzero.S,v 1.4 2005/08/07 16:40:15 espie Exp $ */
+/* $OpenBSD: bzero.S,v 1.5 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
@@ -134,3 +134,4 @@ Lstd:
1:
retl
nop
+END_WEAK(bzero)
diff --git a/lib/libc/arch/sparc/string/ffs.S b/lib/libc/arch/sparc/string/ffs.S
index ae885d896c4..530d7e706e6 100644
--- a/lib/libc/arch/sparc/string/ffs.S
+++ b/lib/libc/arch/sparc/string/ffs.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: ffs.S,v 1.5 2012/08/22 17:19:35 pascal Exp $ */
+/* $OpenBSD: ffs.S,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
@@ -83,6 +83,7 @@ ENTRY(ffs)
ldsb [%o2 + %o0], %o0
retl
add %o0, 24, %o0
+END_WEAK(ffs)
ffstab:
.byte -24,1,2,1,3,1,2,1,4,1,2,1,3,1,2,1 /* 00-0f */
diff --git a/lib/libc/arch/sparc/string/strlen.S b/lib/libc/arch/sparc/string/strlen.S
index 0144bd00a36..c23bfbeff0d 100644
--- a/lib/libc/arch/sparc/string/strlen.S
+++ b/lib/libc/arch/sparc/string/strlen.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strlen.S,v 1.4 2005/08/07 16:40:15 espie Exp $ */
+/* $OpenBSD: strlen.S,v 1.5 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
@@ -43,3 +43,4 @@ ENTRY(strlen)
inc %o0 ! always increment pointer
retl
sub %o0, %o1, %o0 ! return length (ptr - (origptr+1))
+END_STRONG(strlen)
diff --git a/lib/libc/arch/sparc64/SYS.h b/lib/libc/arch/sparc64/SYS.h
index 3f934da0323..6b2897480dd 100644
--- a/lib/libc/arch/sparc64/SYS.h
+++ b/lib/libc/arch/sparc64/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.12 2015/04/07 01:27:07 guenther Exp $ */
+/* $OpenBSD: SYS.h,v 1.13 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
@@ -46,6 +46,30 @@
#define __ENTRY(p,x) ENTRY(_CAT(p,x)) ; .weak x; x = _CAT(p,x)
#define __ENTRY_HIDDEN(p,x) ENTRY(_CAT(p,x))
+
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
+#define END_WEAK(x) END_STRONG(x); .weak x
+
+
/*
* ERROR branches to cerror. This is done with a macro so that I can
* change it to be position independent later, if need be.
diff --git a/lib/libc/arch/sparc64/string/ffs.S b/lib/libc/arch/sparc64/string/ffs.S
index ee55fdab384..7fd91f871b6 100644
--- a/lib/libc/arch/sparc64/string/ffs.S
+++ b/lib/libc/arch/sparc64/string/ffs.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: ffs.S,v 1.4 2012/08/22 17:19:35 pascal Exp $ */
+/* $OpenBSD: ffs.S,v 1.5 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -33,7 +33,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
/*
* ffs returns the number of the rightmost bit set in its argument,
* i.e., the lowest value such that (x & (ffs(x) - 1)) is nonzero.
@@ -83,6 +83,7 @@ ENTRY(ffs)
ldsb [%o2 + %o0], %o0
retl
add %o0, 24, %o0
+END_WEAK(ffs)
_C_LABEL(__ffstab):
.byte -24,1,2,1,3,1,2,1,4,1,2,1,3,1,2,1 /* 00-0f */
diff --git a/lib/libc/arch/sparc64/string/strlen.S b/lib/libc/arch/sparc64/string/strlen.S
index 08082ef8d58..8ef36a19870 100644
--- a/lib/libc/arch/sparc64/string/strlen.S
+++ b/lib/libc/arch/sparc64/string/strlen.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strlen.S,v 1.2 2003/06/02 20:18:33 millert Exp $ */
+/* $OpenBSD: strlen.S,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: strlen.S,v 1.1 1998/09/11 04:56:33 eeh Exp $ */
/*
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "SYS.h"
ENTRY(strlen)
add %o0, 1, %o1 ! save starting point + 1
@@ -44,3 +44,4 @@ ENTRY(strlen)
inc %o0 ! always increment pointer
retl
sub %o0, %o1, %o0 ! return length (ptr - (origptr+1))
+END_STRONG(strlen)
diff --git a/lib/libc/arch/vax/DEFS.h b/lib/libc/arch/vax/DEFS.h
index 415e86df113..13e0859dfa6 100644
--- a/lib/libc/arch/vax/DEFS.h
+++ b/lib/libc/arch/vax/DEFS.h
@@ -1,4 +1,27 @@
-/* $OpenBSD: DEFS.h,v 1.4 1996/08/19 08:18:17 tholo Exp $ */
+/* $OpenBSD: DEFS.h,v 1.5 2015/08/31 02:53:57 guenther Exp $ */
#include <machine/asm.h>
+/*
+ * We define a hidden alias with the prefix "_libc_" for each global symbol
+ * that may be used internally. By referencing _libc_x instead of x, other
+ * parts of libc prevent overriding by the application and avoid unnecessary
+ * relocations.
+ */
+#define _HIDDEN(x) _libc_##x
+#define _HIDDEN_ALIAS(x,y) \
+ STRONG_ALIAS(_HIDDEN(x),y); \
+ .hidden _HIDDEN(x)
+#define _HIDDEN_FALIAS(x,y) \
+ _HIDDEN_ALIAS(x,y); \
+ .type _HIDDEN(x),@function
+
+/*
+ * For functions implemented in ASM that aren't syscalls.
+ * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
+ * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names
+ */
+#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
+#define END_WEAK(x) END_STRONG(x); .weak x
+
+
diff --git a/lib/libc/arch/vax/SYS.h b/lib/libc/arch/vax/SYS.h
index 2449243f186..cba02a0678a 100644
--- a/lib/libc/arch/vax/SYS.h
+++ b/lib/libc/arch/vax/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.17 2015/04/07 01:27:07 guenther Exp $ */
+/* $OpenBSD: SYS.h,v 1.18 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: SYS.h,v 1.4 1997/05/02 18:15:32 kleink Exp $ */
/*
@@ -30,7 +30,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include "DEFS.h"
#include <sys/syscall.h>
#define _CAT(x,y) x##y
diff --git a/lib/libc/arch/vax/string/bcmp.S b/lib/libc/arch/vax/string/bcmp.S
index ccb63da20f2..c25d46c5102 100644
--- a/lib/libc/arch/vax/string/bcmp.S
+++ b/lib/libc/arch/vax/string/bcmp.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bcmp.S,v 1.5 2013/07/05 21:10:50 miod Exp $ */
+/* $OpenBSD: bcmp.S,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
@@ -54,3 +54,4 @@ ENTRY(bcmp, 0)
clrl %r0 # we have a match!
9:
ret
+END_WEAK(bcmp)
diff --git a/lib/libc/arch/vax/string/bcopy.S b/lib/libc/arch/vax/string/bcopy.S
index 5af2edea373..27d5d8fd24a 100644
--- a/lib/libc/arch/vax/string/bcopy.S
+++ b/lib/libc/arch/vax/string/bcopy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bcopy.S,v 1.6 2013/07/05 21:10:50 miod Exp $ */
+/* $OpenBSD: bcopy.S,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
@@ -69,3 +69,4 @@ ENTRY(bcopy, R2|R3|R4|R5|R6)
subl2 %r6,%r3
movc3 %r6,(%r1),(%r3)
ret
+END_WEAK(bcopy)
diff --git a/lib/libc/arch/vax/string/bzero.S b/lib/libc/arch/vax/string/bzero.S
index 55febbe11b5..0867d3971c3 100644
--- a/lib/libc/arch/vax/string/bzero.S
+++ b/lib/libc/arch/vax/string/bzero.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: bzero.S,v 1.6 2013/07/05 21:10:50 miod Exp $ */
+/* $OpenBSD: bzero.S,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
@@ -44,3 +44,4 @@ ENTRY(bzero, R2|R3|R4|R5)
jgtr 1b
movc5 $0,(%r3),$0,8(%ap),(%r3)
ret
+END_WEAK(bzero)
diff --git a/lib/libc/arch/vax/string/ffs.S b/lib/libc/arch/vax/string/ffs.S
index e2caa68c607..1e75f128a06 100644
--- a/lib/libc/arch/vax/string/ffs.S
+++ b/lib/libc/arch/vax/string/ffs.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: ffs.S,v 1.5 2013/07/05 21:10:50 miod Exp $ */
+/* $OpenBSD: ffs.S,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
@@ -39,3 +39,4 @@ ENTRY(ffs, 0)
1:
incl %r0
ret
+END_WEAK(ffs)
diff --git a/lib/libc/arch/vax/string/memcmp.S b/lib/libc/arch/vax/string/memcmp.S
index 6a794547d5d..8fdf29435bb 100644
--- a/lib/libc/arch/vax/string/memcmp.S
+++ b/lib/libc/arch/vax/string/memcmp.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memcmp.S,v 1.5 2013/07/05 21:10:50 miod Exp $ */
+/* $OpenBSD: memcmp.S,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -63,3 +63,4 @@ ENTRY(memcmp, 0)
subl3 %r4,%r3,%r0
9:
ret
+END_STRONG(memcmp)
diff --git a/lib/libc/arch/vax/string/memcpy.S b/lib/libc/arch/vax/string/memcpy.S
index d456a9a2d4f..e13ae0baa24 100644
--- a/lib/libc/arch/vax/string/memcpy.S
+++ b/lib/libc/arch/vax/string/memcpy.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memcpy.S,v 1.8 2015/05/26 20:23:39 miod Exp $ */
+/* $OpenBSD: memcpy.S,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -56,3 +56,4 @@ ENTRY(memcpy, R2|R3|R4|R5)
movl 12(%ap),%r2
decw %r0 /* from 0 to 65535 */
brb 1b /* retry */
+END_STRONG(memcpy)
diff --git a/lib/libc/arch/vax/string/memmove.S b/lib/libc/arch/vax/string/memmove.S
index 86513fdbba9..3f71d2629c1 100644
--- a/lib/libc/arch/vax/string/memmove.S
+++ b/lib/libc/arch/vax/string/memmove.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memmove.S,v 1.6 2013/07/05 21:10:50 miod Exp $ */
+/* $OpenBSD: memmove.S,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -84,3 +84,4 @@ ENTRY(memmove, R2|R3|R4|R5)
subl2 %r0,%r1
subl2 %r0,%r3
brb 5b
+END_STRONG(memmove)
diff --git a/lib/libc/arch/vax/string/memset.S b/lib/libc/arch/vax/string/memset.S
index b861477884f..40bada34ea7 100644
--- a/lib/libc/arch/vax/string/memset.S
+++ b/lib/libc/arch/vax/string/memset.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: memset.S,v 1.6 2013/07/05 21:10:50 miod Exp $ */
+/* $OpenBSD: memset.S,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -46,3 +46,4 @@ ENTRY(memset, R2|R3|R4|R5)
subl2 %r0,12(%ap)
movc5 $0,(%r3),%r1,%r0,(%r3)
jbr 1b
+END_STRONG(memset)
diff --git a/lib/libc/arch/vax/string/strchr.S b/lib/libc/arch/vax/string/strchr.S
index 9d1b75423e7..7c8b8de57dd 100644
--- a/lib/libc/arch/vax/string/strchr.S
+++ b/lib/libc/arch/vax/string/strchr.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: strchr.S,v 1.2 2015/05/15 22:29:37 millert Exp $ */
+/* $OpenBSD: strchr.S,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
@@ -56,3 +56,4 @@ ENTRY(strchr, 0)
jneq 3b
decl %r0
jbr 2b
+END_STRONG(strchr)
diff --git a/lib/libc/gen/auth_subr.c b/lib/libc/gen/auth_subr.c
index cfa857c6b3d..25c71a29152 100644
--- a/lib/libc/gen/auth_subr.c
+++ b/lib/libc/gen/auth_subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: auth_subr.c,v 1.41 2014/08/25 07:50:25 doug Exp $ */
+/* $OpenBSD: auth_subr.c,v 1.42 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 2000-2002,2004 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -361,7 +361,7 @@ auth_setenv(auth_session_t *as)
for (; isblank((unsigned char)*line); ++line)
;
if (*line != '\0' && setenv(name, line, 1))
- _warn("setenv(%s, %s)", name, line);
+ warn("setenv(%s, %s)", name, line);
}
} else
if (!strncasecmp(line, BI_UNSETENV, sizeof(BI_UNSETENV)-1)) {
@@ -842,20 +842,20 @@ auth_call(auth_session_t *as, char *path, ...)
if (secure_path(path) < 0) {
syslog(LOG_ERR, "%s: path not secure", path);
- _warnx("invalid script: %s", path);
+ warnx("invalid script: %s", path);
goto fail;
}
if (socketpair(PF_LOCAL, SOCK_STREAM, 0, pfd) < 0) {
syslog(LOG_ERR, "unable to create backchannel %m");
- _warnx("internal resource failure");
+ warnx("internal resource failure");
goto fail;
}
switch (pid = fork()) {
case -1:
syslog(LOG_ERR, "%s: %m", path);
- _warnx("internal resource failure");
+ warnx("internal resource failure");
close(pfd[0]);
close(pfd[1]);
goto fail;
@@ -896,7 +896,7 @@ auth_call(auth_session_t *as, char *path, ...)
if (pid < 0) {
if (errno != ECHILD) {
syslog(LOG_ERR, "%s: waitpid: %m", path);
- _warnx("internal failure");
+ warnx("internal failure");
goto fail;
}
} else if (!WIFEXITED(status))
diff --git a/lib/libc/gen/authenticate.c b/lib/libc/gen/authenticate.c
index 37c178540a2..4ab4a600b64 100644
--- a/lib/libc/gen/authenticate.c
+++ b/lib/libc/gen/authenticate.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: authenticate.c,v 1.21 2015/08/27 13:33:24 dlg Exp $ */
+/* $OpenBSD: authenticate.c,v 1.22 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved.
@@ -193,7 +193,7 @@ auth_approval(auth_session_t *as, login_cap_t *lc, char *name, char *type)
else {
if ((pwd = getpwuid(getuid())) == NULL) {
syslog(LOG_ERR, "no such user id %u", getuid());
- _warnx("cannot approve who we don't recognize");
+ warnx("cannot approve who we don't recognize");
return (0);
}
name = pwd->pw_name;
@@ -207,7 +207,7 @@ auth_approval(auth_session_t *as, login_cap_t *lc, char *name, char *type)
if (strlen(name) >= PATH_MAX) {
syslog(LOG_ERR, "username to login %.*s...",
PATH_MAX, name);
- _warnx("username too long");
+ warnx("username too long");
return (0);
}
if (pwd == NULL && (approve = strchr(name, '.')) != NULL) {
@@ -217,7 +217,7 @@ auth_approval(auth_session_t *as, login_cap_t *lc, char *name, char *type)
}
lc = login_getclass(pwd ? pwd->pw_class : NULL);
if (lc == NULL) {
- _warnx("unable to classify user");
+ warnx("unable to classify user");
return (0);
}
}
@@ -234,7 +234,7 @@ auth_approval(auth_session_t *as, login_cap_t *lc, char *name, char *type)
login_close(lc);
syslog(LOG_ERR, "approval path too long %.*s...",
PATH_MAX, type);
- _warnx("approval script path too long");
+ warnx("approval script path too long");
return (0);
}
}
@@ -246,7 +246,7 @@ auth_approval(auth_session_t *as, login_cap_t *lc, char *name, char *type)
if (close_lc_on_exit)
login_close(lc);
syslog(LOG_ERR, "Invalid %s script: %s", s, approve);
- _warnx("invalid path to approval script");
+ warnx("invalid path to approval script");
free(approve);
return (0);
}
@@ -255,7 +255,7 @@ auth_approval(auth_session_t *as, login_cap_t *lc, char *name, char *type)
if (close_lc_on_exit)
login_close(lc);
syslog(LOG_ERR, "%m");
- _warn(NULL);
+ warn(NULL);
if (approve)
free(approve);
return (0);
@@ -264,7 +264,7 @@ auth_approval(auth_session_t *as, login_cap_t *lc, char *name, char *type)
auth_setstate(as, AUTH_OKAY);
if (auth_setitem(as, AUTHV_NAME, name) < 0) {
syslog(LOG_ERR, "%m");
- _warn(NULL);
+ warn(NULL);
goto out;
}
if (auth_check_expire(as) < 0) /* is this account expired */
diff --git a/lib/libc/gen/ctermid.c b/lib/libc/gen/ctermid.c
index fddce642d9b..1fe8ba482aa 100644
--- a/lib/libc/gen/ctermid.c
+++ b/lib/libc/gen/ctermid.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ctermid.c,v 1.7 2006/01/13 18:10:10 miod Exp $ */
+/* $OpenBSD: ctermid.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -43,3 +43,4 @@ ctermid(char *s)
}
return(def);
}
+DEF_WEAK(ctermid);
diff --git a/lib/libc/gen/err.c b/lib/libc/gen/err.c
index e7ec29de4fb..15e1b97c417 100644
--- a/lib/libc/gen/err.c
+++ b/lib/libc/gen/err.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: err.c,v 1.11 2012/12/05 23:19:59 deraadt Exp $ */
+/* $OpenBSD: err.c,v 1.12 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -31,17 +31,13 @@
#include <err.h>
#include <stdarg.h>
-/* PRINTFLIKE2 */
__dead void
-_err(int eval, const char *fmt, ...)
+err(int eval, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
- _verr(eval, fmt, ap);
+ verr(eval, fmt, ap);
va_end(ap);
}
-
-/* PRINTFLIKE2 */
-__weak_alias(err, _err);
-
+DEF_WEAK(err);
diff --git a/lib/libc/gen/errc.c b/lib/libc/gen/errc.c
index 345bdc2e465..730822b4a0f 100644
--- a/lib/libc/gen/errc.c
+++ b/lib/libc/gen/errc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: errc.c,v 1.1 2014/04/22 00:33:02 guenther Exp $ */
+/* $OpenBSD: errc.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -32,14 +32,12 @@
#include <stdarg.h>
__dead void
-_errc(int eval, int code, const char *fmt, ...)
+errc(int eval, int code, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
- _verrc(eval, code, fmt, ap);
+ verrc(eval, code, fmt, ap);
va_end(ap);
}
-
-__weak_alias(errc, _errc);
-
+DEF_WEAK(errc);
diff --git a/lib/libc/gen/errx.c b/lib/libc/gen/errx.c
index d213435dbc7..e6b5d2389e4 100644
--- a/lib/libc/gen/errx.c
+++ b/lib/libc/gen/errx.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: errx.c,v 1.10 2012/12/05 23:19:59 deraadt Exp $ */
+/* $OpenBSD: errx.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -31,17 +31,13 @@
#include <err.h>
#include <stdarg.h>
-/* PRINTFLIKE2 */
__dead void
-_errx(int eval, const char *fmt, ...)
+errx(int eval, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
- _verrx(eval, fmt, ap);
+ verrx(eval, fmt, ap);
va_end(ap);
}
-
-/* PRINTFLIKE2 */
-__weak_alias(errx, _errx);
-
+DEF_WEAK(errx);
diff --git a/lib/libc/gen/getbsize.c b/lib/libc/gen/getbsize.c
index 0e23ed3c91d..8b6e4f06949 100644
--- a/lib/libc/gen/getbsize.c
+++ b/lib/libc/gen/getbsize.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getbsize.c,v 1.10 2005/08/08 08:05:34 espie Exp $ */
+/* $OpenBSD: getbsize.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -73,18 +73,18 @@ getbsize(int *headerlenp, long *blocksizep)
mul = 1;
break;
default:
-fmterr: _warnx("%s: unknown blocksize", p);
+fmterr: warnx("%s: unknown blocksize", p);
n = 512;
max = MAXB;
mul = 1;
break;
}
if (n > max) {
- _warnx("maximum blocksize is %dG", MAXB / GB);
+ warnx("maximum blocksize is %dG", MAXB / GB);
n = max;
}
if ((blocksize = n * mul) < 512) {
-underflow: _warnx("%s: minimum blocksize is 512", p);
+underflow: warnx("%s: minimum blocksize is 512", p);
form = "";
blocksize = n = 512;
}
diff --git a/lib/libc/gen/getnetgrent.c b/lib/libc/gen/getnetgrent.c
index 5597dba2ff4..b2256516794 100644
--- a/lib/libc/gen/getnetgrent.c
+++ b/lib/libc/gen/getnetgrent.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getnetgrent.c,v 1.23 2014/10/08 04:37:02 deraadt Exp $ */
+/* $OpenBSD: getnetgrent.c,v 1.24 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1994 Christos Zoulas
@@ -364,7 +364,7 @@ addgroup(char *ypdom, struct stringlist *sl, char *grp)
#endif
/* check for cycles */
if (_ng_sl_find(sl, grp) != NULL) {
- _warnx("netgroup: Cycle in group `%s'", grp);
+ warnx("netgroup: Cycle in group `%s'", grp);
free(grp);
return;
}
@@ -445,7 +445,7 @@ in_find(char *ypdom, struct stringlist *sl, char *grp, const char *host,
#endif
/* check for cycles */
if (_ng_sl_find(sl, grp) != NULL) {
- _warnx("netgroup: Cycle in group `%s'", grp);
+ warnx("netgroup: Cycle in group `%s'", grp);
free(grp);
return 0;
}
diff --git a/lib/libc/gen/popen.c b/lib/libc/gen/popen.c
index 3b07f473982..0779f70cae6 100644
--- a/lib/libc/gen/popen.c
+++ b/lib/libc/gen/popen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: popen.c,v 1.20 2015/01/16 16:48:51 deraadt Exp $ */
+/* $OpenBSD: popen.c,v 1.21 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1988, 1993
* The Regents of the University of California. All rights reserved.
@@ -137,6 +137,7 @@ popen(const char *program, const char *type)
return (iop);
}
+DEF_WEAK(popen);
/*
* pclose --
@@ -178,3 +179,4 @@ pclose(FILE *iop)
return (pid == -1 ? -1 : pstat);
}
+DEF_WEAK(pclose);
diff --git a/lib/libc/gen/psignal.c b/lib/libc/gen/psignal.c
index dfe62753b17..dca921d5a5a 100644
--- a/lib/libc/gen/psignal.c
+++ b/lib/libc/gen/psignal.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: psignal.c,v 1.9 2007/05/17 04:57:31 ray Exp $ */
+/* $OpenBSD: psignal.c,v 1.10 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
@@ -39,8 +39,6 @@
#include <unistd.h>
#include <limits.h>
-extern char *__strsignal(int , char *);
-
void
psignal(unsigned int sig, const char *s)
{
diff --git a/lib/libc/gen/shm_open.c b/lib/libc/gen/shm_open.c
index 1ebe7c86257..002ffcfb57a 100644
--- a/lib/libc/gen/shm_open.c
+++ b/lib/libc/gen/shm_open.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: shm_open.c,v 1.5 2015/05/11 00:42:54 guenther Exp $ */
+/* $OpenBSD: shm_open.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 2013 Ted Unangst <tedu@openbsd.org>
*
@@ -86,8 +86,6 @@ shm_unlink(const char *path)
return unlink(shmpath);
}
-char *_mktemp(char *);
-
int
shm_mkstemp(char *template)
{
diff --git a/lib/libc/gen/verr.c b/lib/libc/gen/verr.c
index dcd8edcd06c..8f4722b9ee5 100644
--- a/lib/libc/gen/verr.c
+++ b/lib/libc/gen/verr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: verr.c,v 1.9 2012/12/05 23:20:00 deraadt Exp $ */
+/* $OpenBSD: verr.c,v 1.10 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -38,7 +38,7 @@
extern char *__progname; /* Program name, from crt0. */
__dead void
-_verr(int eval, const char *fmt, va_list ap)
+verr(int eval, const char *fmt, va_list ap)
{
int sverrno;
@@ -51,6 +51,4 @@ _verr(int eval, const char *fmt, va_list ap)
(void)fprintf(stderr, "%s\n", strerror(sverrno));
exit(eval);
}
-
-__weak_alias(verr, _verr);
-
+DEF_WEAK(verr);
diff --git a/lib/libc/gen/verrc.c b/lib/libc/gen/verrc.c
index 5babb671522..27aac8b5b0c 100644
--- a/lib/libc/gen/verrc.c
+++ b/lib/libc/gen/verrc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: verrc.c,v 1.1 2014/04/22 00:33:02 guenther Exp $ */
+/* $OpenBSD: verrc.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -37,7 +37,7 @@
extern char *__progname; /* Program name, from crt0. */
__dead void
-_verrc(int eval, int code, const char *fmt, va_list ap)
+verrc(int eval, int code, const char *fmt, va_list ap)
{
(void)fprintf(stderr, "%s: ", __progname);
if (fmt != NULL) {
@@ -47,6 +47,4 @@ _verrc(int eval, int code, const char *fmt, va_list ap)
(void)fprintf(stderr, "%s\n", strerror(code));
exit(eval);
}
-
-__weak_alias(verrc, _verrc);
-
+DEF_WEAK(verrc);
diff --git a/lib/libc/gen/verrx.c b/lib/libc/gen/verrx.c
index 60da062f5af..f0186b607ee 100644
--- a/lib/libc/gen/verrx.c
+++ b/lib/libc/gen/verrx.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: verrx.c,v 1.9 2012/12/05 23:20:00 deraadt Exp $ */
+/* $OpenBSD: verrx.c,v 1.10 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -36,7 +36,7 @@
extern char *__progname; /* Program name, from crt0. */
__dead void
-_verrx(int eval, const char *fmt, va_list ap)
+verrx(int eval, const char *fmt, va_list ap)
{
(void)fprintf(stderr, "%s: ", __progname);
if (fmt != NULL)
@@ -44,6 +44,4 @@ _verrx(int eval, const char *fmt, va_list ap)
(void)fprintf(stderr, "\n");
exit(eval);
}
-
-__weak_alias(verrx, _verrx);
-
+DEF_WEAK(verrx);
diff --git a/lib/libc/gen/vwarn.c b/lib/libc/gen/vwarn.c
index 26b60f33641..44d8be48ef5 100644
--- a/lib/libc/gen/vwarn.c
+++ b/lib/libc/gen/vwarn.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vwarn.c,v 1.9 2012/12/05 23:20:00 deraadt Exp $ */
+/* $OpenBSD: vwarn.c,v 1.10 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -37,7 +37,7 @@
extern char *__progname; /* Program name, from crt0. */
void
-_vwarn(const char *fmt, va_list ap)
+vwarn(const char *fmt, va_list ap)
{
int sverrno;
@@ -49,6 +49,4 @@ _vwarn(const char *fmt, va_list ap)
}
(void)fprintf(stderr, "%s\n", strerror(sverrno));
}
-
-__weak_alias(vwarn, _vwarn);
-
+DEF_WEAK(vwarn);
diff --git a/lib/libc/gen/vwarnc.c b/lib/libc/gen/vwarnc.c
index 1cfc518cdac..eb95d15c24f 100644
--- a/lib/libc/gen/vwarnc.c
+++ b/lib/libc/gen/vwarnc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vwarnc.c,v 1.1 2014/04/22 00:33:02 guenther Exp $ */
+/* $OpenBSD: vwarnc.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -36,7 +36,7 @@
extern char *__progname; /* Program name, from crt0. */
void
-_vwarnc(int code, const char *fmt, va_list ap)
+vwarnc(int code, const char *fmt, va_list ap)
{
(void)fprintf(stderr, "%s: ", __progname);
if (fmt != NULL) {
@@ -45,6 +45,4 @@ _vwarnc(int code, const char *fmt, va_list ap)
}
(void)fprintf(stderr, "%s\n", strerror(code));
}
-
-__weak_alias(vwarnc, _vwarnc);
-
+DEF_WEAK(vwarnc);
diff --git a/lib/libc/gen/vwarnx.c b/lib/libc/gen/vwarnx.c
index e6b1957d4f3..67d8f5b5706 100644
--- a/lib/libc/gen/vwarnx.c
+++ b/lib/libc/gen/vwarnx.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vwarnx.c,v 1.9 2012/12/05 23:20:00 deraadt Exp $ */
+/* $OpenBSD: vwarnx.c,v 1.10 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -35,13 +35,11 @@
extern char *__progname; /* Program name, from crt0. */
void
-_vwarnx(const char *fmt, va_list ap)
+vwarnx(const char *fmt, va_list ap)
{
(void)fprintf(stderr, "%s: ", __progname);
if (fmt != NULL)
(void)vfprintf(stderr, fmt, ap);
(void)fprintf(stderr, "\n");
}
-
-__weak_alias(vwarnx, _vwarnx);
-
+DEF_WEAK(vwarnx);
diff --git a/lib/libc/gen/warn.c b/lib/libc/gen/warn.c
index c1b47a65f27..6784cf6669a 100644
--- a/lib/libc/gen/warn.c
+++ b/lib/libc/gen/warn.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: warn.c,v 1.10 2012/12/05 23:20:00 deraadt Exp $ */
+/* $OpenBSD: warn.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -31,17 +31,13 @@
#include <err.h>
#include <stdarg.h>
-/* PRINTFLIKE1 */
void
-_warn(const char *fmt, ...)
+warn(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
- _vwarn(fmt, ap);
+ vwarn(fmt, ap);
va_end(ap);
}
-
-/* PRINTFLIKE1 */
-__weak_alias(warn, _warn);
-
+DEF_WEAK(warn);
diff --git a/lib/libc/gen/warnc.c b/lib/libc/gen/warnc.c
index 0ad8df27dd5..bbda54ba927 100644
--- a/lib/libc/gen/warnc.c
+++ b/lib/libc/gen/warnc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: warnc.c,v 1.1 2014/04/22 00:33:02 guenther Exp $ */
+/* $OpenBSD: warnc.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -32,14 +32,12 @@
#include <stdarg.h>
void
-_warnc(int code, const char *fmt, ...)
+warnc(int code, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
- _vwarnc(code, fmt, ap);
+ vwarnc(code, fmt, ap);
va_end(ap);
}
-
-__weak_alias(warnc, _warnc);
-
+DEF_WEAK(warnc);
diff --git a/lib/libc/gen/warnx.c b/lib/libc/gen/warnx.c
index af2ab669cc7..723bc0db8f1 100644
--- a/lib/libc/gen/warnx.c
+++ b/lib/libc/gen/warnx.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: warnx.c,v 1.9 2012/12/05 23:20:00 deraadt Exp $ */
+/* $OpenBSD: warnx.c,v 1.10 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -31,17 +31,13 @@
#include <err.h>
#include <stdarg.h>
-/* PRINTFLIKE1 */
void
-_warnx(const char *fmt, ...)
+warnx(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
- _vwarnx(fmt, ap);
+ vwarnx(fmt, ap);
va_end(ap);
}
-
-/* PRINTFLIKE1 */
-__weak_alias(warnx, _warnx);
-
+DEF_WEAK(warnx);
diff --git a/lib/libc/hidden/err.h b/lib/libc/hidden/err.h
new file mode 100644
index 00000000000..d634141db9b
--- /dev/null
+++ b/lib/libc/hidden/err.h
@@ -0,0 +1,37 @@
+/* $OpenBSD: err.h,v 1.1 2015/08/31 02:53:56 guenther Exp $ */
+/*
+ * Copyright (c) 2015 Philip Guenther <guenther@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _LIBC_ERR_H_
+#define _LIBC_ERR_H_
+
+#include_next <err.h>
+#include "namespace.h"
+
+PROTO_NORMAL(err);
+PROTO_NORMAL(errc);
+PROTO_NORMAL(errx);
+PROTO_NORMAL(verr);
+PROTO_NORMAL(verrc);
+PROTO_NORMAL(verrx);
+PROTO_NORMAL(vwarn);
+PROTO_NORMAL(vwarnc);
+PROTO_NORMAL(vwarnx);
+PROTO_NORMAL(warn);
+PROTO_NORMAL(warnc);
+PROTO_NORMAL(warnx);
+
+#endif /* !_LIBC_ERR_H_ */
diff --git a/lib/libc/hidden/stdio.h b/lib/libc/hidden/stdio.h
new file mode 100644
index 00000000000..8a5530cd54f
--- /dev/null
+++ b/lib/libc/hidden/stdio.h
@@ -0,0 +1,109 @@
+/* $OpenBSD: stdio.h,v 1.1 2015/08/31 02:53:56 guenther Exp $ */
+/*
+ * Copyright (c) 2015 Philip Guenther <guenther@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+/* $OpenBSD: stdio.h,v 1.1 2015/08/31 02:53:56 guenther Exp $ */
+/* $NetBSD: stdio.h,v 1.18 1996/04/25 18:29:21 jtc Exp $ */
+
+#ifndef _LIBC_STDIO_H_
+#define _LIBC_STDIO_H_
+
+#include_next <stdio.h>
+#include "namespace.h"
+
+__BEGIN_HIDDEN_DECLS
+char *_mktemp(char *);
+__END_HIDDEN_DECLS
+
+PROTO_NORMAL(__srget);
+PROTO_NORMAL(__swbuf);
+PROTO_NORMAL(asprintf);
+PROTO_NORMAL(clearerr);
+PROTO_NORMAL(ctermid);
+PROTO_NORMAL(dprintf);
+PROTO_NORMAL(fclose);
+PROTO_NORMAL(fdopen);
+PROTO_NORMAL(feof);
+PROTO_NORMAL(ferror);
+PROTO_NORMAL(fflush);
+PROTO_NORMAL(fgetc);
+PROTO_NORMAL(fgetln);
+PROTO_NORMAL(fgetpos);
+PROTO_NORMAL(fgets);
+PROTO_NORMAL(fileno);
+/*PROTO_NORMAL(flockfile);*/
+PROTO_NORMAL(fmemopen);
+PROTO_NORMAL(fopen);
+PROTO_NORMAL(fprintf);
+PROTO_NORMAL(fpurge);
+PROTO_NORMAL(fputc);
+PROTO_NORMAL(fputs);
+PROTO_NORMAL(fread);
+PROTO_NORMAL(freopen);
+PROTO_NORMAL(fscanf);
+PROTO_NORMAL(fseek);
+PROTO_NORMAL(fseeko);
+PROTO_NORMAL(fsetpos);
+PROTO_NORMAL(ftell);
+PROTO_NORMAL(ftello);
+/*PROTO_NORMAL(ftrylockfile);*/
+/*PROTO_NORMAL(funlockfile);*/
+PROTO_NORMAL(funopen);
+PROTO_NORMAL(fwrite);
+PROTO_NORMAL(getc);
+PROTO_NORMAL(getc_unlocked);
+PROTO_NORMAL(getchar);
+PROTO_NORMAL(getchar_unlocked);
+PROTO_NORMAL(getdelim);
+PROTO_NORMAL(getline);
+PROTO_NORMAL(getw);
+PROTO_NORMAL(open_memstream);
+PROTO_NORMAL(pclose);
+PROTO_NORMAL(perror);
+PROTO_NORMAL(popen);
+PROTO_NORMAL(printf);
+PROTO_NORMAL(putc);
+PROTO_NORMAL(putc_unlocked);
+PROTO_NORMAL(putchar);
+PROTO_NORMAL(putchar_unlocked);
+PROTO_NORMAL(puts);
+PROTO_NORMAL(putw);
+PROTO_NORMAL(remove);
+/*PROTO_NORMAL(rename);*/
+/*PROTO_NORMAL(renameat);*/
+PROTO_NORMAL(rewind);
+PROTO_NORMAL(scanf);
+PROTO_NORMAL(setbuf);
+PROTO_NORMAL(setbuffer);
+PROTO_NORMAL(setlinebuf);
+PROTO_NORMAL(setvbuf);
+PROTO_NORMAL(snprintf);
+PROTO_STD_DEPRECATED(sprintf);
+PROTO_NORMAL(sscanf);
+PROTO_DEPRECATED(tempnam);
+PROTO_NORMAL(tmpfile);
+PROTO_STD_DEPRECATED(tmpnam);
+PROTO_NORMAL(ungetc);
+PROTO_NORMAL(vasprintf);
+PROTO_NORMAL(vdprintf);
+PROTO_NORMAL(vfprintf);
+PROTO_NORMAL(vfscanf);
+PROTO_NORMAL(vprintf);
+PROTO_NORMAL(vscanf);
+PROTO_NORMAL(vsnprintf);
+PROTO_STD_DEPRECATED(vsprintf);
+PROTO_NORMAL(vsscanf);
+
+#endif /* _LIBC_STDIO_H_ */
diff --git a/lib/libc/hidden/string.h b/lib/libc/hidden/string.h
new file mode 100644
index 00000000000..dc4e4801e02
--- /dev/null
+++ b/lib/libc/hidden/string.h
@@ -0,0 +1,79 @@
+/* $OpenBSD: string.h,v 1.1 2015/08/31 02:53:56 guenther Exp $ */
+/*
+ * Copyright (c) 2015 Philip Guenther <guenther@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _LIBC_STRING_H_
+#define _LIBC_STRING_H_
+
+#include_next <string.h>
+#include "namespace.h"
+
+/* XXX should make this __BEGIN_HIDDEN_DECLS */
+__BEGIN_DECLS
+char *__strsignal(int , char *);
+__END_DECLS
+
+PROTO_NORMAL(bcmp);
+PROTO_NORMAL(bcopy);
+PROTO_NORMAL(bzero);
+PROTO_NORMAL(explicit_bzero);
+PROTO_NORMAL(ffs);
+PROTO_DEPRECATED(index);
+PROTO_NORMAL(memccpy);
+PROTO_NORMAL(memchr);
+PROTO_NORMAL(memcmp);
+PROTO_NORMAL(memcpy);
+PROTO_NORMAL(memmem);
+PROTO_NORMAL(memmove);
+PROTO_NORMAL(memrchr);
+PROTO_NORMAL(memset);
+PROTO_DEPRECATED(rindex);
+PROTO_DEPRECATED(stpcpy);
+PROTO_NORMAL(stpncpy);
+PROTO_NORMAL(strcasecmp);
+PROTO_NORMAL(strcasestr);
+PROTO_STD_DEPRECATED(strcat);
+PROTO_NORMAL(strchr);
+PROTO_NORMAL(strcmp);
+PROTO_NORMAL(strcoll);
+PROTO_STD_DEPRECATED(strcpy);
+PROTO_NORMAL(strcspn);
+PROTO_NORMAL(strdup);
+PROTO_NORMAL(strerror);
+PROTO_NORMAL(strerror_r);
+PROTO_NORMAL(strlcat);
+PROTO_NORMAL(strlcpy);
+PROTO_NORMAL(strlen);
+PROTO_NORMAL(strmode);
+PROTO_NORMAL(strncasecmp);
+PROTO_NORMAL(strncat);
+PROTO_NORMAL(strncmp);
+PROTO_NORMAL(strncpy);
+PROTO_NORMAL(strndup);
+PROTO_NORMAL(strnlen);
+PROTO_NORMAL(strpbrk);
+PROTO_NORMAL(strrchr);
+PROTO_NORMAL(strsep);
+PROTO_NORMAL(strsignal);
+PROTO_NORMAL(strspn);
+PROTO_NORMAL(strstr);
+PROTO_NORMAL(strtok);
+PROTO_NORMAL(strtok_r);
+PROTO_NORMAL(strxfrm);
+PROTO_NORMAL(timingsafe_bcmp);
+PROTO_NORMAL(timingsafe_memcmp);
+
+#endif /* _LIBC_STRING_H_ */
diff --git a/lib/libc/hidden/wchar.h b/lib/libc/hidden/wchar.h
new file mode 100644
index 00000000000..de1891267fc
--- /dev/null
+++ b/lib/libc/hidden/wchar.h
@@ -0,0 +1,95 @@
+/* $OpenBSD: wchar.h,v 1.1 2015/08/31 02:53:56 guenther Exp $ */
+/*
+ * Copyright (c) 2015 Philip Guenther <guenther@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _LIBC_WCHAR_H_
+#define _LIBC_WCHAR_H_
+
+#include_next <wchar.h>
+#include "namespace.h"
+
+/*PROTO_NORMAL(btowc);*/
+PROTO_NORMAL(fgetwc);
+PROTO_NORMAL(fgetws);
+PROTO_NORMAL(fputwc);
+PROTO_NORMAL(fputws);
+PROTO_NORMAL(fwide);
+PROTO_NORMAL(fwprintf);
+PROTO_NORMAL(fwscanf);
+PROTO_NORMAL(getwc);
+PROTO_NORMAL(getwchar);
+/*PROTO_NORMAL(mbrlen);*/
+/*PROTO_NORMAL(mbrtowc);*/
+/*PROTO_NORMAL(mbsinit);*/
+/*PROTO_NORMAL(mbsnrtowcs);*/
+/*PROTO_NORMAL(mbsrtowcs);*/
+PROTO_NORMAL(open_wmemstream);
+PROTO_NORMAL(putwc);
+PROTO_NORMAL(putwchar);
+PROTO_NORMAL(swprintf);
+PROTO_NORMAL(swscanf);
+PROTO_NORMAL(ungetwc);
+PROTO_NORMAL(vfwprintf);
+PROTO_NORMAL(vfwscanf);
+PROTO_NORMAL(vswprintf);
+PROTO_NORMAL(vswscanf);
+PROTO_NORMAL(vwprintf);
+PROTO_NORMAL(vwscanf);
+/*PROTO_NORMAL(wcrtomb);*/
+/*PROTO_NORMAL(wcscasecmp);*/
+/*PROTO_NORMAL(wcscat);*/
+/*PROTO_NORMAL(wcschr);*/
+/*PROTO_NORMAL(wcscmp);*/
+/*PROTO_NORMAL(wcscoll);*/
+/*PROTO_NORMAL(wcscpy);*/
+/*PROTO_NORMAL(wcscspn);*/
+/*PROTO_NORMAL(wcsdup);*/
+/*PROTO_NORMAL(wcsftime);*/
+/*PROTO_NORMAL(wcslcat);*/
+/*PROTO_NORMAL(wcslcpy);*/
+/*PROTO_NORMAL(wcslen);*/
+/*PROTO_NORMAL(wcsncasecmp);*/
+/*PROTO_NORMAL(wcsncat);*/
+/*PROTO_NORMAL(wcsncmp);*/
+/*PROTO_NORMAL(wcsncpy);*/
+/*PROTO_NORMAL(wcsnrtombs);*/
+/*PROTO_NORMAL(wcspbrk);*/
+/*PROTO_NORMAL(wcsrchr);*/
+/*PROTO_NORMAL(wcsrtombs);*/
+/*PROTO_NORMAL(wcsspn);*/
+/*PROTO_NORMAL(wcsstr);*/
+/*PROTO_NORMAL(wcstod);*/
+/*PROTO_NORMAL(wcstof);*/
+/*PROTO_NORMAL(wcstok);*/
+/*PROTO_NORMAL(wcstol);*/
+/*PROTO_NORMAL(wcstold);*/
+/*PROTO_NORMAL(wcstoll);*/
+/*PROTO_NORMAL(wcstoul);*/
+/*PROTO_NORMAL(wcstoull);*/
+/*PROTO_NORMAL(wcswcs);*/
+/*PROTO_NORMAL(wcswidth);*/
+/*PROTO_NORMAL(wcsxfrm);*/
+/*PROTO_NORMAL(wctob);*/
+/*PROTO_NORMAL(wcwidth);*/
+/*PROTO_NORMAL(wmemchr);*/
+/*PROTO_NORMAL(wmemcmp);*/
+/*PROTO_NORMAL(wmemcpy);*/
+/*PROTO_NORMAL(wmemmove);*/
+/*PROTO_NORMAL(wmemset);*/
+PROTO_NORMAL(wprintf);
+PROTO_NORMAL(wscanf);
+
+#endif /* !_LIBC_WCHAR_H_ */
diff --git a/lib/libc/include/namespace.h b/lib/libc/include/namespace.h
index 4a51f15ddf9..b0cad502a31 100644
--- a/lib/libc/include/namespace.h
+++ b/lib/libc/include/namespace.h
@@ -1,18 +1,158 @@
-/* $OpenBSD: namespace.h,v 1.2 1996/08/19 08:28:08 tholo Exp $ */
+/* $OpenBSD: namespace.h,v 1.3 2015/08/31 02:53:56 guenther Exp $ */
+#ifndef _LIBC_NAMESPACE_H_
+#define _LIBC_NAMESPACE_H_
+
+/* These will be replaced with symbol renaming ala PROTO_NORMAL */
#define catclose _catclose
#define catgets _catgets
#define catopen _catopen
-#define err _err
-#define errx _errx
#define strtoq _strtoq
#define strtouq _strtouq
#define sys_errlist _sys_errlist
#define sys_nerr _sys_nerr
#define sys_siglist _sys_siglist
-#define verr _verr
-#define verrx _verrx
-#define vwarn _vwarn
-#define vwarnx _vwarnx
-#define warn _warn
-#define warnx _warnx
+
+/*
+ * Copyright (c) 2015 Philip Guenther <guenther@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * The goal: calls from inside libc to other libc functions should be via
+ * identifiers that are of hidden visibility and--to avoid confusion--are
+ * in the reserved namespace. By doing this these calls are protected
+ * from overriding by applications and on many platforms can avoid creation
+ * or use of GOT or PLT entries. I've chosen a prefix of underbar-C-underbar
+ * ("_libc_") for this. These will not be declared directly; instead, the
+ * gcc "asm labels" extension will be used rename the function.
+ *
+ * For syscalls which are cancellation points, such as wait4(), there
+ * are identifiers that do not provide cancellation:
+ * _libc_wait4 hidden alias, for use internal to libc only
+ * _thread_sys_wait4 global name, for use outside libc only
+ * ...and identifiers that do provide cancellation:
+ * wait4 weak alias, for general use
+ * _libc_wait4_cancel hidden alias, for use internal to libc only
+ * Inside libc, the bare name ("wait4") binds to the version *without*
+ * cancellation; the few times where cancellation is desired it can be
+ * obtained by calling CANCEL(x) instead of just x.
+ *
+ * Some other calls need to be wrapped for reasons other than cancellation,
+ * such as to provide functionality beyond the underlying syscall (e.g.,
+ * setlogin). For these, there are identifiers for the raw call, without
+ * the wrapping:
+ * _libc_setlogin hidden alias, for use internal to libc only
+ * _thread_sys_setlogin global name, for use outside libc only
+ * ...and identifiers that do provide the libc wrapping:
+ * setlogin weak alias, for general use
+ * _libc_setlogin_wrap hidden alias, for use internal to libc only
+ * Inside libc, the bare name ("setlogin") binds to the wrapper; when the
+ * raw version is necessary it can be obtained by calling HIDDEN(x) instead of
+ * just x.
+ *
+ * For syscalls which are not cancellation points, such as getpid(),
+ * the identifiers are just:
+ * _libc_getpid hidden alias, for use internal to libc only
+ * _thread_sys_getpid global name, for use outside libc only
+ * getpid weak alias, for use outside libc only
+ *
+ * By using gcc's "asm label" extension, we can usually avoid having
+ * to type those prefixes in the .h and .c files. However, for those
+ * cases where a non-default binding is necessary we can use these macros
+ * to get the desired identifier:
+ *
+ * CANCEL(x)
+ * This expands to the internal, hidden name of a cancellation
+ * wrapper: _libc_x_cancel. ex: CANCEL(fsync)(fd)
+ *
+ * WRAP(x)
+ * This expands to the internal, hidden name of a non-cancellation
+ * wrapper: _libc_x_wrap. ex: WRAP(sigpending)(set)
+ *
+ *
+ * In order to actually set up the desired asm labels, we use these in
+ * the internal .h files:
+ * PROTO_NORMAL(x) Symbols used both internally and externally
+ * This makes gcc convert use of x to use _libc_x instead
+ * ex: PROTO_NORMAL(getpid)
+ *
+ * PROTO_STD_DEPRECATED(x) Standard C symbols that we don't want to use
+ * This just marks the symbol as deprecated, with no renaming.
+ * ex: PROTO_STD_DEPRECATED(strcpy)
+ *
+ * PROTO_DEPRECATED(x) Symbols not in ISO C that we don't want to use
+ * This marks the symbol as both weak and deprecated, with no renaming
+ * ex: PROTO_DEPRECATED(creat)
+ *
+ * PROTO_CANCEL(x) Functions that have cancellation wrappers
+ * Like PROTO_NORMAL(x), but also declares _libc_x_cancel
+ * ex: PROTO_CANCEL(wait4)
+ *
+ * PROTO_WRAP(x) Functions that have wrappers for other reasons
+ * This makes gcc convert use of x to use _libc_x_wrap instead.
+ * ex: PROTO_WRAP(setlogin)
+ *
+ *
+ * Finally, to create the expected aliases, we use these in the .c files
+ * where the definitions are:
+ * DEF_STRONG(x) Symbols reserved to or specified by ISO C
+ * This defines x as a strong alias for _libc_x; this must only
+ * be used for symbols that are reserved by the C standard
+ * (or reserved in the external identifier namespace).
+ * Matches with PROTO_NORMAL()
+ * ex: DEF_STRONG(fopen)
+ *
+ * DEF_WEAK(x) Symbols used internally and not in ISO C
+ * This defines x as a weak alias for _libc_x
+ * Matches with PROTO_NORMAL()
+ * ex: DEF_WEAK(lseek)
+ *
+ * DEF_CANCEL(x) Symbols that have a cancellation wrapper
+ * This defines x as a weak alias for _libc_x_cancel.
+ * Matches with PROTO_CANCEL()
+ * ex: DEF_CANCEL(read)
+ *
+ * DEF_WRAP(x)
+ * This defines x as a weak alias for _libc_x_wrap.
+ * Matches with PROTO_WRAP()
+ * ex: DEF_WRAP(setlogin)
+ *
+ * DEF_SYS(x)
+ * This defines _thread_sys_x as a strong alias for _libc_x. This should
+ * only be needed for syscalls that have C instead of asm stubs.
+ * Matches with PROTO_NORMAL(), PROTO_CANCEL(), or PROTO_WRAP()
+ * ex: DEF_SYS(pread)
+ */
+
+#define HIDDEN(x) _libc_##x
+#define CANCEL(x) _libc_##x##_cancel
+#define WRAP(x) _libc_##x##_wrap
+#define HIDDEN_STRING(x) "_libc_" __STRING(x)
+#define WRAP_STRING(x) "_libc_" __STRING(x) "_wrap"
+
+#define PROTO_NORMAL(x) __dso_hidden typeof(x) x asm(HIDDEN_STRING(x))
+#define PROTO_STD_DEPRECATED(x) typeof(x) x __attribute__((deprecated))
+#define PROTO_DEPRECATED(x) typeof(x) x __attribute__((deprecated, weak))
+#define PROTO_CANCEL(x) PROTO_NORMAL(x), CANCEL(x)
+#define PROTO_WRAP(x) __dso_hidden typeof(x) x asm(WRAP_STRING(x))
+
+#define DEF_STRONG(x) __strong_alias(x, HIDDEN(x))
+#define DEF_WEAK(x) __weak_alias(x, HIDDEN(x))
+#define DEF_CANCEL(x) __weak_alias(x, CANCEL(x))
+#define DEF_WRAP(x) __weak_alias(x, WRAP(x))
+#define DEF_SYS(x) __strong_alias(_thread_sys_##x, HIDDEN(x))
+
+#endif /* _LIBC_NAMESPACE_H_ */
+
diff --git a/lib/libc/stdio/asprintf.c b/lib/libc/stdio/asprintf.c
index 861bb0a797d..bd12726fbf0 100644
--- a/lib/libc/stdio/asprintf.c
+++ b/lib/libc/stdio/asprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: asprintf.c,v 1.20 2015/08/20 21:49:29 deraadt Exp $ */
+/* $OpenBSD: asprintf.c,v 1.21 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -23,7 +23,6 @@
#include <stdarg.h>
#include "local.h"
-/* PRINTFLIKE2 */
int
asprintf(char **str, const char *fmt, ...)
{
@@ -61,3 +60,4 @@ err:
errno = ENOMEM;
return (-1);
}
+DEF_WEAK(asprintf);
diff --git a/lib/libc/stdio/clrerr.c b/lib/libc/stdio/clrerr.c
index ac08c72cd11..8ee1bb1ff45 100644
--- a/lib/libc/stdio/clrerr.c
+++ b/lib/libc/stdio/clrerr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: clrerr.c,v 1.9 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: clrerr.c,v 1.10 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -42,3 +42,4 @@ clearerr(FILE *fp)
__sclearerr(fp);
FUNLOCKFILE(fp);
}
+DEF_STRONG(clearerr);
diff --git a/lib/libc/stdio/dprintf.c b/lib/libc/stdio/dprintf.c
index dbf7d3457ff..e8e7f5453e9 100644
--- a/lib/libc/stdio/dprintf.c
+++ b/lib/libc/stdio/dprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dprintf.c,v 1.1 2013/01/30 00:08:13 brad Exp $ */
+/* $OpenBSD: dprintf.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/* $FreeBSD: src/lib/libc/stdio/dprintf.c,v 1.2 2012/11/17 01:49:39 svnexp Exp $ */
/*-
@@ -46,3 +46,4 @@ dprintf(int fd, const char * __restrict fmt, ...)
va_end(ap);
return ret;
}
+DEF_WEAK(dprintf);
diff --git a/lib/libc/stdio/fclose.c b/lib/libc/stdio/fclose.c
index c72af540586..4bd162abc84 100644
--- a/lib/libc/stdio/fclose.c
+++ b/lib/libc/stdio/fclose.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fclose.c,v 1.9 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fclose.c,v 1.10 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -61,3 +61,4 @@ fclose(FILE *fp)
FUNLOCKFILE(fp);
return (r);
}
+DEF_STRONG(fclose);
diff --git a/lib/libc/stdio/fdopen.c b/lib/libc/stdio/fdopen.c
index 1c0c8132fd2..f98cffac8c3 100644
--- a/lib/libc/stdio/fdopen.c
+++ b/lib/libc/stdio/fdopen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fdopen.c,v 1.7 2014/08/31 02:21:18 guenther Exp $ */
+/* $OpenBSD: fdopen.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -89,3 +89,4 @@ fdopen(int fd, const char *mode)
fp->_close = __sclose;
return (fp);
}
+DEF_WEAK(fdopen);
diff --git a/lib/libc/stdio/feof.c b/lib/libc/stdio/feof.c
index 0036bab7d0e..0d6718a68c4 100644
--- a/lib/libc/stdio/feof.c
+++ b/lib/libc/stdio/feof.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: feof.c,v 1.8 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: feof.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -49,3 +49,4 @@ feof(FILE *fp)
FUNLOCKFILE(fp);
return (ret);
}
+DEF_STRONG(feof);
diff --git a/lib/libc/stdio/ferror.c b/lib/libc/stdio/ferror.c
index 00b9c8b2c68..61c86b52ca6 100644
--- a/lib/libc/stdio/ferror.c
+++ b/lib/libc/stdio/ferror.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ferror.c,v 1.8 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: ferror.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -49,3 +49,4 @@ ferror(FILE *fp)
FUNLOCKFILE(fp);
return (ret);
}
+DEF_STRONG(ferror);
diff --git a/lib/libc/stdio/fflush.c b/lib/libc/stdio/fflush.c
index 3e30f1086ff..fd1a4b3504b 100644
--- a/lib/libc/stdio/fflush.c
+++ b/lib/libc/stdio/fflush.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fflush.c,v 1.8 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fflush.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -52,6 +52,7 @@ fflush(FILE *fp)
FUNLOCKFILE(fp);
return (r);
}
+DEF_STRONG(fflush);
int
__sflush(FILE *fp)
diff --git a/lib/libc/stdio/fgetc.c b/lib/libc/stdio/fgetc.c
index c5d7dde2d06..bfe9266953c 100644
--- a/lib/libc/stdio/fgetc.c
+++ b/lib/libc/stdio/fgetc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fgetc.c,v 1.8 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fgetc.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -38,3 +38,4 @@ fgetc(FILE *fp)
{
return (getc(fp));
}
+DEF_STRONG(fgetc);
diff --git a/lib/libc/stdio/fgetln.c b/lib/libc/stdio/fgetln.c
index 1109cf25c01..ae2eb10f96c 100644
--- a/lib/libc/stdio/fgetln.c
+++ b/lib/libc/stdio/fgetln.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fgetln.c,v 1.13 2015/01/05 21:58:52 millert Exp $ */
+/* $OpenBSD: fgetln.c,v 1.14 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -142,3 +142,4 @@ error:
*lenp = 0;
return (NULL);
}
+DEF_WEAK(fgetln);
diff --git a/lib/libc/stdio/fgetpos.c b/lib/libc/stdio/fgetpos.c
index e6188e5a6b1..05ba0b005b1 100644
--- a/lib/libc/stdio/fgetpos.c
+++ b/lib/libc/stdio/fgetpos.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fgetpos.c,v 1.6 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: fgetpos.c,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -41,3 +41,4 @@ fgetpos(FILE *fp, fpos_t *pos)
{
return((*pos = ftello(fp)) == (fpos_t)-1);
}
+DEF_STRONG(fgetpos);
diff --git a/lib/libc/stdio/fgets.c b/lib/libc/stdio/fgets.c
index 0ba8770e33b..5966c0bf903 100644
--- a/lib/libc/stdio/fgets.c
+++ b/lib/libc/stdio/fgets.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fgets.c,v 1.14 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fgets.c,v 1.15 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -103,3 +103,4 @@ fgets(char *buf, int n, FILE *fp)
FUNLOCKFILE(fp);
return (buf);
}
+DEF_STRONG(fgets);
diff --git a/lib/libc/stdio/fgetwc.c b/lib/libc/stdio/fgetwc.c
index c16ffaf2997..6c850cc9680 100644
--- a/lib/libc/stdio/fgetwc.c
+++ b/lib/libc/stdio/fgetwc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fgetwc.c,v 1.4 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fgetwc.c,v 1.5 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: fgetwc.c,v 1.3 2003/03/07 07:11:36 tshiozak Exp $ */
/*-
@@ -88,3 +88,4 @@ fgetwc(FILE *fp)
return (r);
}
+DEF_STRONG(fgetwc);
diff --git a/lib/libc/stdio/fgetws.c b/lib/libc/stdio/fgetws.c
index e8cd2490089..0e66552ea45 100644
--- a/lib/libc/stdio/fgetws.c
+++ b/lib/libc/stdio/fgetws.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fgetws.c,v 1.6 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fgetws.c,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: fgetws.c,v 1.1 2003/03/07 07:11:37 tshiozak Exp $ */
/*-
@@ -77,3 +77,4 @@ error:
FUNLOCKFILE(fp);
return (NULL);
}
+DEF_STRONG(fgetws);
diff --git a/lib/libc/stdio/fileno.c b/lib/libc/stdio/fileno.c
index 58628da3c10..f7baee597a6 100644
--- a/lib/libc/stdio/fileno.c
+++ b/lib/libc/stdio/fileno.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fileno.c,v 1.8 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fileno.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -49,3 +49,4 @@ fileno(FILE *fp)
FUNLOCKFILE(fp);
return (ret);
}
+DEF_WEAK(fileno);
diff --git a/lib/libc/stdio/fmemopen.c b/lib/libc/stdio/fmemopen.c
index 8cda0476340..00c27646b96 100644
--- a/lib/libc/stdio/fmemopen.c
+++ b/lib/libc/stdio/fmemopen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fmemopen.c,v 1.2 2013/03/27 15:06:25 mpi Exp $ */
+/* $OpenBSD: fmemopen.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
@@ -181,3 +181,4 @@ fmemopen(void *buf, size_t size, const char *mode)
return (fp);
}
+DEF_WEAK(fmemopen);
diff --git a/lib/libc/stdio/fopen.c b/lib/libc/stdio/fopen.c
index 14650523e08..6936321d643 100644
--- a/lib/libc/stdio/fopen.c
+++ b/lib/libc/stdio/fopen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fopen.c,v 1.7 2008/05/03 18:46:41 chl Exp $ */
+/* $OpenBSD: fopen.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -84,3 +84,4 @@ fopen(const char *file, const char *mode)
(void) __sseek((void *)fp, (fpos_t)0, SEEK_END);
return (fp);
}
+DEF_STRONG(fopen);
diff --git a/lib/libc/stdio/fprintf.c b/lib/libc/stdio/fprintf.c
index a391142ea25..abc04b01951 100644
--- a/lib/libc/stdio/fprintf.c
+++ b/lib/libc/stdio/fprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fprintf.c,v 1.7 2011/05/30 18:48:33 martynas Exp $ */
+/* $OpenBSD: fprintf.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -34,7 +34,6 @@
#include <stdio.h>
#include <stdarg.h>
-/* PRINTFLIKE2 */
int
fprintf(FILE *fp, const char *fmt, ...)
{
@@ -46,3 +45,4 @@ fprintf(FILE *fp, const char *fmt, ...)
va_end(ap);
return (ret);
}
+DEF_STRONG(fprintf);
diff --git a/lib/libc/stdio/fpurge.c b/lib/libc/stdio/fpurge.c
index 65bd74994f4..8dd8a916118 100644
--- a/lib/libc/stdio/fpurge.c
+++ b/lib/libc/stdio/fpurge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fpurge.c,v 1.9 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fpurge.c,v 1.10 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -59,3 +59,4 @@ fpurge(FILE *fp)
FUNLOCKFILE(fp);
return (0);
}
+DEF_WEAK(fpurge);
diff --git a/lib/libc/stdio/fputc.c b/lib/libc/stdio/fputc.c
index 98e39603f04..de365c224f3 100644
--- a/lib/libc/stdio/fputc.c
+++ b/lib/libc/stdio/fputc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fputc.c,v 1.10 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fputc.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -39,3 +39,4 @@ fputc(int c, FILE *fp)
{
return (putc(c, fp));
}
+DEF_STRONG(fputc);
diff --git a/lib/libc/stdio/fputs.c b/lib/libc/stdio/fputs.c
index ea8556a29cf..05ead5c83b6 100644
--- a/lib/libc/stdio/fputs.c
+++ b/lib/libc/stdio/fputs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fputs.c,v 1.10 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fputs.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -56,3 +56,4 @@ fputs(const char *s, FILE *fp)
FUNLOCKFILE(fp);
return (ret);
}
+DEF_STRONG(fputs);
diff --git a/lib/libc/stdio/fputwc.c b/lib/libc/stdio/fputwc.c
index 9db70d061ae..fa3f3704445 100644
--- a/lib/libc/stdio/fputwc.c
+++ b/lib/libc/stdio/fputwc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fputwc.c,v 1.4 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fputwc.c,v 1.5 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: fputwc.c,v 1.3 2003/03/07 07:11:37 tshiozak Exp $ */
/*-
@@ -86,3 +86,4 @@ fputwc(wchar_t wc, FILE *fp)
return (r);
}
+DEF_STRONG(fputwc);
diff --git a/lib/libc/stdio/fputws.c b/lib/libc/stdio/fputws.c
index 108846e7099..8961571188d 100644
--- a/lib/libc/stdio/fputws.c
+++ b/lib/libc/stdio/fputws.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fputws.c,v 1.7 2013/11/12 07:04:35 deraadt Exp $ */
+/* $OpenBSD: fputws.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: fputws.c,v 1.1 2003/03/07 07:11:37 tshiozak Exp $ */
/*-
@@ -55,3 +55,4 @@ fputws(ws, fp)
return (0);
}
+DEF_STRONG(fputws);
diff --git a/lib/libc/stdio/fread.c b/lib/libc/stdio/fread.c
index 6e957623e1f..35c73322a58 100644
--- a/lib/libc/stdio/fread.c
+++ b/lib/libc/stdio/fread.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fread.c,v 1.13 2014/12/08 20:40:53 tedu Exp $ */
+/* $OpenBSD: fread.c,v 1.14 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -101,3 +101,4 @@ fread(void *buf, size_t size, size_t count, FILE *fp)
FUNLOCKFILE(fp);
return (count);
}
+DEF_STRONG(fread);
diff --git a/lib/libc/stdio/freopen.c b/lib/libc/stdio/freopen.c
index 82717b1e26c..442370d870b 100644
--- a/lib/libc/stdio/freopen.c
+++ b/lib/libc/stdio/freopen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: freopen.c,v 1.14 2014/08/31 02:21:18 guenther Exp $ */
+/* $OpenBSD: freopen.c,v 1.15 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -169,3 +169,4 @@ freopen(const char *file, const char *mode, FILE *fp)
FUNLOCKFILE(fp);
return (fp);
}
+DEF_STRONG(freopen);
diff --git a/lib/libc/stdio/fscanf.c b/lib/libc/stdio/fscanf.c
index 5fd10d4a464..e401398d8eb 100644
--- a/lib/libc/stdio/fscanf.c
+++ b/lib/libc/stdio/fscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fscanf.c,v 1.10 2011/05/30 18:48:33 martynas Exp $ */
+/* $OpenBSD: fscanf.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -34,7 +34,6 @@
#include <stdio.h>
#include <stdarg.h>
-/* SCANFLIKE2 */
int
fscanf(FILE *fp, const char *fmt, ...)
{
@@ -46,3 +45,4 @@ fscanf(FILE *fp, const char *fmt, ...)
va_end(ap);
return (ret);
}
+DEF_STRONG(fscanf);
diff --git a/lib/libc/stdio/fseek.c b/lib/libc/stdio/fseek.c
index cdd40b62f8a..f2e975df69e 100644
--- a/lib/libc/stdio/fseek.c
+++ b/lib/libc/stdio/fseek.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fseek.c,v 1.11 2012/05/21 22:24:19 matthew Exp $ */
+/* $OpenBSD: fseek.c,v 1.12 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -243,9 +243,11 @@ dumb:
FUNLOCKFILE(fp);
return (0);
}
+DEF_WEAK(fseeko);
int
fseek(FILE *fp, long offset, int whence)
{
return (fseeko(fp, offset, whence));
}
+DEF_STRONG(fseek);
diff --git a/lib/libc/stdio/fsetpos.c b/lib/libc/stdio/fsetpos.c
index 9624fe56542..d389f5efa7f 100644
--- a/lib/libc/stdio/fsetpos.c
+++ b/lib/libc/stdio/fsetpos.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fsetpos.c,v 1.6 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: fsetpos.c,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -41,3 +41,4 @@ fsetpos(FILE *iop, const fpos_t *pos)
{
return (fseeko(iop, (off_t)*pos, SEEK_SET));
}
+DEF_STRONG(fsetpos);
diff --git a/lib/libc/stdio/ftell.c b/lib/libc/stdio/ftell.c
index 0a2016ce10b..a75ebbbaad7 100644
--- a/lib/libc/stdio/ftell.c
+++ b/lib/libc/stdio/ftell.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ftell.c,v 1.10 2012/05/21 22:24:19 matthew Exp $ */
+/* $OpenBSD: ftell.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -83,6 +83,7 @@ ftello(FILE *fp)
out: FUNLOCKFILE(fp);
return (pos);
}
+DEF_WEAK(ftello);
long
ftell(FILE *fp)
@@ -94,3 +95,4 @@ ftell(FILE *fp)
}
return ((long)offset);
}
+DEF_STRONG(ftell);
diff --git a/lib/libc/stdio/funopen.c b/lib/libc/stdio/funopen.c
index b85ee96a1f7..b6fc464b4aa 100644
--- a/lib/libc/stdio/funopen.c
+++ b/lib/libc/stdio/funopen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: funopen.c,v 1.8 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: funopen.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -66,3 +66,4 @@ funopen(const void *cookie, int (*readfn)(void *, char *, int),
fp->_close = closefn;
return (fp);
}
+DEF_WEAK(funopen);
diff --git a/lib/libc/stdio/fwide.c b/lib/libc/stdio/fwide.c
index 93cddc68e9d..27ca0f8ac59 100644
--- a/lib/libc/stdio/fwide.c
+++ b/lib/libc/stdio/fwide.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fwide.c,v 1.4 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: fwide.c,v 1.5 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: fwide.c,v 1.2 2003/01/18 11:29:54 thorpej Exp $ */
/*-
@@ -62,3 +62,4 @@ fwide(FILE *fp, int mode)
return mode;
}
+DEF_STRONG(fwide);
diff --git a/lib/libc/stdio/fwprintf.c b/lib/libc/stdio/fwprintf.c
index 4474e8b3566..61a017b652d 100644
--- a/lib/libc/stdio/fwprintf.c
+++ b/lib/libc/stdio/fwprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fwprintf.c,v 1.3 2011/04/28 17:38:46 stsp Exp $ */
+/* $OpenBSD: fwprintf.c,v 1.4 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -46,3 +46,4 @@ fwprintf(FILE * __restrict fp, const wchar_t * __restrict fmt, ...)
va_end(ap);
return (ret);
}
+DEF_STRONG(fwprintf);
diff --git a/lib/libc/stdio/fwrite.c b/lib/libc/stdio/fwrite.c
index f0a17bfb9a8..fcabc7c3c06 100644
--- a/lib/libc/stdio/fwrite.c
+++ b/lib/libc/stdio/fwrite.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fwrite.c,v 1.11 2014/05/01 16:40:36 deraadt Exp $ */
+/* $OpenBSD: fwrite.c,v 1.12 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -86,3 +86,4 @@ fwrite(const void *buf, size_t size, size_t count, FILE *fp)
return (count);
return ((n - uio.uio_resid) / size);
}
+DEF_STRONG(fwrite);
diff --git a/lib/libc/stdio/fwscanf.c b/lib/libc/stdio/fwscanf.c
index b716cbff3d3..648e1bfb5fd 100644
--- a/lib/libc/stdio/fwscanf.c
+++ b/lib/libc/stdio/fwscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fwscanf.c,v 1.2 2012/12/05 23:20:01 deraadt Exp $ */
+/* $OpenBSD: fwscanf.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 2002 Tim J. Robbins
@@ -42,3 +42,4 @@ fwscanf(FILE * __restrict fp, const wchar_t * __restrict fmt, ...)
return (r);
}
+DEF_STRONG(fwscanf);
diff --git a/lib/libc/stdio/getc.c b/lib/libc/stdio/getc.c
index 6879cbb7913..53cd3d84797 100644
--- a/lib/libc/stdio/getc.c
+++ b/lib/libc/stdio/getc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getc.c,v 1.9 2009/11/09 00:18:27 kurt Exp $ */
+/* $OpenBSD: getc.c,v 1.10 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -44,6 +44,7 @@ getc_unlocked(FILE *fp)
{
return (__sgetc(fp));
}
+DEF_WEAK(getc_unlocked);
/*
* A subroutine version of the macro getc.
@@ -60,3 +61,4 @@ getc(FILE *fp)
FUNLOCKFILE(fp);
return (c);
}
+DEF_STRONG(getc);
diff --git a/lib/libc/stdio/getchar.c b/lib/libc/stdio/getchar.c
index 550817de028..0bf6ce1ad19 100644
--- a/lib/libc/stdio/getchar.c
+++ b/lib/libc/stdio/getchar.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getchar.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: getchar.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -43,6 +43,7 @@ getchar_unlocked(void)
{
return (getc_unlocked(stdin));
}
+DEF_WEAK(getchar_unlocked);
/*
@@ -56,3 +57,4 @@ getchar(void)
{
return (getc(stdin));
}
+DEF_STRONG(getchar);
diff --git a/lib/libc/stdio/getdelim.c b/lib/libc/stdio/getdelim.c
index faf245ca6b1..58ff0a1be12 100644
--- a/lib/libc/stdio/getdelim.c
+++ b/lib/libc/stdio/getdelim.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getdelim.c,v 1.3 2015/02/06 23:21:58 millert Exp $ */
+/* $OpenBSD: getdelim.c,v 1.4 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: getdelim.c,v 1.13 2011/07/22 23:12:30 joerg Exp $ */
/*
@@ -132,3 +132,4 @@ error:
FUNLOCKFILE(fp);
return -1;
}
+DEF_WEAK(getdelim);
diff --git a/lib/libc/stdio/getline.c b/lib/libc/stdio/getline.c
index 55ad39675b9..68c10104933 100644
--- a/lib/libc/stdio/getline.c
+++ b/lib/libc/stdio/getline.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getline.c,v 1.1 2012/03/21 23:44:35 fgsch Exp $ */
+/* $OpenBSD: getline.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: getline.c,v 1.3 2009/12/02 08:46:33 roy Exp $ */
/*
@@ -35,3 +35,4 @@ getline(char **__restrict buf, size_t *__restrict buflen, FILE *__restrict fp)
{
return getdelim(buf, buflen, '\n', fp);
}
+DEF_WEAK(getline);
diff --git a/lib/libc/stdio/getw.c b/lib/libc/stdio/getw.c
index 6bfb97eb9fd..a6688be7c74 100644
--- a/lib/libc/stdio/getw.c
+++ b/lib/libc/stdio/getw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getw.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: getw.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -40,3 +40,4 @@ getw(FILE *fp)
return (fread((void *)&x, sizeof(x), 1, fp) == 1 ? x : EOF);
}
+DEF_WEAK(getw);
diff --git a/lib/libc/stdio/getwc.c b/lib/libc/stdio/getwc.c
index e9bbb7c2421..24d1bed3f60 100644
--- a/lib/libc/stdio/getwc.c
+++ b/lib/libc/stdio/getwc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getwc.c,v 1.1 2005/06/17 20:40:32 espie Exp $ */
+/* $OpenBSD: getwc.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: getwc.c,v 1.2 2003/01/18 11:29:55 thorpej Exp $ */
/*-
@@ -43,3 +43,4 @@ getwc(FILE *fp)
return fgetwc(fp);
}
+DEF_STRONG(getwc);
diff --git a/lib/libc/stdio/getwchar.c b/lib/libc/stdio/getwchar.c
index 2a112ed8fbe..644b553ce6c 100644
--- a/lib/libc/stdio/getwchar.c
+++ b/lib/libc/stdio/getwchar.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getwchar.c,v 1.1 2005/06/17 20:40:32 espie Exp $ */
+/* $OpenBSD: getwchar.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: getwchar.c,v 1.2 2003/01/18 11:29:55 thorpej Exp $ */
/*-
@@ -43,3 +43,4 @@ getwchar()
return fgetwc(stdin);
}
+DEF_STRONG(getwchar);
diff --git a/lib/libc/stdio/mktemp.c b/lib/libc/stdio/mktemp.c
index 956608c151d..43b38dd8b6d 100644
--- a/lib/libc/stdio/mktemp.c
+++ b/lib/libc/stdio/mktemp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mktemp.c,v 1.35 2014/10/31 15:54:14 millert Exp $ */
+/* $OpenBSD: mktemp.c,v 1.36 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1996-1998, 2008 Theo de Raadt
* Copyright (c) 1997, 2008-2009 Todd C. Miller
@@ -110,8 +110,6 @@ mktemp_internal(char *path, int slen, int mode, int flags)
return(-1);
}
-char *_mktemp(char *);
-
char *
_mktemp(char *path)
{
diff --git a/lib/libc/stdio/open_memstream.c b/lib/libc/stdio/open_memstream.c
index d38c210df9e..f708acc5032 100644
--- a/lib/libc/stdio/open_memstream.c
+++ b/lib/libc/stdio/open_memstream.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: open_memstream.c,v 1.5 2015/02/05 12:59:57 millert Exp $ */
+/* $OpenBSD: open_memstream.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
@@ -156,3 +156,4 @@ open_memstream(char **pbuf, size_t *psize)
return (fp);
}
+DEF_WEAK(open_memstream);
diff --git a/lib/libc/stdio/open_wmemstream.c b/lib/libc/stdio/open_wmemstream.c
index 7de134f6864..f714e9edf46 100644
--- a/lib/libc/stdio/open_wmemstream.c
+++ b/lib/libc/stdio/open_wmemstream.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: open_wmemstream.c,v 1.6 2015/02/05 12:59:57 millert Exp $ */
+/* $OpenBSD: open_wmemstream.c,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
@@ -167,3 +167,4 @@ open_wmemstream(wchar_t **pbuf, size_t *psize)
return (fp);
}
+DEF_WEAK(open_wmemstream);
diff --git a/lib/libc/stdio/perror.c b/lib/libc/stdio/perror.c
index 8728718c5d5..fdd6120e4f2 100644
--- a/lib/libc/stdio/perror.c
+++ b/lib/libc/stdio/perror.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: perror.c,v 1.8 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: perror.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1988, 1993
* The Regents of the University of California. All rights reserved.
@@ -60,3 +60,4 @@ perror(const char *s)
v->iov_len = 1;
(void)writev(STDERR_FILENO, iov, (v - iov) + 1);
}
+DEF_STRONG(perror);
diff --git a/lib/libc/stdio/printf.c b/lib/libc/stdio/printf.c
index 09bb3d7f7db..d8b6f09fcac 100644
--- a/lib/libc/stdio/printf.c
+++ b/lib/libc/stdio/printf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: printf.c,v 1.8 2011/05/30 18:48:33 martynas Exp $ */
+/* $OpenBSD: printf.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -34,7 +34,6 @@
#include <stdio.h>
#include <stdarg.h>
-/* PRINTFLIKE1 */
int
printf(const char *fmt, ...)
{
@@ -46,3 +45,4 @@ printf(const char *fmt, ...)
va_end(ap);
return (ret);
}
+DEF_STRONG(printf);
diff --git a/lib/libc/stdio/putc.c b/lib/libc/stdio/putc.c
index 762fecb2d38..9fca905075b 100644
--- a/lib/libc/stdio/putc.c
+++ b/lib/libc/stdio/putc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: putc.c,v 1.12 2009/11/21 10:11:54 guenther Exp $ */
+/* $OpenBSD: putc.c,v 1.13 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -50,6 +50,7 @@ putc_unlocked(int c, FILE *fp)
_SET_ORIENTATION(fp, -1);
return (__sputc(c, fp));
}
+DEF_WEAK(putc_unlocked);
/*
* A subroutine version of the macro putc.
@@ -66,3 +67,4 @@ putc(int c, FILE *fp)
FUNLOCKFILE(fp);
return (ret);
}
+DEF_STRONG(putc);
diff --git a/lib/libc/stdio/putchar.c b/lib/libc/stdio/putchar.c
index 233cdfd0268..43287ae071b 100644
--- a/lib/libc/stdio/putchar.c
+++ b/lib/libc/stdio/putchar.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: putchar.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: putchar.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -44,6 +44,7 @@ putchar_unlocked(int c)
return (putc_unlocked(c,so));
}
+DEF_WEAK(putchar_unlocked);
#undef putchar
@@ -57,3 +58,4 @@ putchar(int c)
return (putc(c, so));
}
+DEF_STRONG(putchar);
diff --git a/lib/libc/stdio/puts.c b/lib/libc/stdio/puts.c
index 655aed7ec9d..57d4b786f89 100644
--- a/lib/libc/stdio/puts.c
+++ b/lib/libc/stdio/puts.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: puts.c,v 1.11 2009/11/21 09:53:44 guenther Exp $ */
+/* $OpenBSD: puts.c,v 1.12 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -60,3 +60,4 @@ puts(const char *s)
FUNLOCKFILE(stdout);
return (ret ? EOF : '\n');
}
+DEF_STRONG(puts);
diff --git a/lib/libc/stdio/putw.c b/lib/libc/stdio/putw.c
index 47941a476c1..be17ead9e05 100644
--- a/lib/libc/stdio/putw.c
+++ b/lib/libc/stdio/putw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: putw.c,v 1.10 2009/11/21 09:53:44 guenther Exp $ */
+/* $OpenBSD: putw.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -52,3 +52,4 @@ putw(int w, FILE *fp)
FUNLOCKFILE(fp);
return (ret);
}
+DEF_WEAK(putw);
diff --git a/lib/libc/stdio/putwc.c b/lib/libc/stdio/putwc.c
index 8e2ff2dca45..44096903a8f 100644
--- a/lib/libc/stdio/putwc.c
+++ b/lib/libc/stdio/putwc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: putwc.c,v 1.1 2005/06/17 20:40:32 espie Exp $ */
+/* $OpenBSD: putwc.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: putwc.c,v 1.3 2003/01/18 11:29:56 thorpej Exp $ */
/*-
@@ -43,3 +43,4 @@ putwc(wchar_t wc, FILE *fp)
return fputwc(wc, fp);
}
+DEF_STRONG(putwc);
diff --git a/lib/libc/stdio/putwchar.c b/lib/libc/stdio/putwchar.c
index 940ec05ab59..ae01a17045e 100644
--- a/lib/libc/stdio/putwchar.c
+++ b/lib/libc/stdio/putwchar.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: putwchar.c,v 1.1 2005/06/17 20:40:32 espie Exp $ */
+/* $OpenBSD: putwchar.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: putwchar.c,v 1.3 2003/01/18 11:29:56 thorpej Exp $ */
/*-
@@ -43,3 +43,4 @@ putwchar(wchar_t wc)
return fputwc(wc, stdout);
}
+DEF_STRONG(putwchar);
diff --git a/lib/libc/stdio/remove.c b/lib/libc/stdio/remove.c
index d09d76f9df2..e08e5997658 100644
--- a/lib/libc/stdio/remove.c
+++ b/lib/libc/stdio/remove.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: remove.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: remove.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -47,3 +47,4 @@ remove(const char *file)
return (rmdir(file));
return (unlink(file));
}
+DEF_STRONG(remove);
diff --git a/lib/libc/stdio/rewind.c b/lib/libc/stdio/rewind.c
index 28119b6a884..4a52ed064a5 100644
--- a/lib/libc/stdio/rewind.c
+++ b/lib/libc/stdio/rewind.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rewind.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: rewind.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -41,3 +41,4 @@ rewind(FILE *fp)
clearerr(fp);
errno = 0; /* not required, but seems reasonable */
}
+DEF_STRONG(rewind);
diff --git a/lib/libc/stdio/rget.c b/lib/libc/stdio/rget.c
index 4cd97cbe9a4..368815b1614 100644
--- a/lib/libc/stdio/rget.c
+++ b/lib/libc/stdio/rget.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rget.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: rget.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -49,3 +49,4 @@ __srget(FILE *fp)
}
return (EOF);
}
+DEF_STRONG(__srget);
diff --git a/lib/libc/stdio/scanf.c b/lib/libc/stdio/scanf.c
index 90cf12a3ba7..4d81c986bd3 100644
--- a/lib/libc/stdio/scanf.c
+++ b/lib/libc/stdio/scanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: scanf.c,v 1.10 2011/05/30 18:48:33 martynas Exp $ */
+/* $OpenBSD: scanf.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -34,7 +34,6 @@
#include <stdio.h>
#include <stdarg.h>
-/* SCANFLIKE1 */
int
scanf(const char *fmt, ...)
{
@@ -46,3 +45,4 @@ scanf(const char *fmt, ...)
va_end(ap);
return (ret);
}
+DEF_STRONG(scanf);
diff --git a/lib/libc/stdio/setbuf.c b/lib/libc/stdio/setbuf.c
index 883b89532b8..ababa94bd36 100644
--- a/lib/libc/stdio/setbuf.c
+++ b/lib/libc/stdio/setbuf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: setbuf.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: setbuf.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -39,3 +39,4 @@ setbuf(FILE *fp, char *buf)
{
(void) setvbuf(fp, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
}
+DEF_STRONG(setbuf);
diff --git a/lib/libc/stdio/setbuffer.c b/lib/libc/stdio/setbuffer.c
index 8725ff79558..b67d7659494 100644
--- a/lib/libc/stdio/setbuffer.c
+++ b/lib/libc/stdio/setbuffer.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: setbuffer.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: setbuffer.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -39,6 +39,7 @@ setbuffer(FILE *fp, char *buf, int size)
(void)setvbuf(fp, buf, buf ? _IOFBF : _IONBF, size);
}
+DEF_WEAK(setbuffer);
/*
* set line buffering
@@ -49,3 +50,4 @@ setlinebuf(FILE *fp)
return (setvbuf(fp, (char *)NULL, _IOLBF, (size_t)0));
}
+DEF_WEAK(setlinebuf);
diff --git a/lib/libc/stdio/setvbuf.c b/lib/libc/stdio/setvbuf.c
index dc79adc8244..02879a771a6 100644
--- a/lib/libc/stdio/setvbuf.c
+++ b/lib/libc/stdio/setvbuf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: setvbuf.c,v 1.12 2015/01/13 07:18:21 guenther Exp $ */
+/* $OpenBSD: setvbuf.c,v 1.13 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -158,3 +158,4 @@ nbf:
return (ret);
}
+DEF_STRONG(setvbuf);
diff --git a/lib/libc/stdio/snprintf.c b/lib/libc/stdio/snprintf.c
index 7b087e95dd1..1d7e7c9e80a 100644
--- a/lib/libc/stdio/snprintf.c
+++ b/lib/libc/stdio/snprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: snprintf.c,v 1.18 2011/05/30 18:48:33 martynas Exp $ */
+/* $OpenBSD: snprintf.c,v 1.19 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -37,7 +37,6 @@
#include <stdarg.h>
#include "local.h"
-/* PRINTFLIKE3 */
int
snprintf(char *str, size_t n, const char *fmt, ...)
{
@@ -66,3 +65,4 @@ snprintf(char *str, size_t n, const char *fmt, ...)
*f._p = '\0';
return (ret);
}
+DEF_STRONG(snprintf);
diff --git a/lib/libc/stdio/sscanf.c b/lib/libc/stdio/sscanf.c
index e371ca693c1..30394cb5cc6 100644
--- a/lib/libc/stdio/sscanf.c
+++ b/lib/libc/stdio/sscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sscanf.c,v 1.14 2011/11/08 18:30:42 guenther Exp $ */
+/* $OpenBSD: sscanf.c,v 1.15 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -36,7 +36,6 @@
#include <stdarg.h>
#include "local.h"
-/* ARGSUSED */
static int
eofread(void *cookie, char *buf, int len)
{
@@ -44,7 +43,6 @@ eofread(void *cookie, char *buf, int len)
return (0);
}
-/* SCANFLIKE2 */
int
sscanf(const char *str, const char *fmt, ...)
{
@@ -64,3 +62,4 @@ sscanf(const char *str, const char *fmt, ...)
va_end(ap);
return (ret);
}
+DEF_STRONG(sscanf);
diff --git a/lib/libc/stdio/swprintf.c b/lib/libc/stdio/swprintf.c
index 8928aeabb86..02ba508a445 100644
--- a/lib/libc/stdio/swprintf.c
+++ b/lib/libc/stdio/swprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: swprintf.c,v 1.5 2012/12/05 23:20:01 deraadt Exp $ */
+/* $OpenBSD: swprintf.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: swprintf.c,v 1.1 2005/05/14 23:51:02 christos Exp $ */
/*-
@@ -43,3 +43,4 @@ swprintf(wchar_t * __restrict s, size_t n, const wchar_t * __restrict fmt, ...)
return (ret);
}
+DEF_STRONG(swprintf);
diff --git a/lib/libc/stdio/swscanf.c b/lib/libc/stdio/swscanf.c
index a85e9ee2ba8..6758a6d2f67 100644
--- a/lib/libc/stdio/swscanf.c
+++ b/lib/libc/stdio/swscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: swscanf.c,v 1.2 2012/12/05 23:20:01 deraadt Exp $ */
+/* $OpenBSD: swscanf.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 2002 Tim J. Robbins
@@ -42,3 +42,4 @@ swscanf(const wchar_t * __restrict str, const wchar_t * __restrict fmt, ...)
return (r);
}
+DEF_STRONG(swscanf);
diff --git a/lib/libc/stdio/tempnam.c b/lib/libc/stdio/tempnam.c
index 56d667dadd4..854b871cb40 100644
--- a/lib/libc/stdio/tempnam.c
+++ b/lib/libc/stdio/tempnam.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tempnam.c,v 1.18 2015/03/23 22:15:11 jsg Exp $ */
+/* $OpenBSD: tempnam.c,v 1.19 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1988, 1993
* The Regents of the University of California. All rights reserved.
@@ -39,8 +39,6 @@
__warn_references(tempnam,
"warning: tempnam() possibly used unsafely; consider using mkstemp()");
-extern char *_mktemp(char *);
-
char *
tempnam(const char *dir, const char *pfx)
{
diff --git a/lib/libc/stdio/tmpfile.c b/lib/libc/stdio/tmpfile.c
index 39f7e929a1a..6ee28caf0f6 100644
--- a/lib/libc/stdio/tmpfile.c
+++ b/lib/libc/stdio/tmpfile.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmpfile.c,v 1.10 2005/10/10 12:00:52 espie Exp $ */
+/* $OpenBSD: tmpfile.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -79,3 +79,4 @@ tmpfile(void)
}
return (fp);
}
+DEF_STRONG(tmpfile);
diff --git a/lib/libc/stdio/tmpnam.c b/lib/libc/stdio/tmpnam.c
index 32e0a220202..d6dc10eec03 100644
--- a/lib/libc/stdio/tmpnam.c
+++ b/lib/libc/stdio/tmpnam.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmpnam.c,v 1.10 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: tmpnam.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
@@ -39,8 +39,6 @@
__warn_references(tmpnam,
"warning: tmpnam() possibly used unsafely; consider using mkstemp()");
-extern char *_mktemp(char *);
-
char *
tmpnam(char *s)
{
diff --git a/lib/libc/stdio/ungetc.c b/lib/libc/stdio/ungetc.c
index ec98f26c22e..cb49c9bd195 100644
--- a/lib/libc/stdio/ungetc.c
+++ b/lib/libc/stdio/ungetc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ungetc.c,v 1.13 2014/10/11 04:05:10 deraadt Exp $ */
+/* $OpenBSD: ungetc.c,v 1.14 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -143,3 +143,4 @@ inc_ret: fp->_r++;
FUNLOCKFILE(fp);
return (c);
}
+DEF_STRONG(ungetc);
diff --git a/lib/libc/stdio/ungetwc.c b/lib/libc/stdio/ungetwc.c
index c0321e9e1e5..9b312df15b1 100644
--- a/lib/libc/stdio/ungetwc.c
+++ b/lib/libc/stdio/ungetwc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ungetwc.c,v 1.5 2011/10/16 13:20:51 stsp Exp $ */
+/* $OpenBSD: ungetwc.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: ungetwc.c,v 1.2 2003/01/18 11:29:59 thorpej Exp $ */
/*-
@@ -75,3 +75,4 @@ ungetwc(wint_t wc, FILE *fp)
FUNLOCKFILE(fp);
return (r);
}
+DEF_STRONG(ungetwc);
diff --git a/lib/libc/stdio/vasprintf.c b/lib/libc/stdio/vasprintf.c
index 2cc3c7d9356..11d90a4b187 100644
--- a/lib/libc/stdio/vasprintf.c
+++ b/lib/libc/stdio/vasprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vasprintf.c,v 1.17 2015/08/20 21:49:29 deraadt Exp $ */
+/* $OpenBSD: vasprintf.c,v 1.18 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -56,3 +56,4 @@ err:
errno = ENOMEM;
return (-1);
}
+DEF_WEAK(vasprintf);
diff --git a/lib/libc/stdio/vdprintf.c b/lib/libc/stdio/vdprintf.c
index 49c19697710..e76fcd4987b 100644
--- a/lib/libc/stdio/vdprintf.c
+++ b/lib/libc/stdio/vdprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vdprintf.c,v 1.1 2013/01/30 00:08:13 brad Exp $ */
+/* $OpenBSD: vdprintf.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/* $FreeBSD: src/lib/libc/stdio/vdprintf.c,v 1.4 2012/11/17 01:49:40 svnexp Exp $ */
/*-
@@ -71,3 +71,4 @@ vdprintf(int fd, const char * __restrict fmt, va_list ap)
return fflush(&f) ? EOF : ret;
}
+DEF_WEAK(vdprintf);
diff --git a/lib/libc/stdio/vfprintf.c b/lib/libc/stdio/vfprintf.c
index 5f4fb7fa9bb..df26c324588 100644
--- a/lib/libc/stdio/vfprintf.c
+++ b/lib/libc/stdio/vfprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfprintf.c,v 1.67 2014/12/21 00:23:30 daniel Exp $ */
+/* $OpenBSD: vfprintf.c,v 1.68 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -268,6 +268,7 @@ vfprintf(FILE *fp, const char *fmt0, __va_list ap)
FUNLOCKFILE(fp);
return (ret);
}
+DEF_STRONG(vfprintf);
int
__vfprintf(FILE *fp, const char *fmt0, __va_list ap)
diff --git a/lib/libc/stdio/vfscanf.c b/lib/libc/stdio/vfscanf.c
index abefe32cbb7..83a3bfb6c05 100644
--- a/lib/libc/stdio/vfscanf.c
+++ b/lib/libc/stdio/vfscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfscanf.c,v 1.31 2014/03/19 05:17:01 guenther Exp $ */
+/* $OpenBSD: vfscanf.c,v 1.32 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -967,3 +967,4 @@ vfscanf(FILE *fp, const char *fmt0, __va_list ap)
FUNLOCKFILE(fp);
return (r);
}
+DEF_STRONG(vfscanf);
diff --git a/lib/libc/stdio/vfwprintf.c b/lib/libc/stdio/vfwprintf.c
index a6f41232c53..4a8cbcfe094 100644
--- a/lib/libc/stdio/vfwprintf.c
+++ b/lib/libc/stdio/vfwprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfwprintf.c,v 1.12 2014/12/21 00:23:30 daniel Exp $ */
+/* $OpenBSD: vfwprintf.c,v 1.13 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -1072,6 +1072,7 @@ vfwprintf(FILE * __restrict fp, const wchar_t * __restrict fmt0, __va_list ap)
return (r);
}
+DEF_STRONG(vfwprintf);
/*
* Type ids for argument type table.
diff --git a/lib/libc/stdio/vfwscanf.c b/lib/libc/stdio/vfwscanf.c
index cbb36be34a2..f2ec3fb68b2 100644
--- a/lib/libc/stdio/vfwscanf.c
+++ b/lib/libc/stdio/vfwscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfwscanf.c,v 1.4 2014/03/19 05:17:01 guenther Exp $ */
+/* $OpenBSD: vfwscanf.c,v 1.5 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -796,3 +796,4 @@ vfwscanf(FILE * __restrict fp, const wchar_t * __restrict fmt, __va_list ap)
FUNLOCKFILE(fp);
return (r);
}
+DEF_STRONG(vfwscanf);
diff --git a/lib/libc/stdio/vprintf.c b/lib/libc/stdio/vprintf.c
index fcc622ca799..5d858b60e5b 100644
--- a/lib/libc/stdio/vprintf.c
+++ b/lib/libc/stdio/vprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vprintf.c,v 1.8 2006/01/06 18:53:04 millert Exp $ */
+/* $OpenBSD: vprintf.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -38,3 +38,4 @@ vprintf(const char *fmt, __va_list ap)
{
return (vfprintf(stdout, fmt, ap));
}
+DEF_STRONG(vprintf);
diff --git a/lib/libc/stdio/vscanf.c b/lib/libc/stdio/vscanf.c
index 228498e75cc..e56738de6b6 100644
--- a/lib/libc/stdio/vscanf.c
+++ b/lib/libc/stdio/vscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vscanf.c,v 1.8 2006/01/06 18:53:04 millert Exp $ */
+/* $OpenBSD: vscanf.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -39,3 +39,4 @@ vscanf(const char *fmt, __va_list ap)
return (vfscanf(stdin, fmt, ap));
}
+DEF_STRONG(vscanf);
diff --git a/lib/libc/stdio/vsnprintf.c b/lib/libc/stdio/vsnprintf.c
index 8b1a088da85..e14b2a1adb3 100644
--- a/lib/libc/stdio/vsnprintf.c
+++ b/lib/libc/stdio/vsnprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vsnprintf.c,v 1.15 2009/11/09 00:18:28 kurt Exp $ */
+/* $OpenBSD: vsnprintf.c,v 1.16 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -62,3 +62,4 @@ vsnprintf(char *str, size_t n, const char *fmt, __va_list ap)
*f._p = '\0';
return (ret);
}
+DEF_STRONG(vsnprintf);
diff --git a/lib/libc/stdio/vsscanf.c b/lib/libc/stdio/vsscanf.c
index 71eb7529879..86e0b4c1e0b 100644
--- a/lib/libc/stdio/vsscanf.c
+++ b/lib/libc/stdio/vsscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vsscanf.c,v 1.12 2011/11/08 18:30:42 guenther Exp $ */
+/* $OpenBSD: vsscanf.c,v 1.13 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -35,7 +35,6 @@
#include <string.h>
#include "local.h"
-/* ARGSUSED */
static int
eofread(void *cookie, char *buf, int len)
{
@@ -57,3 +56,4 @@ vsscanf(const char *str, const char *fmt, __va_list ap)
f._lb._base = NULL;
return (__svfscanf(&f, fmt, ap));
}
+DEF_STRONG(vsscanf);
diff --git a/lib/libc/stdio/vswprintf.c b/lib/libc/stdio/vswprintf.c
index d79563f5568..641db4ae73b 100644
--- a/lib/libc/stdio/vswprintf.c
+++ b/lib/libc/stdio/vswprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vswprintf.c,v 1.5 2015/08/20 21:49:29 deraadt Exp $ */
+/* $OpenBSD: vswprintf.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: vswprintf.c,v 1.1 2005/05/14 23:51:02 christos Exp $ */
/*
@@ -94,3 +94,4 @@ vswprintf(wchar_t * __restrict s, size_t n, const wchar_t * __restrict fmt,
return (ret);
}
+DEF_STRONG(vswprintf);
diff --git a/lib/libc/stdio/vswscanf.c b/lib/libc/stdio/vswscanf.c
index cbaa25091ba..e87dfebd141 100644
--- a/lib/libc/stdio/vswscanf.c
+++ b/lib/libc/stdio/vswscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vswscanf.c,v 1.2 2012/12/05 23:20:01 deraadt Exp $ */
+/* $OpenBSD: vswscanf.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -86,3 +86,4 @@ vswscanf(const wchar_t * __restrict str, const wchar_t * __restrict fmt,
return (r);
}
+DEF_STRONG(vswscanf);
diff --git a/lib/libc/stdio/vwprintf.c b/lib/libc/stdio/vwprintf.c
index 49569c1a27e..9598d331a3f 100644
--- a/lib/libc/stdio/vwprintf.c
+++ b/lib/libc/stdio/vwprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vwprintf.c,v 1.3 2011/04/28 17:38:46 stsp Exp $ */
+/* $OpenBSD: vwprintf.c,v 1.4 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -40,3 +40,4 @@ vwprintf(const wchar_t * __restrict fmt, __va_list ap)
{
return (vfwprintf(stdout, fmt, ap));
}
+DEF_STRONG(vwprintf);
diff --git a/lib/libc/stdio/vwscanf.c b/lib/libc/stdio/vwscanf.c
index 7039f02d7fe..bd824b4d4bb 100644
--- a/lib/libc/stdio/vwscanf.c
+++ b/lib/libc/stdio/vwscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vwscanf.c,v 1.2 2012/12/05 23:20:01 deraadt Exp $ */
+/* $OpenBSD: vwscanf.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 2002 Tim J. Robbins
@@ -36,3 +36,4 @@ vwscanf(const wchar_t * __restrict fmt, __va_list ap)
return (vfwscanf(stdin, fmt, ap));
}
+DEF_STRONG(vwscanf);
diff --git a/lib/libc/stdio/wbuf.c b/lib/libc/stdio/wbuf.c
index 6aa00e1d6c4..2d077505b80 100644
--- a/lib/libc/stdio/wbuf.c
+++ b/lib/libc/stdio/wbuf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: wbuf.c,v 1.12 2009/11/09 00:18:28 kurt Exp $ */
+/* $OpenBSD: wbuf.c,v 1.13 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -82,3 +82,4 @@ __swbuf(int c, FILE *fp)
return (EOF);
return (c);
}
+DEF_STRONG(__swbuf);
diff --git a/lib/libc/stdio/wprintf.c b/lib/libc/stdio/wprintf.c
index 9f7abb64e3b..95243828f00 100644
--- a/lib/libc/stdio/wprintf.c
+++ b/lib/libc/stdio/wprintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: wprintf.c,v 1.3 2011/04/28 17:38:46 stsp Exp $ */
+/* $OpenBSD: wprintf.c,v 1.4 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -46,3 +46,4 @@ wprintf(const wchar_t * __restrict fmt, ...)
va_end(ap);
return (ret);
}
+DEF_STRONG(wprintf);
diff --git a/lib/libc/stdio/wscanf.c b/lib/libc/stdio/wscanf.c
index 06c0829ab34..c73c9299851 100644
--- a/lib/libc/stdio/wscanf.c
+++ b/lib/libc/stdio/wscanf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: wscanf.c,v 1.2 2012/12/05 23:20:01 deraadt Exp $ */
+/* $OpenBSD: wscanf.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 2002 Tim J. Robbins
@@ -42,3 +42,4 @@ wscanf(const wchar_t * __restrict fmt, ...)
return (r);
}
+DEF_STRONG(wscanf);
diff --git a/lib/libc/string/bcmp.c b/lib/libc/string/bcmp.c
index f64672990c6..5d446bf0966 100644
--- a/lib/libc/string/bcmp.c
+++ b/lib/libc/string/bcmp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bcmp.c,v 1.10 2014/06/10 04:17:37 deraadt Exp $ */
+/* $OpenBSD: bcmp.c,v 1.11 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1987 Regents of the University of California.
@@ -49,3 +49,4 @@ bcmp(const void *b1, const void *b2, size_t length)
while (--length);
return (0);
}
+DEF_WEAK(bcmp);
diff --git a/lib/libc/string/bcopy.c b/lib/libc/string/bcopy.c
index fcaa843c71c..ef0d3680538 100644
--- a/lib/libc/string/bcopy.c
+++ b/lib/libc/string/bcopy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bcopy.c,v 1.6 2014/11/30 19:43:56 deraadt Exp $ */
+/* $OpenBSD: bcopy.c,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -110,3 +110,4 @@ bcopy(const void *src0, void *dst0, size_t length)
done:
return;
}
+DEF_WEAK(bcopy);
diff --git a/lib/libc/string/bzero.c b/lib/libc/string/bzero.c
index fdd3d9cc8da..5173de26dd1 100644
--- a/lib/libc/string/bzero.c
+++ b/lib/libc/string/bzero.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bzero.c,v 1.8 2014/06/10 04:17:37 deraadt Exp $ */
+/* $OpenBSD: bzero.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1987 Regents of the University of California.
@@ -42,3 +42,4 @@ bzero(void *b, size_t length)
for (p = b; length--;)
*p++ = '\0';
}
+DEF_WEAK(bzero);
diff --git a/lib/libc/string/explicit_bzero.c b/lib/libc/string/explicit_bzero.c
index 3e33ca85b83..003ea7cc4c6 100644
--- a/lib/libc/string/explicit_bzero.c
+++ b/lib/libc/string/explicit_bzero.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: explicit_bzero.c,v 1.3 2014/06/21 02:34:26 matthew Exp $ */
+/* $OpenBSD: explicit_bzero.c,v 1.4 2015/08/31 02:53:57 guenther Exp $ */
/*
* Public domain.
* Written by Matthew Dempsky.
@@ -17,3 +17,4 @@ explicit_bzero(void *buf, size_t len)
memset(buf, 0, len);
__explicit_bzero_hook(buf, len);
}
+DEF_WEAK(explicit_bzero);
diff --git a/lib/libc/string/ffs.c b/lib/libc/string/ffs.c
index de4480a7efd..a75fd9d79f8 100644
--- a/lib/libc/string/ffs.c
+++ b/lib/libc/string/ffs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ffs.c,v 1.8 2014/06/10 04:17:37 deraadt Exp $ */
+/* $OpenBSD: ffs.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*
* Public domain.
@@ -38,3 +38,4 @@ ffs(int mask)
return (bit + t[ r & 0xf ]);
}
+DEF_WEAK(ffs);
diff --git a/lib/libc/string/memccpy.c b/lib/libc/string/memccpy.c
index 485c55fcabf..635061b8cb9 100644
--- a/lib/libc/string/memccpy.c
+++ b/lib/libc/string/memccpy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: memccpy.c,v 1.6 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: memccpy.c,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -46,3 +46,4 @@ memccpy(void *t, const void *f, int c, size_t n)
}
return (0);
}
+DEF_WEAK(memccpy);
diff --git a/lib/libc/string/memchr.c b/lib/libc/string/memchr.c
index 4573e3ceb11..a6a4bd60d03 100644
--- a/lib/libc/string/memchr.c
+++ b/lib/libc/string/memchr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: memchr.c,v 1.7 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: memchr.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -46,3 +46,4 @@ memchr(const void *s, int c, size_t n)
}
return (NULL);
}
+DEF_STRONG(memchr);
diff --git a/lib/libc/string/memcmp.c b/lib/libc/string/memcmp.c
index 49384a6fb99..0df2c54d2af 100644
--- a/lib/libc/string/memcmp.c
+++ b/lib/libc/string/memcmp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: memcmp.c,v 1.5 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: memcmp.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -49,3 +49,4 @@ memcmp(const void *s1, const void *s2, size_t n)
}
return (0);
}
+DEF_STRONG(memcmp);
diff --git a/lib/libc/string/memcpy.c b/lib/libc/string/memcpy.c
index 1b9715e4717..73136edd722 100644
--- a/lib/libc/string/memcpy.c
+++ b/lib/libc/string/memcpy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: memcpy.c,v 1.1 2014/11/30 19:43:56 deraadt Exp $ */
+/* $OpenBSD: memcpy.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -97,3 +97,4 @@ memcpy(void *dst0, const void *src0, size_t length)
done:
return (dst0);
}
+DEF_STRONG(memcpy);
diff --git a/lib/libc/string/memmem.c b/lib/libc/string/memmem.c
index 5793a7dfd75..823443b08a6 100644
--- a/lib/libc/string/memmem.c
+++ b/lib/libc/string/memmem.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: memmem.c,v 1.3 2013/05/30 01:10:45 ajacoutot Exp $ */
+/* $OpenBSD: memmem.c,v 1.4 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 2005 Pascal Gloor <pascal.gloor@spale.com>
*
@@ -61,3 +61,4 @@ memmem(const void *l, size_t l_len, const void *s, size_t s_len)
return NULL;
}
+DEF_WEAK(memmem);
diff --git a/lib/libc/string/memmove.c b/lib/libc/string/memmove.c
index 1baad535440..2f1deb2c70d 100644
--- a/lib/libc/string/memmove.c
+++ b/lib/libc/string/memmove.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: memmove.c,v 1.1 2014/11/30 19:43:56 deraadt Exp $ */
+/* $OpenBSD: memmove.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -110,3 +110,4 @@ memmove(void *dst0, const void *src0, size_t length)
done:
return (dst0);
}
+DEF_STRONG(memmove);
diff --git a/lib/libc/string/memrchr.c b/lib/libc/string/memrchr.c
index bd27ebc620e..26a33995b70 100644
--- a/lib/libc/string/memrchr.c
+++ b/lib/libc/string/memrchr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: memrchr.c,v 1.2 2007/11/27 16:22:12 martynas Exp $ */
+/* $OpenBSD: memrchr.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 2007 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -36,3 +36,4 @@ memrchr(const void *s, int c, size_t n)
}
return(NULL);
}
+DEF_WEAK(memrchr);
diff --git a/lib/libc/string/memset.c b/lib/libc/string/memset.c
index 61709c139de..242529ee0f2 100644
--- a/lib/libc/string/memset.c
+++ b/lib/libc/string/memset.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: memset.c,v 1.6 2008/03/15 21:40:39 ray Exp $ */
+/* $OpenBSD: memset.c,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -45,3 +45,4 @@ memset(void *dst, int c, size_t n)
}
return (dst);
}
+DEF_STRONG(memset);
diff --git a/lib/libc/string/stpncpy.c b/lib/libc/string/stpncpy.c
index c7c2a57c4cd..6bdee5de164 100644
--- a/lib/libc/string/stpncpy.c
+++ b/lib/libc/string/stpncpy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: stpncpy.c,v 1.2 2012/07/11 10:44:59 naddy Exp $ */
+/* $OpenBSD: stpncpy.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -54,3 +54,4 @@ stpncpy(char *dst, const char *src, size_t n)
}
return (dst);
}
+DEF_WEAK(stpncpy);
diff --git a/lib/libc/string/strcasecmp.c b/lib/libc/string/strcasecmp.c
index 2be09136c07..edbd638722e 100644
--- a/lib/libc/string/strcasecmp.c
+++ b/lib/libc/string/strcasecmp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strcasecmp.c,v 1.6 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strcasecmp.c,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1987, 1993
@@ -85,6 +85,7 @@ strcasecmp(const char *s1, const char *s2)
return (0);
return (cm[*us1] - cm[*--us2]);
}
+DEF_WEAK(strcasecmp);
int
strncasecmp(const char *s1, const char *s2, size_t n)
@@ -103,3 +104,4 @@ strncasecmp(const char *s1, const char *s2, size_t n)
}
return (0);
}
+DEF_WEAK(strncasecmp);
diff --git a/lib/libc/string/strcasestr.c b/lib/libc/string/strcasestr.c
index aa74c0176dc..abb3e155491 100644
--- a/lib/libc/string/strcasestr.c
+++ b/lib/libc/string/strcasestr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strcasestr.c,v 1.3 2006/03/31 05:34:55 deraadt Exp $ */
+/* $OpenBSD: strcasestr.c,v 1.4 2015/08/31 02:53:57 guenther Exp $ */
/* $NetBSD: strcasestr.c,v 1.2 2005/02/09 21:35:47 kleink Exp $ */
/*-
@@ -58,3 +58,4 @@ strcasestr(const char *s, const char *find)
}
return ((char *)s);
}
+DEF_WEAK(strcasestr);
diff --git a/lib/libc/string/strchr.c b/lib/libc/string/strchr.c
index 596e407c9bd..b396b45b3b0 100644
--- a/lib/libc/string/strchr.c
+++ b/lib/libc/string/strchr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strchr.c,v 1.2 2015/05/15 22:29:37 millert Exp $ */
+/* $OpenBSD: strchr.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -43,3 +43,4 @@ strchr(const char *p, int ch)
}
/* NOTREACHED */
}
+DEF_STRONG(strchr);
diff --git a/lib/libc/string/strcmp.c b/lib/libc/string/strcmp.c
index d1b6c50d791..be175563d47 100644
--- a/lib/libc/string/strcmp.c
+++ b/lib/libc/string/strcmp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strcmp.c,v 1.8 2014/06/10 04:17:37 deraadt Exp $ */
+/* $OpenBSD: strcmp.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -45,3 +45,4 @@ strcmp(const char *s1, const char *s2)
return (0);
return (*(unsigned char *)s1 - *(unsigned char *)--s2);
}
+DEF_STRONG(strcmp);
diff --git a/lib/libc/string/strcoll.c b/lib/libc/string/strcoll.c
index 2df983bd652..47a6ea4f24e 100644
--- a/lib/libc/string/strcoll.c
+++ b/lib/libc/string/strcoll.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strcoll.c,v 1.5 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strcoll.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -42,3 +42,4 @@ strcoll(const char *s1, const char *s2)
/* LC_COLLATE is unimplemented, hence always "C" */
return (strcmp(s1, s2));
}
+DEF_STRONG(strcoll);
diff --git a/lib/libc/string/strcspn.c b/lib/libc/string/strcspn.c
index 1eb233614d0..3c1f5a4ceca 100644
--- a/lib/libc/string/strcspn.c
+++ b/lib/libc/string/strcspn.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strcspn.c,v 1.5 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strcspn.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -56,3 +56,4 @@ strcspn(const char *s1, const char *s2)
}
/* NOTREACHED */
}
+DEF_STRONG(strcspn);
diff --git a/lib/libc/string/strdup.c b/lib/libc/string/strdup.c
index a6aa1e03b0f..9aebf399c14 100644
--- a/lib/libc/string/strdup.c
+++ b/lib/libc/string/strdup.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strdup.c,v 1.6 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strdup.c,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1988, 1993
@@ -47,3 +47,4 @@ strdup(const char *str)
(void)memcpy(copy, str, siz);
return(copy);
}
+DEF_WEAK(strdup);
diff --git a/lib/libc/string/strerror.c b/lib/libc/string/strerror.c
index 13996f08e98..c6f05446fd9 100644
--- a/lib/libc/string/strerror.c
+++ b/lib/libc/string/strerror.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strerror.c,v 1.7 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strerror.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1988 Regents of the University of California.
* All rights reserved.
@@ -39,3 +39,4 @@ strerror(int num)
(void)strerror_r(num, buf, sizeof(buf));
return (buf);
}
+DEF_STRONG(strerror);
diff --git a/lib/libc/string/strerror_r.c b/lib/libc/string/strerror_r.c
index b85136055b1..90aa012360d 100644
--- a/lib/libc/string/strerror_r.c
+++ b/lib/libc/string/strerror_r.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strerror_r.c,v 1.8 2013/06/01 21:26:18 stsp Exp $ */
+/* $OpenBSD: strerror_r.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/* Public Domain <marc@snafu.org> */
#ifdef NLS
@@ -125,6 +125,7 @@ strerror_r(int errnum, char *strerrbuf, size_t buflen)
errno = ret_errno ? ret_errno : save_errno;
return (ret_errno);
}
+DEF_WEAK(strerror_r);
#define USIGPREFIX "Unknown signal: "
diff --git a/lib/libc/string/strlcat.c b/lib/libc/string/strlcat.c
index 14c53a1f69c..073b0d42594 100644
--- a/lib/libc/string/strlcat.c
+++ b/lib/libc/string/strlcat.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strlcat.c,v 1.15 2015/03/02 21:41:08 millert Exp $ */
+/* $OpenBSD: strlcat.c,v 1.16 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1998, 2015 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -53,3 +53,4 @@ strlcat(char *dst, const char *src, size_t dsize)
return(dlen + (src - osrc)); /* count does not include NUL */
}
+DEF_WEAK(strlcat);
diff --git a/lib/libc/string/strlcpy.c b/lib/libc/string/strlcpy.c
index e9a7fe4be73..5fcf084aaad 100644
--- a/lib/libc/string/strlcpy.c
+++ b/lib/libc/string/strlcpy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strlcpy.c,v 1.12 2015/01/15 03:54:12 millert Exp $ */
+/* $OpenBSD: strlcpy.c,v 1.13 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1998, 2015 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -48,3 +48,4 @@ strlcpy(char *dst, const char *src, size_t dsize)
return(src - osrc - 1); /* count does not include NUL */
}
+DEF_WEAK(strlcpy);
diff --git a/lib/libc/string/strlen.c b/lib/libc/string/strlen.c
index 7e0e27b1d8d..a5721d3e7f5 100644
--- a/lib/libc/string/strlen.c
+++ b/lib/libc/string/strlen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strlen.c,v 1.8 2014/06/10 04:17:37 deraadt Exp $ */
+/* $OpenBSD: strlen.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -41,3 +41,4 @@ strlen(const char *str)
return (s - str);
}
+DEF_STRONG(strlen);
diff --git a/lib/libc/string/strmode.c b/lib/libc/string/strmode.c
index 6f0fa34ed87..609b8931fbb 100644
--- a/lib/libc/string/strmode.c
+++ b/lib/libc/string/strmode.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strmode.c,v 1.7 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strmode.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -138,3 +138,4 @@ strmode(int mode, char *p)
*p++ = ' '; /* will be a '+' if ACL's implemented */
*p = '\0';
}
+DEF_WEAK(strmode);
diff --git a/lib/libc/string/strncat.c b/lib/libc/string/strncat.c
index c4df4f2fad6..b3388accf37 100644
--- a/lib/libc/string/strncat.c
+++ b/lib/libc/string/strncat.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strncat.c,v 1.5 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strncat.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -55,3 +55,4 @@ strncat(char *dst, const char *src, size_t n)
}
return (dst);
}
+DEF_STRONG(strncat);
diff --git a/lib/libc/string/strncmp.c b/lib/libc/string/strncmp.c
index 0a4ddc1d9e3..535d2a60fde 100644
--- a/lib/libc/string/strncmp.c
+++ b/lib/libc/string/strncmp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strncmp.c,v 1.8 2014/06/10 04:17:37 deraadt Exp $ */
+/* $OpenBSD: strncmp.c,v 1.9 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1989 The Regents of the University of California.
@@ -45,3 +45,4 @@ strncmp(const char *s1, const char *s2, size_t n)
} while (--n != 0);
return (0);
}
+DEF_STRONG(strncmp);
diff --git a/lib/libc/string/strncpy.c b/lib/libc/string/strncpy.c
index 5003a199a9b..d6d8647fc76 100644
--- a/lib/libc/string/strncpy.c
+++ b/lib/libc/string/strncpy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strncpy.c,v 1.7 2014/06/10 04:17:37 deraadt Exp $ */
+/* $OpenBSD: strncpy.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -56,3 +56,4 @@ strncpy(char *dst, const char *src, size_t n)
}
return (dst);
}
+DEF_STRONG(strncpy);
diff --git a/lib/libc/string/strndup.c b/lib/libc/string/strndup.c
index 27701ac555a..a6e5bff7ca1 100644
--- a/lib/libc/string/strndup.c
+++ b/lib/libc/string/strndup.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strndup.c,v 1.1 2010/05/18 22:24:55 tedu Exp $ */
+/* $OpenBSD: strndup.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -37,3 +37,4 @@ strndup(const char *str, size_t maxlen)
return copy;
}
+DEF_WEAK(strndup);
diff --git a/lib/libc/string/strnlen.c b/lib/libc/string/strnlen.c
index 872cfa6ccea..26e9743f183 100644
--- a/lib/libc/string/strnlen.c
+++ b/lib/libc/string/strnlen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strnlen.c,v 1.5 2014/06/10 04:17:37 deraadt Exp $ */
+/* $OpenBSD: strnlen.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -30,3 +30,4 @@ strnlen(const char *str, size_t maxlen)
return (size_t)(cp - str);
}
+DEF_WEAK(strnlen);
diff --git a/lib/libc/string/strpbrk.c b/lib/libc/string/strpbrk.c
index cd3b71c0d3e..336c22dedd6 100644
--- a/lib/libc/string/strpbrk.c
+++ b/lib/libc/string/strpbrk.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strpbrk.c,v 1.5 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strpbrk.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1985 Regents of the University of California.
* All rights reserved.
@@ -46,3 +46,4 @@ strpbrk(const char *s1, const char *s2)
}
return (NULL);
}
+DEF_STRONG(strpbrk);
diff --git a/lib/libc/string/strrchr.c b/lib/libc/string/strrchr.c
index 181f56ea698..93755721443 100644
--- a/lib/libc/string/strrchr.c
+++ b/lib/libc/string/strrchr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strrchr.c,v 1.2 2015/05/15 22:29:37 millert Exp $ */
+/* $OpenBSD: strrchr.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1988 Regents of the University of California.
* All rights reserved.
@@ -45,3 +45,4 @@ strrchr(const char *p, int ch)
}
/* NOTREACHED */
}
+DEF_STRONG(strrchr);
diff --git a/lib/libc/string/strsep.c b/lib/libc/string/strsep.c
index 2ffc4b4c46a..97c3cbf1f5d 100644
--- a/lib/libc/string/strsep.c
+++ b/lib/libc/string/strsep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strsep.c,v 1.7 2014/02/05 20:42:32 stsp Exp $ */
+/* $OpenBSD: strsep.c,v 1.8 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -68,3 +68,4 @@ strsep(char **stringp, const char *delim)
}
/* NOTREACHED */
}
+DEF_WEAK(strsep);
diff --git a/lib/libc/string/strsignal.c b/lib/libc/string/strsignal.c
index aa541cefede..a71a291fbc0 100644
--- a/lib/libc/string/strsignal.c
+++ b/lib/libc/string/strsignal.c
@@ -39,3 +39,4 @@ strsignal(int sig)
return __strsignal(sig, buf);
}
+DEF_WEAK(strsignal);
diff --git a/lib/libc/string/strspn.c b/lib/libc/string/strspn.c
index 385649c0419..0ce41cbb49b 100644
--- a/lib/libc/string/strspn.c
+++ b/lib/libc/string/strspn.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strspn.c,v 1.5 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strspn.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 1989 The Regents of the University of California.
* All rights reserved.
@@ -49,3 +49,4 @@ cont:
goto cont;
return (p - 1 - s1);
}
+DEF_STRONG(strspn);
diff --git a/lib/libc/string/strstr.c b/lib/libc/string/strstr.c
index 95a865bf791..ccd08717005 100644
--- a/lib/libc/string/strstr.c
+++ b/lib/libc/string/strstr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strstr.c,v 1.5 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strstr.c,v 1.6 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -54,3 +54,4 @@ strstr(const char *s, const char *find)
}
return ((char *)s);
}
+DEF_STRONG(strstr);
diff --git a/lib/libc/string/strtok.c b/lib/libc/string/strtok.c
index 6ba6b21cd6f..c5765756fcd 100644
--- a/lib/libc/string/strtok.c
+++ b/lib/libc/string/strtok.c
@@ -36,6 +36,7 @@ strtok(char *s, const char *delim)
return strtok_r(s, delim, &last);
}
+DEF_STRONG(strtok);
char *
strtok_r(char *s, const char *delim, char **last)
@@ -83,3 +84,4 @@ cont:
}
/* NOTREACHED */
}
+DEF_WEAK(strtok_r);
diff --git a/lib/libc/string/strxfrm.c b/lib/libc/string/strxfrm.c
index 6f289c901ec..97df097b296 100644
--- a/lib/libc/string/strxfrm.c
+++ b/lib/libc/string/strxfrm.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strxfrm.c,v 1.6 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: strxfrm.c,v 1.7 2015/08/31 02:53:57 guenther Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -49,3 +49,4 @@ strxfrm(char *dst, const char *src, size_t n)
return (strlen(src));
return (strlcpy(dst, src, n));
}
+DEF_STRONG(strxfrm);
diff --git a/lib/libc/string/timingsafe_bcmp.c b/lib/libc/string/timingsafe_bcmp.c
index 0b736154ca8..0409ec32448 100644
--- a/lib/libc/string/timingsafe_bcmp.c
+++ b/lib/libc/string/timingsafe_bcmp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: timingsafe_bcmp.c,v 1.2 2014/06/10 04:17:37 deraadt Exp $ */
+/* $OpenBSD: timingsafe_bcmp.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 2010 Damien Miller. All rights reserved.
*
@@ -27,3 +27,4 @@ timingsafe_bcmp(const void *b1, const void *b2, size_t n)
ret |= *p1++ ^ *p2++;
return (ret != 0);
}
+DEF_WEAK(timingsafe_bcmp);
diff --git a/lib/libc/string/timingsafe_memcmp.c b/lib/libc/string/timingsafe_memcmp.c
index 04e2ac5e206..373f8cb1978 100644
--- a/lib/libc/string/timingsafe_memcmp.c
+++ b/lib/libc/string/timingsafe_memcmp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: timingsafe_memcmp.c,v 1.1 2014/06/13 02:12:17 matthew Exp $ */
+/* $OpenBSD: timingsafe_memcmp.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
/*
* Copyright (c) 2014 Google Inc.
*
@@ -44,3 +44,4 @@ timingsafe_memcmp(const void *b1, const void *b2, size_t len)
return (res);
}
+DEF_WEAK(timingsafe_memcmp);