Skip to content

Commit ad08040

Browse files
author
petarj
committed
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. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15813 a5019735-40e9-0310-863c-91ae7b9d1cf9
1 parent b39a596 commit ad08040

File tree

5 files changed

+26
-48
lines changed

5 files changed

+26
-48
lines changed

configure.ac

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -930,32 +930,6 @@ AC_CACHE_CHECK([for using the undefined behaviour sanitiser], vg_cv_ubsan,
930930
[vg_cv_ubsan=$enableval],
931931
[vg_cv_ubsan=no])])
932932

933-
#----------------------------------------------------------------------------
934-
# Define MIPS_PAGE_SHIFT (--with-pagesize)
935-
#----------------------------------------------------------------------------
936-
AC_ARG_WITH(pagesize,
937-
[ --with-pagesize= override detected page size (4, 16 or 64)],
938-
[psize=$withval],
939-
[psize=0]
940-
)
941-
942-
if test "$psize" = "0"; then
943-
psizer=`getconf PAGESIZE`
944-
psize=$((${psizer}/1024))
945-
fi
946-
947-
if test "$psize" = "4"; then
948-
AC_DEFINE([MIPS_PAGE_SHIFT], 12, [configured page size 4k])
949-
elif test "$psize" = "16"; then
950-
AC_DEFINE([MIPS_PAGE_SHIFT], 14, [configured page size 16k])
951-
elif test "$psize" = "64"; then
952-
AC_DEFINE([MIPS_PAGE_SHIFT], 16, [configured page size 64k])
953-
else
954-
AC_DEFINE([MIPS_PAGE_SHIFT], 12, [configured default page size 4k])
955-
fi
956-
AC_MSG_RESULT([checking for Pagesize... ${psize}k])
957-
958-
959933
#----------------------------------------------------------------------------
960934
# Extra fine-tuning of installation directories
961935
#----------------------------------------------------------------------------

coregrind/m_main.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1743,10 +1743,12 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
17431743
// p: logging, plausible-stack
17441744
//--------------------------------------------------------------
17451745
VG_(debugLog)(1, "main", "Starting the address space manager\n");
1746-
vg_assert(VKI_PAGE_SIZE == 4096 || VKI_PAGE_SIZE == 65536
1747-
|| VKI_PAGE_SIZE == 16384);
1748-
vg_assert(VKI_MAX_PAGE_SIZE == 4096 || VKI_MAX_PAGE_SIZE == 65536
1749-
|| VKI_MAX_PAGE_SIZE == 16384);
1746+
vg_assert(VKI_PAGE_SIZE == 4096 || VKI_PAGE_SIZE == 8192
1747+
|| VKI_PAGE_SIZE == 16384 || VKI_PAGE_SIZE == 32768
1748+
|| VKI_PAGE_SIZE == 65536);
1749+
vg_assert(VKI_MAX_PAGE_SIZE == 4096 || VKI_MAX_PAGE_SIZE == 8192
1750+
|| VKI_MAX_PAGE_SIZE == 16384 || VKI_MAX_PAGE_SIZE == 32768
1751+
|| VKI_MAX_PAGE_SIZE == 65536);
17501752
vg_assert(VKI_PAGE_SIZE <= VKI_MAX_PAGE_SIZE);
17511753
vg_assert(VKI_PAGE_SIZE == (1 << VKI_PAGE_SHIFT));
17521754
vg_assert(VKI_MAX_PAGE_SIZE == (1 << VKI_MAX_PAGE_SHIFT));
@@ -3324,11 +3326,12 @@ void _start_in_C_linux ( UWord* pArgc )
33243326
the_iicii.sp_at_startup = (Addr)pArgc;
33253327

33263328
# if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \
3327-
|| defined(VGP_ppc64le_linux) || defined(VGP_arm64_linux)
3329+
|| defined(VGP_ppc64le_linux) || defined(VGP_arm64_linux) \
3330+
|| defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
33283331
{
3329-
/* ppc32/ppc64 can be configured with different page sizes.
3330-
Determine this early. This is an ugly hack and really should
3331-
be moved into valgrind_main. */
3332+
/* ppc32/ppc64, arm64, mips32/64 can be configured with different
3333+
page sizes. Determine this early. This is an ugly hack and really
3334+
should be moved into valgrind_main. */
33323335
UWord *sp = &pArgc[1+argc+1];
33333336
while (*sp++ != 0)
33343337
;

coregrind/m_vki.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,12 @@
3939
describing the kernel interface, so this file is nearly empty. */
4040

4141

42-
/* ppc32/64-linux determines page size at startup, hence m_vki is
43-
the logical place to store that info. */
42+
/* ppc32/64, arm64 and mips32/64 (linux) determine page size at startup,
43+
hence m_vki is the logical place to store that info. */
4444

4545
#if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \
46-
|| defined(VGP_ppc64le_linux) || defined(VGP_arm64_linux)
46+
|| defined(VGP_ppc64le_linux) || defined(VGP_arm64_linux) \
47+
|| defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
4748
unsigned long VKI_PAGE_SHIFT = 12;
4849
unsigned long VKI_PAGE_SIZE = 1UL << 12;
4950
#endif

include/vki/vki-mips32-linux.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,12 @@ typedef unsigned long long __vki_u64;
7171
// From linux-2.6.35.5/include/asm-mips/page.h
7272
//----------------------------------------------------------------------
7373

74-
/* PAGE_SHIFT determines the page size */
75-
#define VKI_PAGE_SHIFT MIPS_PAGE_SHIFT
76-
#define VKI_PAGE_SIZE (1UL << VKI_PAGE_SHIFT)
74+
/* MIPS32 uses runtime pagesize detection */
75+
extern UWord VKI_PAGE_SHIFT;
76+
extern UWord VKI_PAGE_SIZE;
7777
#define VKI_PAGE_MASK (~(VKI_PAGE_SIZE-1))
78-
#define VKI_MAX_PAGE_SHIFT VKI_PAGE_SHIFT
79-
#define VKI_MAX_PAGE_SIZE VKI_PAGE_SIZE
78+
#define VKI_MAX_PAGE_SHIFT 16
79+
#define VKI_MAX_PAGE_SIZE (1UL << VKI_MAX_PAGE_SHIFT)
8080

8181
//----------------------------------------------------------------------
8282
// From linux-2.6.35.9/arch/mips/include/bits/shm.h

include/vki/vki-mips64-linux.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,12 @@ typedef unsigned long long __vki_u64;
8080
// From linux-2.6.35.9/include/asm-mips/page.h
8181
//----------------------------------------------------------------------
8282

83-
/* PAGE_SHIFT determines the page size */
84-
#define VKI_PAGE_SHIFT MIPS_PAGE_SHIFT
85-
#define VKI_PAGE_SIZE (1UL << VKI_PAGE_SHIFT)
86-
#define VKI_PAGE_MASK (~(VKI_PAGE_SIZE-1))
87-
#define VKI_MAX_PAGE_SHIFT VKI_PAGE_SHIFT
88-
#define VKI_MAX_PAGE_SIZE VKI_PAGE_SIZE
83+
/* MIPS64 uses runtime pagesize detection */
84+
extern UWord VKI_PAGE_SHIFT;
85+
extern UWord VKI_PAGE_SIZE;
86+
#define VKI_PAGE_MASK (~(VKI_PAGE_SIZE-1))
87+
#define VKI_MAX_PAGE_SHIFT 16
88+
#define VKI_MAX_PAGE_SIZE (1UL << VKI_MAX_PAGE_SHIFT)
8989

9090
//----------------------------------------------------------------------
9191
// From linux-2.6.35.9/arch/mips/include/bits/shm.h

0 commit comments

Comments
 (0)