rpms/valgrind/devel valgrind-3.2.1-ppc-pagesize.patch,NONE,1.1

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Wed Oct 25 15:35:58 UTC 2006


Author: jakub

Update of /cvs/dist/rpms/valgrind/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv30945

Added Files:
	valgrind-3.2.1-ppc-pagesize.patch 
Log Message:
3.2.1-5

valgrind-3.2.1-ppc-pagesize.patch:
 coregrind/m_aspacemgr/aspacemgr.c             |    3 ++-
 coregrind/m_main.c                            |   22 ++++++++++++++++++++++
 coregrind/m_replacemalloc/vg_replace_malloc.c |    4 ++++
 coregrind/m_syswrap/syswrap-ppc32-linux.c     |    4 ++--
 coregrind/m_syswrap/syswrap-ppc64-linux.c     |    4 ++--
 coregrind/m_ume.c                             |    4 ++--
 coregrind/pub_core_aspacemgr.h                |    9 +++++++--
 include/vki-amd64-linux.h                     |    2 ++
 include/vki-ppc32-linux.h                     |    8 +++++---
 include/vki-ppc64-linux.h                     |    8 +++++---
 include/vki-x86-linux.h                       |    2 ++
 11 files changed, 55 insertions(+), 15 deletions(-)

--- NEW FILE valgrind-3.2.1-ppc-pagesize.patch ---
--- valgrind-3.2.1/include/vki-ppc32-linux.h.jj	2006-08-21 12:17:45.000000000 +0200
+++ valgrind-3.2.1/include/vki-ppc32-linux.h	2006-10-25 14:25:37.000000000 +0200
@@ -61,9 +61,11 @@ typedef struct {
 // From linux-2.6.9/include/asm-ppc/page.h
 //----------------------------------------------------------------------
 
-/* PAGE_SHIFT determines the page size */
-#define VKI_PAGE_SHIFT	12
-#define VKI_PAGE_SIZE	(1UL << VKI_PAGE_SHIFT)
+/* PAGE_SHIFT determines the page size, unfortunately
+   page size might vary between 32-bit and 64-bit ppc kernels */
+extern unsigned long VKI_PAGE_SHIFT, VKI_PAGE_SIZE;
+#define VKI_MAX_PAGE_SHIFT	16
+#define VKI_MAX_PAGE_SIZE	(1UL << VKI_PAGE_SHIFT)
 
 //----------------------------------------------------------------------
 // From linux-2.6.9/include/asm-ppc/signal.h
--- valgrind-3.2.1/include/vki-ppc64-linux.h.jj	2006-08-21 12:17:45.000000000 +0200
+++ valgrind-3.2.1/include/vki-ppc64-linux.h	2006-10-25 14:26:41.000000000 +0200
@@ -62,9 +62,11 @@ typedef unsigned int vki_u32;
 // From linux-2.6.13/include/asm-ppc64/page.h
 //----------------------------------------------------------------------
 
-/* PAGE_SHIFT determines the page size */
-#define VKI_PAGE_SHIFT  12
-#define VKI_PAGE_SIZE   (1UL << VKI_PAGE_SHIFT)
+/* PAGE_SHIFT determines the page size, unfortunately
+   page size might vary between 32-bit and 64-bit ppc kernels */
+extern unsigned long VKI_PAGE_SHIFT, VKI_PAGE_SIZE;
+#define VKI_MAX_PAGE_SHIFT	16
+#define VKI_MAX_PAGE_SIZE	(1UL << VKI_PAGE_SHIFT)
 
 //----------------------------------------------------------------------
 // From linux-2.6.13/include/asm-ppc64/signal.h
--- valgrind-3.2.1/include/vki-x86-linux.h.jj	2006-08-21 12:17:45.000000000 +0200
+++ valgrind-3.2.1/include/vki-x86-linux.h	2006-10-25 14:27:36.000000000 +0200
@@ -60,6 +60,8 @@ typedef unsigned int vki_u32;
 /* PAGE_SHIFT determines the page size */
 #define VKI_PAGE_SHIFT	12
 #define VKI_PAGE_SIZE	(1UL << VKI_PAGE_SHIFT)
+#define VKI_MAX_PAGE_SHIFT	VKI_PAGE_SHIFT
+#define VKI_MAX_PAGE_SIZE	VKI_PAGE_SIZE
 
 //----------------------------------------------------------------------
 // From linux-2.6.8.1/include/asm-i386/signal.h
--- valgrind-3.2.1/include/vki-amd64-linux.h.jj	2006-08-21 12:17:45.000000000 +0200
+++ valgrind-3.2.1/include/vki-amd64-linux.h	2006-10-25 14:27:52.000000000 +0200
@@ -59,6 +59,8 @@ typedef unsigned int vki_u32;
 
 #define VKI_PAGE_SHIFT	12
 #define VKI_PAGE_SIZE	(1UL << VKI_PAGE_SHIFT)
+#define VKI_MAX_PAGE_SHIFT	VKI_PAGE_SHIFT
+#define VKI_MAX_PAGE_SIZE	VKI_PAGE_SIZE
 
 //----------------------------------------------------------------------
 // From linux-2.6.9/include/asm-x86_64/signal.h
--- valgrind-3.2.1/coregrind/m_ume.c.jj	2006-08-21 12:17:49.000000000 +0200
+++ valgrind-3.2.1/coregrind/m_ume.c	2006-10-25 14:46:30.000000000 +0200
@@ -557,7 +557,7 @@ static Int do_exec_inner(const HChar* ex
 /* returns: 0 = success, non-0 is failure */
 static Int load_script(Int fd, const HChar* name, ExeInfo* info)
 {
-   Char  hdr[VKI_PAGE_SIZE];
+   Char  hdr[VKI_MAX_PAGE_SIZE];
    Int   len = VKI_PAGE_SIZE;
    Int   eol;
    Char* interp;
@@ -632,7 +632,7 @@ SysRes VG_(pre_exec_check)(const HChar* 
 {
    Int fd, ret;
    SysRes res;
-   Char  buf[VKI_PAGE_SIZE];
+   Char  buf[VKI_MAX_PAGE_SIZE];
    SizeT bufsz = VKI_PAGE_SIZE, fsz;
 
    // Check it's readable
--- valgrind-3.2.1/coregrind/m_syswrap/syswrap-ppc32-linux.c.jj	2006-09-12 00:01:35.000000000 +0200
+++ valgrind-3.2.1/coregrind/m_syswrap/syswrap-ppc32-linux.c	2006-10-25 16:35:37.000000000 +0200
@@ -673,7 +673,7 @@ PRE(sys_mmap2)
    SysRes r;
 
    // Exactly like old_mmap() except:
-   //  - the file offset is specified in pagesize units rather than bytes,
+   //  - the file offset is specified in 4K units rather than bytes,
    //    so that it can be used for files bigger than 2^32 bytes.
    PRINT("sys_mmap2 ( %p, %llu, %d, %d, %d, %d )",
          ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
@@ -683,7 +683,7 @@ PRE(sys_mmap2)
                  unsigned long, fd,    unsigned long, offset);
 
    r = ML_(generic_PRE_sys_mmap)( tid, ARG1, ARG2, ARG3, ARG4, ARG5, 
-                                       VKI_PAGE_SIZE * (Off64T)ARG6 );
+                                       4096 * (Off64T)ARG6 );
    SET_STATUS_from_SysRes(r);
 }
 
--- valgrind-3.2.1/coregrind/m_syswrap/syswrap-ppc64-linux.c.jj	2006-08-28 15:38:56.000000000 +0200
+++ valgrind-3.2.1/coregrind/m_syswrap/syswrap-ppc64-linux.c	2006-10-25 16:35:59.000000000 +0200
@@ -701,7 +701,7 @@ PRE(sys_mmap)
 //zz    SysRes r;
 //zz 
 //zz    // Exactly like old_mmap() except:
-//zz    //  - the file offset is specified in pagesize units rather than bytes,
+//zz    //  - the file offset is specified in 4K units rather than bytes,
 //zz    //    so that it can be used for files bigger than 2^32 bytes.
 //zz    PRINT("sys_mmap2 ( %p, %llu, %d, %d, %d, %d )",
 //zz          ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
@@ -711,7 +711,7 @@ PRE(sys_mmap)
 //zz                  unsigned long, fd,    unsigned long, offset);
 //zz 
 //zz    r = ML_(generic_PRE_sys_mmap)( tid, ARG1, ARG2, ARG3, ARG4, ARG5, 
-//zz                                        VKI_PAGE_SIZE * (Off64T)ARG6 );
+//zz                                        4096 * (Off64T)ARG6 );
 //zz    SET_STATUS_from_SysRes(r);
 //zz }
 //zz 
--- valgrind-3.2.1/coregrind/m_aspacemgr/aspacemgr.c.jj	2006-09-13 00:37:48.000000000 +0200
+++ valgrind-3.2.1/coregrind/m_aspacemgr/aspacemgr.c	2006-10-25 16:34:23.000000000 +0200
@@ -443,8 +443,9 @@ SysRes VG_(am_do_mmap_NO_NOTIFY)( Addr s
    SysRes res;
    aspacem_assert(VG_IS_PAGE_ALIGNED(offset));
 #  if defined(VGP_x86_linux) || defined(VGP_ppc32_linux)
+   /* mmap2 uses 4096 chunks even if actual page size is bigger.  */
    res = VG_(do_syscall6)(__NR_mmap2, (UWord)start, length,
-                          prot, flags, fd, offset / VKI_PAGE_SIZE);
+                          prot, flags, fd, offset / 4096);
 #  elif defined(VGP_amd64_linux) || defined(VGP_ppc64_linux)
    res = VG_(do_syscall6)(__NR_mmap, (UWord)start, length, 
                          prot, flags, fd, offset);
--- valgrind-3.2.1/coregrind/m_replacemalloc/vg_replace_malloc.c.jj	2006-08-28 15:38:52.000000000 +0200
+++ valgrind-3.2.1/coregrind/m_replacemalloc/vg_replace_malloc.c	2006-10-25 17:08:40.000000000 +0200
@@ -337,7 +337,11 @@ MEMALIGN(m_libc_dot_so_star, memalign);
    void* VG_REPLACE_FUNCTION_ZU(soname,fnname) ( SizeT size ); \
    void* VG_REPLACE_FUNCTION_ZU(soname,fnname) ( SizeT size )  \
    { \
+      extern int getpagesize (void); \
+      if (__builtin_constant_p (VKI_PAGE_SIZE)) \
       return VG_REPLACE_FUNCTION_ZU(libcZdsoZa,memalign)(VKI_PAGE_SIZE, size); \
+      else \
+      return VG_REPLACE_FUNCTION_ZU(libcZdsoZa,memalign)(getpagesize (), size); \
    }
 
 VALLOC(m_libc_dot_so_star, valloc);
--- valgrind-3.2.1/coregrind/m_main.c.jj	2006-10-25 14:47:40.000000000 +0200
+++ valgrind-3.2.1/coregrind/m_main.c	2006-10-25 15:05:36.000000000 +0200
@@ -2973,6 +2955,11 @@ asm("\n"
 #error "_start: needs implementation on this platform"
 #endif
 
+#if defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
+unsigned long VKI_PAGE_SHIFT = 12;
+unsigned long VKI_PAGE_SIZE = (1UL << 12);
+#endif
+
 /* Avoid compiler warnings: this fn _is_ used, but labelling it
    'static' causes gcc to complain it isn't. */
 void _start_in_C ( UWord* pArgc );
@@ -2983,6 +2970,23 @@ void _start_in_C ( UWord* pArgc )
    HChar** argv = (HChar**)&pArgc[1];
    HChar** envp = (HChar**)&pArgc[1+argc+1];
    sp_at_startup = (Addr)pArgc;
+#if defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
+   {
+      UWord *sp = &pArgc[1+argc+1];
+      /* ppc/ppc64 can be configured with different page sizes.
+         Determine this early.  */
+      while (*sp++ != 0);
+      for (; *sp != AT_NULL && *sp != AT_PAGESZ; sp += 2);
+      if (*sp == AT_PAGESZ) {
+	 VKI_PAGE_SIZE = sp[1];
+	 for (VKI_PAGE_SHIFT = 12;
+	      VKI_PAGE_SHIFT <= VKI_MAX_PAGE_SHIFT; VKI_PAGE_SHIFT++)
+	    if (VKI_PAGE_SIZE == (1UL << VKI_PAGE_SHIFT))
+	       break;
+      }
+   }
+#endif
+
    r = main( (Int)argc, argv, envp );
    VG_(exit)(r);
 }
--- valgrind-3.2.1/coregrind/pub_core_aspacemgr.h.jj	2006-08-28 15:39:04.000000000 +0200
+++ valgrind-3.2.1/coregrind/pub_core_aspacemgr.h	2006-10-25 17:19:05.000000000 +0200
@@ -293,8 +293,13 @@ extern Bool VG_(am_relocate_nooverlap_cl
 // stacks.  The address space manager provides and suitably
 // protects such stacks.
 
-#define VG_STACK_GUARD_SZB  8192   // 2 pages
-#define VG_STACK_ACTIVE_SZB 65536  // 16 pages
+#if defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
+# define VG_STACK_GUARD_SZB 65536   // 1 .. 16 pages
+# define VG_STACK_ACTIVE_SZB 131072 // 2 .. 32 pages
+#else
+# define VG_STACK_GUARD_SZB  8192   // 2 pages
+# define VG_STACK_ACTIVE_SZB 65536  // 16 pages
+#endif
 
 typedef
    struct {




More information about the fedora-cvs-commits mailing list