kernel - Macro additional builtin's
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 24 Sep 2018 17:33:25 +0000 (10:33 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Tue, 25 Sep 2018 16:29:09 +0000 (09:29 -0700)
* Macro memcpy, memset, and memmove.  Move from libkern to
  systm.h.

* Adjust prototypes, add _xxx versions, adjust a few bits of
  code that need the related function pointers.

* Scrap hacks in zlib.c that converted memset and memmove.

sys/emulation/ndis/subr_ntoskrnl.c
sys/net/zlib.c
sys/platform/pc64/x86_64/support.s
sys/sys/libkern.h
sys/sys/systm.h

index ef68e15..a7d5185 100644 (file)
@@ -4031,9 +4031,9 @@ image_patch_table ntoskrnl_functbl[] = {
        IMPORT_CFUNC_MAP(strncat, ntoskrnl_strncat, 0),
        IMPORT_CFUNC_MAP(strchr, index, 0),
        IMPORT_CFUNC_MAP(strrchr, rindex, 0),
-       IMPORT_CFUNC(memcpy, 0),
-       IMPORT_CFUNC_MAP(memmove, ntoskrnl_memmove, 0),
-       IMPORT_CFUNC_MAP(memset, ntoskrnl_memset, 0),
+       IMPORT_CFUNC(_memcpy, 0),
+       IMPORT_CFUNC_MAP(_memmove, ntoskrnl_memmove, 0),
+       IMPORT_CFUNC_MAP(_memset, ntoskrnl_memset, 0),
        IMPORT_CFUNC_MAP(memchr, ntoskrnl_memchr, 0),
        IMPORT_SFUNC(IoAllocateDriverObjectExtension, 4),
        IMPORT_SFUNC(IoGetDriverObjectExtension, 2),
index d60b2d1..8b38790 100644 (file)
@@ -60,8 +60,6 @@
 #include <sys/systm.h>
 #include <sys/module.h>
 #  define HAVE_MEMCPY
-#  define memcpy(d, s, n)      bcopy((s), (d), (n))
-#  define memset(d, v, n)      bzero((d), (n))
 #  define memcmp               bcmp
 
 #else
index 11eebd7..f04b95b 100644 (file)
@@ -250,6 +250,9 @@ ENTRY(memmove)
        ret
 END(memmove)
 
+       .weak   _memmove
+       .equ    _memmove, memmove
+
 ENTRY(reset_dbregs)
        movq    $0x200,%rax     /* the manual says that bit 10 must be set to 1 */
        movq    %rax,%dr7       /* disable all breapoints first */
index 4edab19..ea329ae 100644 (file)
@@ -142,8 +142,8 @@ char        *hexncpy(const u_char *, int, char *, int, const char *);
 /*
  * memset can't be an inline, it is used by gcc-4.x directly.
  */
-void   *memset(void *, int, size_t);
-void   *memmove(void *, const void *, size_t);
+/*void *memset(void *, int, size_t);*/
+/*void *memmove(void *, const void *, size_t);*/
 
 
 static __inline int
index c62067f..1e486a4 100644 (file)
@@ -246,22 +246,35 @@ u_quad_t strtouq(const char *, char **, int) __nonnull(1);
        __builtin_memmove(__DEQUALIFY(void *, (to)),    \
                          __DEQUALIFY(void *, (from)),  \
                          (len))
-#else
-void   bcopy(volatile const void *from, volatile void *to, size_t len)
-           __nonnull(1, 2);
-#endif
-#if 1
+#define memcpy(to, from, len)                          \
+       __builtin_memcpy(__DEQUALIFY(void *, (to)),     \
+                         __DEQUALIFY(void *, (from)),  \
+                         (len))
+#define memset(ptr, c, len)                            \
+       __builtin_memset(__DEQUALIFY(void *, (ptr)), (c), (len))
+#define memmove(to, from, len)                         \
+       __builtin_memmove(__DEQUALIFY(void *, (to)),    \
+                         __DEQUALIFY(void *, (from)),  \
+                         (len))
 #define bzero(buf, len)                                        \
        __builtin_memset(__DEQUALIFY(void *, (buf)), 0, (len))
 #else
+void   bcopy(volatile const void *from, volatile void *to, size_t len)
+           __nonnull(1, 2);
+void   *memcpy(void *to, const void *from, size_t len)
+           __nonnull(1, 2);
+void   *memmove(void *, const void *, size_t);
+void   *memset(void *, int, size_t);
 void   bzero(volatile void *buf, size_t len) __nonnull(1);
 #endif
 void   _bcopy(volatile const void *from, volatile void *to, size_t len)
            __nonnull(1, 2);
+void   *_memcpy(void *to, const void *from, size_t len)
+           __nonnull(1, 2);
+void   *_memmove(void *, const void *, size_t);
+void   *_memset(void *, int, size_t);
 void   _bzero(volatile void *buf, size_t len) __nonnull(1);
 void   bzeront(volatile void *buf, size_t len) __nonnull(1);
-void   *memcpy(void *to, const void *from, size_t len)
-           __nonnull(1, 2);
 
 long   kreadmem64(const void *addr);