Fix -Wundef warning on PAGE_COPY_THRESHOLD
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Wed, 2 Jul 2014 19:58:45 +0000 (01:28 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Wed, 2 Jul 2014 20:19:43 +0000 (01:49 +0530)
The PAGE_COPY_THRESHOLD macro is meant to be overridden by
architecture-specific pagecopy.h, but it is currently done only by
mach; all other architectures use the default.  Check to see if the
macro is defined in addition to whether it is set to a non-zero value.

ChangeLog
debug/memcpy_chk.c
debug/mempcpy_chk.c
string/memcpy.c
string/memmove.c
sysdeps/generic/memcopy.h
sysdeps/generic/pagecopy.h
sysdeps/mach/pagecopy.h
sysdeps/powerpc/memmove.c

index 06b31ff..b523896 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2014-07-02  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+       * debug/memcpy_chk.c: Don't include pagecopy.h.
+       * debug/mempcpy_chk.c: Likewise.
+       * string/memcpy.c: Likewise.
+       * string/memmove.c: Likewise.
+       * sysdeps/powerpc/memmove.c: Likewise.
+       * sysdeps/generic/memcopy.h: Include pagecopy.h.  Move
+       definition of PAGE_COPY_FWD_MAYBE here...
+       * sysdeps/generic/pagecopy.h: ... from here.
+       * sysdeps/mach/pagecopy.h: Don't include generic pagecopy.h.
+
 2014-07-02  Vidya Ranganathan  <vidya@linux.vnet.ibm.com>
            Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
index 9bf5d9f..539b7e2 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <string.h>
 #include <memcopy.h>
-#include <pagecopy.h>
 
 void *
 __memcpy_chk (dstpp, srcpp, len, dstlen)
index 105356f..3ca916b 100644 (file)
@@ -21,7 +21,6 @@
 
 #include <string.h>
 #include <memcopy.h>
-#include <pagecopy.h>
 
 void *
 __mempcpy_chk (dstpp, srcpp, len, dstlen)
index c19bad3..517f9ee 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <string.h>
 #include <memcopy.h>
-#include <pagecopy.h>
 
 #undef memcpy
 
index 3373401..22140ef 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <string.h>
 #include <memcopy.h>
-#include <pagecopy.h>
 
 /* All this is so that bcopy.c can #include
    this file after defining some things.  */
index b39a960..45c5fcb 100644 (file)
@@ -40,6 +40,7 @@
 
 #include <sys/cdefs.h>
 #include <endian.h>
+#include <pagecopy.h>
 
 /* The macros defined in this file are:
 
@@ -144,6 +145,47 @@ extern void _wordcopy_bwd_dest_aligned (long int, long int, size_t) __THROW;
       (nbytes_left) = (nbytes) % OPSIZ;                                              \
     } while (0)
 
+/* The macro PAGE_COPY_FWD_MAYBE (dstp, srcp, nbytes_left, nbytes) is invoked
+   like WORD_COPY_FWD et al.  The pointers should be at least word aligned.
+   This will check if virtual copying by pages can and should be done and do it
+   if so.  The pointers will be aligned to PAGE_SIZE bytes.  The macro requires
+   that pagecopy.h defines at least PAGE_COPY_THRESHOLD to 0.  If
+   PAGE_COPY_THRESHOLD is non-zero, the header must also define PAGE_COPY_FWD
+   and PAGE_SIZE.
+*/
+#if PAGE_COPY_THRESHOLD
+
+# include <assert.h>
+
+# define PAGE_COPY_FWD_MAYBE(dstp, srcp, nbytes_left, nbytes)                \
+  do                                                                         \
+    {                                                                        \
+      if ((nbytes) >= PAGE_COPY_THRESHOLD &&                                 \
+         PAGE_OFFSET ((dstp) - (srcp)) == 0)                                 \
+       {                                                                     \
+         /* The amount to copy is past the threshold for copying             \
+            pages virtually with kernel VM operations, and the               \
+            source and destination addresses have the same alignment.  */    \
+         size_t nbytes_before = PAGE_OFFSET (-(dstp));                       \
+         if (nbytes_before != 0)                                             \
+           {                                                                 \
+             /* First copy the words before the first page boundary.  */     \
+             WORD_COPY_FWD (dstp, srcp, nbytes_left, nbytes_before);         \
+             assert (nbytes_left == 0);                                      \
+             nbytes -= nbytes_before;                                        \
+           }                                                                 \
+         PAGE_COPY_FWD (dstp, srcp, nbytes_left, nbytes);                    \
+       }                                                                     \
+    } while (0)
+
+/* The page size is always a power of two, so we can avoid modulo division.  */
+# define PAGE_OFFSET(n)        ((n) & (PAGE_SIZE - 1))
+
+#else
+
+# define PAGE_COPY_FWD_MAYBE(dstp, srcp, nbytes_left, nbytes) /* nada */
+
+#endif
 
 /* Threshold value for when to enter the unrolled loops.  */
 #define        OP_T_THRES      16
index 2c35b71..3c81de1 100644 (file)
@@ -1,4 +1,4 @@
-/* Macros for copying by pages; used in memcpy, memmove.  Generic macros.
+/* Macros for copying by pages; used in memcpy, memmove.
    Copyright (C) 1995-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-/* This file defines the macro:
+/* The macro PAGE_COPY_FWD_MAYBE defined in memcopy.h is used in memmove if the
+   PAGE_COPY_THRESHOLD macro is set to a non-zero value.  The default is 0,
+   that is copying by pages is not implemented.
 
-   PAGE_COPY_FWD_MAYBE (dstp, srcp, nbytes_left, nbytes)
-
-   which is invoked like WORD_COPY_FWD et al.  The pointers should be at
-   least word aligned.  This will check if virtual copying by pages can and
-   should be done and do it if so.
-
-   System-specific pagecopy.h files should define these macros and then
-   #include this file:
+   System-specific pagecopy.h files that want to support page copying should
+   define these macros:
 
    PAGE_COPY_THRESHOLD
-   -- Minimum size for which virtual copying by pages is worthwhile.
+   -- A non-zero minimum size for which virtual copying by pages is worthwhile.
 
    PAGE_SIZE
    -- Size of a page.
    The pointers will be aligned to PAGE_SIZE bytes.
 */
 
-
-#if PAGE_COPY_THRESHOLD
-
-#include <assert.h>
-
-#define PAGE_COPY_FWD_MAYBE(dstp, srcp, nbytes_left, nbytes)                 \
-  do                                                                         \
-    {                                                                        \
-      if ((nbytes) >= PAGE_COPY_THRESHOLD &&                                 \
-         PAGE_OFFSET ((dstp) - (srcp)) == 0)                                 \
-       {                                                                     \
-         /* The amount to copy is past the threshold for copying             \
-            pages virtually with kernel VM operations, and the               \
-            source and destination addresses have the same alignment.  */    \
-         size_t nbytes_before = PAGE_OFFSET (-(dstp));                       \
-         if (nbytes_before != 0)                                             \
-           {                                                                 \
-             /* First copy the words before the first page boundary.  */     \
-             WORD_COPY_FWD (dstp, srcp, nbytes_left, nbytes_before);         \
-             assert (nbytes_left == 0);                                      \
-             nbytes -= nbytes_before;                                        \
-           }                                                                 \
-         PAGE_COPY_FWD (dstp, srcp, nbytes_left, nbytes);                    \
-       }                                                                     \
-    } while (0)
-
-/* The page size is always a power of two, so we can avoid modulo division.  */
-#define PAGE_OFFSET(n) ((n) & (PAGE_SIZE - 1))
-
-#else
-
-#define PAGE_COPY_FWD_MAYBE(dstp, srcp, nbytes_left, nbytes) /* nada */
-
-#endif
+#define PAGE_COPY_THRESHOLD 0
index 36c3697..8db2147 100644 (file)
@@ -30,6 +30,3 @@
                                (vm_address_t) dstp) == KERN_SUCCESS          \
                     ? trunc_page (nbytes)                                    \
                     : 0)))
-
-/* Get the generic macro.  */
-#include <sysdeps/generic/pagecopy.h>
index 3859da8..98ffb14 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <string.h>
 #include <memcopy.h>
-#include <pagecopy.h>
 
 /* All this is so that bcopy.c can #include
    this file after defining some things.  */