|
@@ -10,6 +10,7 @@
|
|
|
*/
|
|
|
|
|
|
#include "misc.h"
|
|
|
+#include "../string.h"
|
|
|
|
|
|
/* WARNING!!
|
|
|
* This code is compiled with -fPIC and it is relocated dynamically
|
|
@@ -97,8 +98,14 @@
|
|
|
*/
|
|
|
#define STATIC static
|
|
|
|
|
|
-#undef memset
|
|
|
#undef memcpy
|
|
|
+
|
|
|
+/*
|
|
|
+ * Use a normal definition of memset() from string.c. There are already
|
|
|
+ * included header files which expect a definition of memset() and by
|
|
|
+ * the time we define memset macro, it is too late.
|
|
|
+ */
|
|
|
+#undef memset
|
|
|
#define memzero(s, n) memset((s), 0, (n))
|
|
|
|
|
|
|
|
@@ -109,9 +116,6 @@ static void error(char *m);
|
|
|
*/
|
|
|
struct boot_params *real_mode; /* Pointer to real-mode data */
|
|
|
|
|
|
-void *memset(void *s, int c, size_t n);
|
|
|
-void *memcpy(void *dest, const void *src, size_t n);
|
|
|
-
|
|
|
memptr free_mem_ptr;
|
|
|
memptr free_mem_end_ptr;
|
|
|
|
|
@@ -216,45 +220,6 @@ void __putstr(const char *s)
|
|
|
outb(0xff & (pos >> 1), vidport+1);
|
|
|
}
|
|
|
|
|
|
-void *memset(void *s, int c, size_t n)
|
|
|
-{
|
|
|
- int i;
|
|
|
- char *ss = s;
|
|
|
-
|
|
|
- for (i = 0; i < n; i++)
|
|
|
- ss[i] = c;
|
|
|
- return s;
|
|
|
-}
|
|
|
-#ifdef CONFIG_X86_32
|
|
|
-void *memcpy(void *dest, const void *src, size_t n)
|
|
|
-{
|
|
|
- int d0, d1, d2;
|
|
|
- asm volatile(
|
|
|
- "rep ; movsl\n\t"
|
|
|
- "movl %4,%%ecx\n\t"
|
|
|
- "rep ; movsb\n\t"
|
|
|
- : "=&c" (d0), "=&D" (d1), "=&S" (d2)
|
|
|
- : "0" (n >> 2), "g" (n & 3), "1" (dest), "2" (src)
|
|
|
- : "memory");
|
|
|
-
|
|
|
- return dest;
|
|
|
-}
|
|
|
-#else
|
|
|
-void *memcpy(void *dest, const void *src, size_t n)
|
|
|
-{
|
|
|
- long d0, d1, d2;
|
|
|
- asm volatile(
|
|
|
- "rep ; movsq\n\t"
|
|
|
- "movq %4,%%rcx\n\t"
|
|
|
- "rep ; movsb\n\t"
|
|
|
- : "=&c" (d0), "=&D" (d1), "=&S" (d2)
|
|
|
- : "0" (n >> 3), "g" (n & 7), "1" (dest), "2" (src)
|
|
|
- : "memory");
|
|
|
-
|
|
|
- return dest;
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
static void error(char *x)
|
|
|
{
|
|
|
error_putstr("\n\n");
|