]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
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 06b31ffb7cd85ede6f945bd77147025f9b012767..b52389634aeb6c1fa72f283ff333005e2a074e53 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 9bf5d9f6c0b9cf3d52375ea91204e080fff878d9..539b7e2d3187297f97263a95df17bf9f3b490c6f 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <string.h>
 #include <memcopy.h>
-#include <pagecopy.h>
 
 void *
 __memcpy_chk (dstpp, srcpp, len, dstlen)
index 105356f978ab33ee7ba500c42830da8fc9d75379..3ca916b83eae2eb6f503c176ff792345bf3a20b4 100644 (file)
@@ -21,7 +21,6 @@
 
 #include <string.h>
 #include <memcopy.h>
-#include <pagecopy.h>
 
 void *
 __mempcpy_chk (dstpp, srcpp, len, dstlen)
index c19bad3b67e72aa4e565bb44afb3b38dc07bf61e..517f9ee883edcec423c12f461275075d20e568dc 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <string.h>
 #include <memcopy.h>
-#include <pagecopy.h>
 
 #undef memcpy
 
index 3373401721c73168ea7d4e5204d6a2e405a831b5..22140efc35e6497bf02f634669b8381233e8bcb4 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 b39a9608b8ff38b779713fa8562d0503353ac14c..45c5fcb479f80a887a919ff51e6d21c1e3f93005 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 2c35b71b87e7b6a3c30bd04c975713a7576a3018..3c81de1b236486bf2c794161612fe7debfe9ee8c 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 36c36976058678f5cb808423a4696d171a6e0cba..8db2147a7c12bbf5011998dd050d820e481f4d1c 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 3859da86157b51cf3a3ea50ba72a836e4aa8db7e..98ffb1479439373a6c5ec3c4ebd9a86fc06ea62b 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.  */