summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2013-03-05 14:58:24 +0000
committerDmitry V. Levin <ldv@altlinux.org>2013-03-05 16:03:53 +0000
commitc76a363af8bfc7b83558253fae38ae3d255e0aa9 (patch)
tree80afea822554e0b6b3469c6ee75a51e8f516d0e6
parentaba62927974603bb1ac0b659f6a4f8afb9899c83 (diff)
downloadstrace-c76a363af8bfc7b83558253fae38ae3d255e0aa9.tar.gz
strace-c76a363af8bfc7b83558253fae38ae3d255e0aa9.tar.bz2
strace-c76a363af8bfc7b83558253fae38ae3d255e0aa9.tar.xz
Use sysconf(_SC_PAGESIZE) instead of hardcoded PAGE_SHIFT
PAGE_SHIFT couldn't be reliably obtained at compile time, thanks to Chris Metcalf for the hint. * mem.c: Do not include <sys/user.h>. [SH64] Do not include <asm/page.h>. (get_pagesize): New function. (sys_mmap_pgoff, sys_old_mmap_pgoff): Use it.
-rw-r--r--mem.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/mem.c b/mem.c
index 6f22922..3bd41b4 100644
--- a/mem.c
+++ b/mem.c
@@ -40,14 +40,15 @@
# endif
#endif
-#include <sys/user.h> /* for PAGE_SHIFT */
-#if defined(SH64)
-# include <asm/page.h> /* for PAGE_SHIFT */
-#endif
-#if !defined(PAGE_SHIFT)
-# warning Failed to get PAGE_SHIFT, assuming 12
-# define PAGE_SHIFT 12
-#endif
+static unsigned long
+get_pagesize()
+{
+ static unsigned long pagesize;
+
+ if (!pagesize)
+ pagesize = sysconf(_SC_PAGESIZE);
+ return pagesize;
+}
int
sys_brk(struct tcb *tcp)
@@ -295,7 +296,7 @@ sys_old_mmap_pgoff(struct tcb *tcp)
for (i = 0; i < 5; i++)
u_arg[i] = (unsigned long) narrow_arg[i];
offset = narrow_arg[5];
- offset <<= PAGE_SHIFT;
+ offset *= get_pagesize();
return print_mmap(tcp, u_arg, offset);
}
#endif
@@ -324,7 +325,7 @@ sys_mmap_pgoff(struct tcb *tcp)
/* Try test/mmap_offset_decode.c */
unsigned long long offset;
offset = (unsigned long) tcp->u_arg[5];
- offset <<= PAGE_SHIFT;
+ offset *= get_pagesize();
return print_mmap(tcp, tcp->u_arg, offset);
}