Turns out our compilers support different sets of builtins. So the diff below does the following:
* Enables bzero, memcmp, memcpy and memset for all compilers. * Enables bcmp, bcopy and memmove for gcc4. This diff should be a no-op for kernels compiled without -ffreestanding. I've checked a couple of architectures and so far have not found any evidence that this isn't the case. As soon as we start adding -ffreestanding to the kernel Makefiles, things will start to change. That'll be part2. ok? Index: sys/systm.h =================================================================== RCS file: /cvs/src/sys/sys/systm.h,v retrieving revision 1.121 diff -u -p -r1.121 systm.h --- sys/systm.h 29 Dec 2016 12:12:44 -0000 1.121 +++ sys/systm.h 24 Jan 2017 05:28:04 -0000 @@ -322,6 +322,16 @@ extern int (*mountroot)(void); #include <lib/libkern/libkern.h> +#define bzero(b, n) __builtin_bzero((b), (n)) +#define memcmp(b1, b2, n) __builtin_memcmp((b1), (b2), (n)) +#define memcpy(d, s, n) __builtin_memcpy((d), (s), (n)) +#define memset(b, c, n) __builtin_memset((b), (c), (n)) +#if !defined(__clang__) && (defined(__GNUC__) && __GNUC__ >= 4) +#define bcmp(b1, b2, n) __builtin_bcmp((b1), (b2), (n)) +#define bcopy(s, d, n) __builtin_bcopy((s), (d), (n)) +#define memmove(d, s, n) __builtin_memmove((d), (s), (n)) +#endif + #if defined(DDB) || defined(KGDB) /* debugger entry points */ void Debugger(void); /* in DDB only */ Index: lib/libkern/bcmp.c =================================================================== RCS file: /cvs/src/sys/lib/libkern/bcmp.c,v retrieving revision 1.10 diff -u -p -r1.10 bcmp.c --- lib/libkern/bcmp.c 10 Jun 2014 04:16:57 -0000 1.10 +++ lib/libkern/bcmp.c 24 Jan 2017 05:28:04 -0000 @@ -31,6 +31,8 @@ #include <lib/libkern/libkern.h> +#undef bcmp + /* * bcmp -- vax cmpc3 instruction */ Index: lib/libkern/bcopy.c =================================================================== RCS file: /cvs/src/sys/lib/libkern/bcopy.c,v retrieving revision 1.1 diff -u -p -r1.1 bcopy.c --- lib/libkern/bcopy.c 13 Jun 2013 04:33:26 -0000 1.1 +++ lib/libkern/bcopy.c 24 Jan 2017 05:28:04 -0000 @@ -35,6 +35,8 @@ #include <sys/types.h> #include <sys/systm.h> +#undef bcopy + /* * sizeof(word) MUST BE A POWER OF TWO * SO THAT wmask BELOW IS ALL ONES Index: lib/libkern/bzero.c =================================================================== RCS file: /cvs/src/sys/lib/libkern/bzero.c,v retrieving revision 1.9 diff -u -p -r1.9 bzero.c --- lib/libkern/bzero.c 10 Jun 2014 04:16:57 -0000 1.9 +++ lib/libkern/bzero.c 24 Jan 2017 05:28:04 -0000 @@ -31,6 +31,8 @@ #include <lib/libkern/libkern.h> +#undef bzero + /* * bzero -- vax movc5 instruction */ Index: lib/libkern/memcmp.c =================================================================== RCS file: /cvs/src/sys/lib/libkern/memcmp.c,v retrieving revision 1.6 diff -u -p -r1.6 memcmp.c --- lib/libkern/memcmp.c 10 Jun 2014 04:16:57 -0000 1.6 +++ lib/libkern/memcmp.c 24 Jan 2017 05:28:04 -0000 @@ -34,6 +34,8 @@ #include <lib/libkern/libkern.h> +#undef memcmp + /* * Compare memory regions. */ Index: lib/libkern/memcpy.c =================================================================== RCS file: /cvs/src/sys/lib/libkern/memcpy.c,v retrieving revision 1.3 diff -u -p -r1.3 memcpy.c --- lib/libkern/memcpy.c 12 Jun 2013 16:44:22 -0000 1.3 +++ lib/libkern/memcpy.c 24 Jan 2017 05:28:04 -0000 @@ -32,6 +32,8 @@ #include <sys/types.h> #include <sys/systm.h> +#undef memcpy + /* * This is designed to be small, not fast. */ Index: lib/libkern/memmove.c =================================================================== RCS file: /cvs/src/sys/lib/libkern/memmove.c,v retrieving revision 1.1 diff -u -p -r1.1 memmove.c --- lib/libkern/memmove.c 11 Jun 2013 18:04:41 -0000 1.1 +++ lib/libkern/memmove.c 24 Jan 2017 05:28:04 -0000 @@ -32,6 +32,8 @@ #include <sys/types.h> #include <sys/systm.h> +#undef memmove + /* * This is designed to be small, not fast. */ Index: lib/libkern/memset.c =================================================================== RCS file: /cvs/src/sys/lib/libkern/memset.c,v retrieving revision 1.7 diff -u -p -r1.7 memset.c --- lib/libkern/memset.c 10 Jun 2014 04:16:57 -0000 1.7 +++ lib/libkern/memset.c 24 Jan 2017 05:28:04 -0000 @@ -39,6 +39,9 @@ #include <sys/systm.h> #include <lib/libkern/libkern.h> +#undef bzero +#undef memset + #define wsize sizeof(u_int) #define wmask (wsize - 1)
