I quite frankly don't entirely understand this code, but exmap's debug output on i586 and x86_64 pointed out these differences and this makes it work. --- exmap-0.10/src/Exmap.cpp.sav 2006-09-28 18:52:25.000000000 +0200 +++ exmap-0.10/src/Exmap.cpp 2010-01-02 17:45:49.787955568 +0100 @@ -450,7 +450,7 @@ void Vma::add_pages(const list &pa bool Vma::is_vdso() { - return fname() == "[vdso]"; + return fname() == "[vdso]" || fname() == "[vsyscall]"; } bool Vma::is_file_backed() @@ -1495,7 +1495,7 @@ bool MapCalculator::calc_map_for_seg(con filevmas.pop_front(); dbg << pref.str() << "consuming vma\n"; - if (!filevmas.empty() && !filevmas.front()->is_file_backed()) { + while (!filevmas.empty() && !filevmas.front()->is_file_backed()) { filevmas.pop_front(); dbg << pref.str() << "consuming anon vma\n"; }