]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
mips: determine page size at runtime
authorPetar Jovanovic <mips32r2@gmail.com>
Fri, 26 Feb 2016 15:30:53 +0000 (15:30 +0000)
committerPetar Jovanovic <mips32r2@gmail.com>
Fri, 26 Feb 2016 15:30:53 +0000 (15:30 +0000)
Instead of passing an option to the configure script, use runtime detection
of the page size. Remove the "--with-pagesize" parameter from the configure
script.
Also accept 8k and 32k as valid page sizes.

Patch by Maran Pakkirisamy

It fixes BZ#342356.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15813

configure.ac
coregrind/m_main.c
coregrind/m_vki.c
include/vki/vki-mips32-linux.h
include/vki/vki-mips64-linux.h

index 87fcf35b6aac83834eea08464aae187cf6521088..ea08341aac13b929407fa0fa52c663348fa07eab 100644 (file)
@@ -930,32 +930,6 @@ AC_CACHE_CHECK([for using the undefined behaviour sanitiser], vg_cv_ubsan,
       [vg_cv_ubsan=$enableval],
       [vg_cv_ubsan=no])])
 
-#----------------------------------------------------------------------------
-# Define MIPS_PAGE_SHIFT (--with-pagesize)
-#----------------------------------------------------------------------------
-AC_ARG_WITH(pagesize,
-   [  --with-pagesize=        override detected page size (4, 16 or 64)],
-   [psize=$withval],
-   [psize=0]
-)
-if test "$psize" = "0"; then
-    psizer=`getconf PAGESIZE`
-    psize=$((${psizer}/1024))
-fi
-
-if test "$psize" = "4"; then
-    AC_DEFINE([MIPS_PAGE_SHIFT], 12, [configured page size 4k])
-elif test "$psize" = "16"; then
-    AC_DEFINE([MIPS_PAGE_SHIFT], 14, [configured page size 16k])
-elif test "$psize" = "64"; then
-    AC_DEFINE([MIPS_PAGE_SHIFT], 16, [configured page size 64k])
-else
-   AC_DEFINE([MIPS_PAGE_SHIFT], 12, [configured default page size 4k])
-fi
-AC_MSG_RESULT([checking for Pagesize... ${psize}k])
-
-
 #----------------------------------------------------------------------------
 # Extra fine-tuning of installation directories
 #----------------------------------------------------------------------------
index 36489c372176e4b37a5168678908fe5b8c5fc6d8..fd05185c882c0faf3c13ac2e08344e89bdea9337 100644 (file)
@@ -1743,10 +1743,12 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
    //   p: logging, plausible-stack
    //--------------------------------------------------------------
    VG_(debugLog)(1, "main", "Starting the address space manager\n");
-   vg_assert(VKI_PAGE_SIZE     == 4096 || VKI_PAGE_SIZE     == 65536
-             || VKI_PAGE_SIZE     == 16384);
-   vg_assert(VKI_MAX_PAGE_SIZE == 4096 || VKI_MAX_PAGE_SIZE == 65536
-             || VKI_MAX_PAGE_SIZE == 16384);
+   vg_assert(VKI_PAGE_SIZE    == 4096  || VKI_PAGE_SIZE == 8192
+             || VKI_PAGE_SIZE == 16384 || VKI_PAGE_SIZE == 32768
+             || VKI_PAGE_SIZE == 65536);
+   vg_assert(VKI_MAX_PAGE_SIZE    == 4096  || VKI_MAX_PAGE_SIZE == 8192
+             || VKI_MAX_PAGE_SIZE == 16384 || VKI_MAX_PAGE_SIZE == 32768
+             || VKI_MAX_PAGE_SIZE == 65536);
    vg_assert(VKI_PAGE_SIZE <= VKI_MAX_PAGE_SIZE);
    vg_assert(VKI_PAGE_SIZE     == (1 << VKI_PAGE_SHIFT));
    vg_assert(VKI_MAX_PAGE_SIZE == (1 << VKI_MAX_PAGE_SHIFT));
@@ -3324,11 +3326,12 @@ void _start_in_C_linux ( UWord* pArgc )
    the_iicii.sp_at_startup = (Addr)pArgc;
 
 #  if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \
-      || defined(VGP_ppc64le_linux) || defined(VGP_arm64_linux)
+      || defined(VGP_ppc64le_linux) || defined(VGP_arm64_linux) \
+      || defined(VGP_mips32_linux)  || defined(VGP_mips64_linux)
    {
-      /* ppc32/ppc64 can be configured with different page sizes.
-         Determine this early.  This is an ugly hack and really should
-         be moved into valgrind_main. */
+      /* ppc32/ppc64, arm64, mips32/64 can be configured with different
+         page sizes. Determine this early. This is an ugly hack and really
+         should be moved into valgrind_main. */
       UWord *sp = &pArgc[1+argc+1];
       while (*sp++ != 0)
          ;
index 11b115c72410a0496f337e9a02f87dcd1cef5dc5..f1efa20e96252988a8b1b1cd238fe102b3af5c43 100644 (file)
    describing the kernel interface, so this file is nearly empty. */
 
 
-/* ppc32/64-linux determines page size at startup, hence m_vki is
-   the logical place to store that info. */
+/* ppc32/64, arm64 and mips32/64 (linux) determine page size at startup,
+   hence m_vki is the logical place to store that info. */
 
 #if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \
-    || defined(VGP_ppc64le_linux) || defined(VGP_arm64_linux)
+    || defined(VGP_ppc64le_linux) || defined(VGP_arm64_linux) \
+    || defined(VGP_mips32_linux)  || defined(VGP_mips64_linux)
 unsigned long VKI_PAGE_SHIFT = 12;
 unsigned long VKI_PAGE_SIZE  = 1UL << 12;
 #endif
index 5f8857f78142c74dbe92487106a2ec7505e9769e..d3eec1742dbdb9fb247670321e59ba42260007a2 100644 (file)
@@ -71,12 +71,12 @@ typedef unsigned long long __vki_u64;
 // From linux-2.6.35.5/include/asm-mips/page.h
 //----------------------------------------------------------------------
 
-/* PAGE_SHIFT determines the page size */
-#define VKI_PAGE_SHIFT          MIPS_PAGE_SHIFT
-#define VKI_PAGE_SIZE           (1UL << VKI_PAGE_SHIFT)
+/* MIPS32 uses runtime pagesize detection */
+extern UWord VKI_PAGE_SHIFT;
+extern UWord VKI_PAGE_SIZE;
 #define VKI_PAGE_MASK           (~(VKI_PAGE_SIZE-1))
-#define VKI_MAX_PAGE_SHIFT      VKI_PAGE_SHIFT
-#define VKI_MAX_PAGE_SIZE       VKI_PAGE_SIZE
+#define VKI_MAX_PAGE_SHIFT      16
+#define VKI_MAX_PAGE_SIZE       (1UL << VKI_MAX_PAGE_SHIFT)
 
 //----------------------------------------------------------------------
 // From linux-2.6.35.9/arch/mips/include/bits/shm.h
index 03b1836c20b0bfb5b856f548e01bf6d8bcd5e39f..397509bcef8c046b126b159408d5f1e0063e4dbc 100644 (file)
@@ -80,12 +80,12 @@ typedef unsigned   long long __vki_u64;
 // From linux-2.6.35.9/include/asm-mips/page.h
 //----------------------------------------------------------------------
 
-/* PAGE_SHIFT determines the page size */
-#define VKI_PAGE_SHIFT  MIPS_PAGE_SHIFT
-#define VKI_PAGE_SIZE   (1UL << VKI_PAGE_SHIFT)
-#define VKI_PAGE_MASK   (~(VKI_PAGE_SIZE-1))
-#define VKI_MAX_PAGE_SHIFT      VKI_PAGE_SHIFT
-#define VKI_MAX_PAGE_SIZE       VKI_PAGE_SIZE
+/* MIPS64 uses runtime pagesize detection */
+extern UWord VKI_PAGE_SHIFT;
+extern UWord VKI_PAGE_SIZE;
+#define VKI_PAGE_MASK           (~(VKI_PAGE_SIZE-1))
+#define VKI_MAX_PAGE_SHIFT      16
+#define VKI_MAX_PAGE_SIZE       (1UL << VKI_MAX_PAGE_SHIFT)
 
 //----------------------------------------------------------------------
 // From linux-2.6.35.9/arch/mips/include/bits/shm.h