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