|
From: <sv...@va...> - 2016-02-26 15:31:02
|
Author: petarj
Date: Fri Feb 26 15:30:53 2016
New Revision: 15813
Log:
mips: determine page size at runtime
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.
Modified:
trunk/configure.ac
trunk/coregrind/m_main.c
trunk/coregrind/m_vki.c
trunk/include/vki/vki-mips32-linux.h
trunk/include/vki/vki-mips64-linux.h
Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Fri Feb 26 15:30:53 2016
@@ -931,32 +931,6 @@
[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
#----------------------------------------------------------------------------
AC_ARG_WITH(tmpdir,
Modified: trunk/coregrind/m_main.c
==============================================================================
--- trunk/coregrind/m_main.c (original)
+++ trunk/coregrind/m_main.c Fri Feb 26 15:30:53 2016
@@ -1743,10 +1743,12 @@
// 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 @@
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)
;
Modified: trunk/coregrind/m_vki.c
==============================================================================
--- trunk/coregrind/m_vki.c (original)
+++ trunk/coregrind/m_vki.c Fri Feb 26 15:30:53 2016
@@ -39,11 +39,12 @@
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
Modified: trunk/include/vki/vki-mips32-linux.h
==============================================================================
--- trunk/include/vki/vki-mips32-linux.h (original)
+++ trunk/include/vki/vki-mips32-linux.h Fri Feb 26 15:30:53 2016
@@ -71,12 +71,12 @@
// 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
Modified: trunk/include/vki/vki-mips64-linux.h
==============================================================================
--- trunk/include/vki/vki-mips64-linux.h (original)
+++ trunk/include/vki/vki-mips64-linux.h Fri Feb 26 15:30:53 2016
@@ -80,12 +80,12 @@
// 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
|