summaryrefslogtreecommitdiffstats
path: root/lib/libc/include
diff options
context:
space:
mode:
authorguenther <guenther@openbsd.org>2017-11-29 05:13:57 +0000
committerguenther <guenther@openbsd.org>2017-11-29 05:13:57 +0000
commitea6088e7d368d53c49ebfdf4520275cec2f78f5b (patch)
treea7a8d82d7543c1ee5938393be3730e485b342723 /lib/libc/include
parentturns out you dont have to configure a vsi as the default in a veb. (diff)
downloadwireguard-openbsd-ea6088e7d368d53c49ebfdf4520275cec2f78f5b.tar.xz
wireguard-openbsd-ea6088e7d368d53c49ebfdf4520275cec2f78f5b.zip
clang doesn't propagate attributes like "asm labels" and "visibility(hidden)"
to builtins like mem{set,cpy,move} and __stack_smash_handler. So, when building with clang, instead mark those as protected visibility to get rid of the PLT relocations. We can't take the address of them then, but that's ok: it's a build-time error not a run-time error. ok kettenis@
Diffstat (limited to 'lib/libc/include')
-rw-r--r--lib/libc/include/namespace.h22
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/libc/include/namespace.h b/lib/libc/include/namespace.h
index 980c1a8dd61..73b845e10f1 100644
--- a/lib/libc/include/namespace.h
+++ b/lib/libc/include/namespace.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: namespace.h,v 1.10 2016/05/07 19:05:22 guenther Exp $ */
+/* $OpenBSD: namespace.h,v 1.11 2017/11/29 05:13:57 guenther Exp $ */
#ifndef _LIBC_NAMESPACE_H_
#define _LIBC_NAMESPACE_H_
@@ -154,23 +154,35 @@
#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))
+#ifdef __clang__
+#define DEF_BUILTIN(x) __asm("")
+#define BUILTIN __attribute__((__visibility__("protected")))
+#else
+#define DEF_BUILTIN(x) DEF_STRONG(x)
+#define BUILTIN
+#endif
#define MAKE_CLONE(dst, src) __dso_hidden typeof(dst) HIDDEN(dst) \
__attribute__((alias (HIDDEN_STRING(src))))
/*
- * gcc will generate calls to the functions below.
+ * gcc and clang will generate calls to the functions below.
* Declare and redirect them here so we always go
* directly to our hidden aliases.
*/
#include <sys/_types.h>
-void *memcpy(void *__restrict, const void *__restrict, __size_t);
-void *memset(void *, int, __size_t);
-void __stack_smash_handler(const char [], int __attribute__((__unused__)));
+BUILTIN void *memmove(void *, const void *, __size_t);
+BUILTIN void *memcpy(void *__restrict, const void *__restrict, __size_t);
+BUILTIN void *memset(void *, int, __size_t);
+BUILTIN void __stack_smash_handler(const char [], int __unused);
+#ifndef __clang__
+PROTO_NORMAL(memmove);
PROTO_NORMAL(memcpy);
PROTO_NORMAL(memset);
PROTO_NORMAL(__stack_smash_handler);
+#endif
+#undef BUILTIN
#endif /* _LIBC_NAMESPACE_H_ */