15dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes/* Should strace show byte or page offsets in mmap syscalls 25dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * which take page offset parameters? 35dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * 45dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * At the time of writing, sys_mmap() converts page to byte offsets, 55dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * but only for SH64! But this routine is used on i386 too - by mmap2 syscall, 65dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * which uses page offsets too. As it stands now, SH64 and i386 are inconsistent. 75dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * 85dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * sys_old_mmap() is used for old mmap syscall, which uses byte offset - 95dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * should be ok. 105dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * sys_mmap64() is currently buggy (should print bogus offset, but I can't 115dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * test it right now. What arch/bitness invokes sys_mmap64?) 125dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * 135dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * This program is intended for testing what strace actually shows. Usage: 145dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * $ gcc test/mmap_offset_decode.c -o mmap_offset_decode -static 155dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * $ strace ./mmap_offset_decode 165dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * 175dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * As of today (2011-08), on i386 strace prints page offset. 185dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * Fixed 2013-02-19. Now all mmaps on all arches should show byte offsets. 195dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes */ 205dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define _LARGEFILE_SOURCE 215dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define _LARGEFILE64_SOURCE 225dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define _FILE_OFFSET_BITS 64 235dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#include <sys/mman.h> 245dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#include <errno.h> 255dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesint main() 265dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes{ 275dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes /* 0x1000 is meant to be page size multiplier */ 285dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 295dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 0x7fff0000LL * 0x1000); 305dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes return errno != 0; 315dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes} 32