diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2013-03-05 14:58:24 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2013-03-05 16:03:53 +0000 |
commit | c76a363af8bfc7b83558253fae38ae3d255e0aa9 (patch) | |
tree | 80afea822554e0b6b3469c6ee75a51e8f516d0e6 | |
parent | aba62927974603bb1ac0b659f6a4f8afb9899c83 (diff) | |
download | strace-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.c | 21 |
1 files changed, 11 insertions, 10 deletions
@@ -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); } |