Index: coregrind/ume.c =================================================================== RCS file: /home/kde/valgrind/coregrind/ume.c,v retrieving revision 1.18 diff -u -r1.18 ume.c --- coregrind/ume.c 26 Jul 2004 15:43:57 -0000 1.18 +++ coregrind/ume.c 27 Jul 2004 18:18:38 -0000 @@ -352,21 +352,22 @@ memsz = ph->p_memsz; brkaddr = addr+memsz; - res = mmap((char *)ROUNDDN(addr, align), - ROUNDUP(bss, align)-ROUNDDN(addr, align), - prot, MAP_FIXED|MAP_PRIVATE, e->fd, ROUNDDN(off, align)); - check_mmap(res, (char*)ROUNDDN(addr,align), - ROUNDUP(bss, align)-ROUNDDN(addr, align)); + assert(((addr - off) & (align - 1)) == 0); + + res = mmap((char *)PGROUNDDN(addr), PGROUNDUP(bss)-PGROUNDDN(addr), + prot, MAP_FIXED|MAP_PRIVATE, e->fd, PGROUNDDN(off)); + check_mmap(res, (char*)ROUNDDN(addr,VKI_BYTES_PER_PAGE), + PGROUNDUP(bss)-PGROUNDDN(addr)); /* if memsz > filesz, then we need to fill the remainder with zeroed pages */ if (memsz > filesz) { UInt bytes; - bytes = ROUNDUP(brkaddr, align)-ROUNDUP(bss, align); + bytes = PGROUNDUP(brkaddr)-PGROUNDUP(bss); if (bytes > 0) { - res = mmap((char *)ROUNDUP(bss, align), bytes, - prot, MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); - check_mmap(res, (char*)ROUNDUP(bss,align), bytes); + res = mmap((char *)PGROUNDUP(bss), bytes, prot, + MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + check_mmap(res, (char*)PGROUNDUP(bss), bytes); } bytes = bss & (VKI_BYTES_PER_PAGE - 1);