svn commit: r189170 - in head/sys: cddl/compat/opensolaris/sys conf
gnu/fs/xfs/FreeBSD libkern net80211 netgraph netgraph/atm/uni
powerpc/booke sys xdr
Ed Schouten
ed at FreeBSD.org
Sat Feb 28 08:21:26 PST 2009
Author: ed
Date: Sat Feb 28 16:21:25 2009
New Revision: 189170
URL: http://svn.freebsd.org/changeset/base/189170
Log:
Add memmove() to the kernel, making the kernel compile with Clang.
When copying big structures, LLVM generates calls to memmove(), because
it may not be able to figure out whether structures overlap. This caused
linker errors to occur. memmove() is now implemented using bcopy().
Ideally it would be the other way around, but that can be solved in the
future. On ARM we don't do add anything, because it already has
memmove().
Discussed on: arch@
Reviewed by: rdivacky
Added:
head/sys/libkern/memmove.c (contents, props changed)
Modified:
head/sys/cddl/compat/opensolaris/sys/sysmacros.h
head/sys/conf/files.amd64
head/sys/conf/files.i386
head/sys/conf/files.ia64
head/sys/conf/files.mips
head/sys/conf/files.pc98
head/sys/conf/files.powerpc
head/sys/conf/files.sparc64
head/sys/conf/files.sun4v
head/sys/gnu/fs/xfs/FreeBSD/xfs_compat.h
head/sys/net80211/ieee80211_freebsd.h
head/sys/netgraph/atm/uni/ng_uni_cust.h
head/sys/netgraph/ng_l2tp.c
head/sys/powerpc/booke/pmap.c
head/sys/sys/systm.h
head/sys/xdr/xdr_mem.c
Modified: head/sys/cddl/compat/opensolaris/sys/sysmacros.h
==============================================================================
--- head/sys/cddl/compat/opensolaris/sys/sysmacros.h Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/cddl/compat/opensolaris/sys/sysmacros.h Sat Feb 28 16:21:25 2009 (r189170)
@@ -97,10 +97,6 @@ extern "C" {
#define P2SAMEHIGHBIT_TYPED(x, y, type) \
(((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y)))
-#ifdef _KERNEL
-#define memmove(dst, src, size) bcopy((src), (dst), (size))
-#endif
-
/*
* Find highest one bit set.
* Returns bit number + 1 of highest bit that is set, otherwise returns 0.
Modified: head/sys/conf/files.amd64
==============================================================================
--- head/sys/conf/files.amd64 Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/conf/files.amd64 Sat Feb 28 16:21:25 2009 (r189170)
@@ -271,4 +271,5 @@ i386/cpufreq/powernow.c optional cpufre
i386/cpufreq/est.c optional cpufreq
i386/cpufreq/p4tcc.c optional cpufreq
#
+libkern/memmove.c standard
libkern/memset.c standard
Modified: head/sys/conf/files.i386
==============================================================================
--- head/sys/conf/files.i386 Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/conf/files.i386 Sat Feb 28 16:21:25 2009 (r189170)
@@ -366,6 +366,7 @@ kern/imgact_gzip.c optional gzip
libkern/divdi3.c standard
libkern/ffsl.c standard
libkern/flsl.c standard
+libkern/memmove.c standard
libkern/memset.c standard
libkern/moddi3.c standard
libkern/qdivrem.c standard
Modified: head/sys/conf/files.ia64
==============================================================================
--- head/sys/conf/files.ia64 Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/conf/files.ia64 Sat Feb 28 16:21:25 2009 (r189170)
@@ -130,4 +130,5 @@ libkern/ia64/__umoddi3.S standard
libkern/ia64/__umodsi3.S standard
libkern/ia64/bswap16.S standard
libkern/ia64/bswap32.S standard
+libkern/memmove.c standard
libkern/memset.c standard
Modified: head/sys/conf/files.mips
==============================================================================
--- head/sys/conf/files.mips Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/conf/files.mips Sat Feb 28 16:21:25 2009 (r189170)
@@ -82,6 +82,7 @@ libkern/ffsl.c standard
libkern/fls.c standard
libkern/flsl.c standard
libkern/lshrdi3.c standard
+libkern/memmove.c standard
libkern/moddi3.c standard
libkern/qdivrem.c standard
libkern/udivdi3.c standard
Modified: head/sys/conf/files.pc98
==============================================================================
--- head/sys/conf/files.pc98 Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/conf/files.pc98 Sat Feb 28 16:21:25 2009 (r189170)
@@ -224,6 +224,7 @@ kern/imgact_gzip.c optional gzip
libkern/divdi3.c standard
libkern/ffsl.c standard
libkern/flsl.c standard
+libkern/memmove.c standard
libkern/memset.c standard
libkern/moddi3.c standard
libkern/qdivrem.c standard
Modified: head/sys/conf/files.powerpc
==============================================================================
--- head/sys/conf/files.powerpc Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/conf/files.powerpc Sat Feb 28 16:21:25 2009 (r189170)
@@ -63,6 +63,7 @@ libkern/ffsl.c standard
libkern/fls.c standard
libkern/flsl.c standard
libkern/lshrdi3.c standard
+libkern/memmove.c standard
libkern/memset.c standard
libkern/moddi3.c standard
libkern/qdivrem.c standard
Modified: head/sys/conf/files.sparc64
==============================================================================
--- head/sys/conf/files.sparc64 Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/conf/files.sparc64 Sat Feb 28 16:21:25 2009 (r189170)
@@ -65,6 +65,7 @@ libkern/ffs.c standard
libkern/ffsl.c standard
libkern/fls.c standard
libkern/flsl.c standard
+libkern/memmove.c standard
sparc64/central/central.c optional central
sparc64/ebus/ebus.c optional ebus
sparc64/fhc/clkbrd.c optional fhc
Modified: head/sys/conf/files.sun4v
==============================================================================
--- head/sys/conf/files.sun4v Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/conf/files.sun4v Sat Feb 28 16:21:25 2009 (r189170)
@@ -34,6 +34,7 @@ libkern/ffs.c standard
libkern/ffsl.c standard
libkern/fls.c standard
libkern/flsl.c standard
+libkern/memmove.c standard
sparc64/sparc64/autoconf.c standard
sun4v/sun4v/bus_machdep.c standard
sun4v/sun4v/clock.c standard
Modified: head/sys/gnu/fs/xfs/FreeBSD/xfs_compat.h
==============================================================================
--- head/sys/gnu/fs/xfs/FreeBSD/xfs_compat.h Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/gnu/fs/xfs/FreeBSD/xfs_compat.h Sat Feb 28 16:21:25 2009 (r189170)
@@ -129,10 +129,6 @@ typedef dev_t os_dev_t;
#define copy_from_user(dst, src, len) copyin((src), (dst), (len))
#endif
-#ifndef memmove
-#define memmove(dst, src, len) bcopy((src), (dst), (len))
-#endif
-
#ifndef barrier
#define barrier() __asm__ __volatile__("": : :"memory")
#endif
Added: head/sys/libkern/memmove.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sys/libkern/memmove.c Sat Feb 28 16:21:25 2009 (r189170)
@@ -0,0 +1,38 @@
+/*-
+ * Copyright (c) 2009 Roman Divacky <rdivacky at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+*/
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/libkern.h>
+
+void *
+memmove(void *dest, const void *src, size_t n)
+{
+
+ bcopy(src, dest, n);
+ return (dest);
+}
Modified: head/sys/net80211/ieee80211_freebsd.h
==============================================================================
--- head/sys/net80211/ieee80211_freebsd.h Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/net80211/ieee80211_freebsd.h Sat Feb 28 16:21:25 2009 (r189170)
@@ -207,8 +207,6 @@ void ieee80211_vap_destroy(struct ieee80
#define time_after_eq(a,b) ((long)(a) - (long)(b) >= 0)
#define time_before_eq(a,b) time_after_eq(b,a)
-#define memmove(dst, src, n) ovbcopy(src, dst, n)
-
struct mbuf *ieee80211_getmgtframe(uint8_t **frm, int headroom, int pktlen);
/* tx path usage */
Modified: head/sys/netgraph/atm/uni/ng_uni_cust.h
==============================================================================
--- head/sys/netgraph/atm/uni/ng_uni_cust.h Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/netgraph/atm/uni/ng_uni_cust.h Sat Feb 28 16:21:25 2009 (r189170)
@@ -146,5 +146,3 @@ size_t unimem_sizes[UNIMEM_TYPES] = {
[UNIMEM_CALL] = sizeof(struct call), \
[UNIMEM_PARTY] = sizeof(struct party) \
};
-
-#define memmove(T, F, L) bcopy((F), (T), (L))
Modified: head/sys/netgraph/ng_l2tp.c
==============================================================================
--- head/sys/netgraph/ng_l2tp.c Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/netgraph/ng_l2tp.c Sat Feb 28 16:21:25 2009 (r189170)
@@ -342,9 +342,6 @@ NETGRAPH_INIT(l2tp, &ng_l2tp_typestruct)
#define L2TP_SEQ_CHECK(x) do { } while (0)
#endif
-/* memmove macro */
-#define memmove(d, s, l) bcopy(s, d, l)
-
/* Whether to use m_copypacket() or m_dup() */
#define L2TP_COPY_MBUF m_copypacket
Modified: head/sys/powerpc/booke/pmap.c
==============================================================================
--- head/sys/powerpc/booke/pmap.c Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/powerpc/booke/pmap.c Sat Feb 28 16:21:25 2009 (r189170)
@@ -100,7 +100,6 @@ __FBSDID("$FreeBSD$");
#endif
#define TODO panic("%s: not implemented", __func__);
-#define memmove(d, s, l) bcopy(s, d, l)
#include "opt_sched.h"
#ifndef SCHED_4BSD
Modified: head/sys/sys/systm.h
==============================================================================
--- head/sys/sys/systm.h Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/sys/systm.h Sat Feb 28 16:21:25 2009 (r189170)
@@ -186,6 +186,7 @@ void bcopy(const void *from, void *to, s
void bzero(void *buf, size_t len) __nonnull(1);
void *memcpy(void *to, const void *from, size_t len) __nonnull(1) __nonnull(2);
+void *memmove(void *dest, const void *src, size_t n) __nonnull(1) __nonnull(2);
int copystr(const void * __restrict kfaddr, void * __restrict kdaddr,
size_t len, size_t * __restrict lencopied)
Modified: head/sys/xdr/xdr_mem.c
==============================================================================
--- head/sys/xdr/xdr_mem.c Sat Feb 28 16:16:37 2009 (r189169)
+++ head/sys/xdr/xdr_mem.c Sat Feb 28 16:21:25 2009 (r189170)
@@ -54,8 +54,6 @@ __FBSDID("$FreeBSD$");
#include <rpc/types.h>
#include <rpc/xdr.h>
-#define memmove(dst, src, len) bcopy(src, dst, len)
-
static void xdrmem_destroy(XDR *);
static bool_t xdrmem_getlong_aligned(XDR *, long *);
static bool_t xdrmem_putlong_aligned(XDR *, const long *);
More information about the svn-src-all
mailing list