peripherals: 0.688 PID: 0.635 graphic: 0.614 user-level: 0.599 network: 0.588 permissions: 0.575 virtual: 0.572 ppc: 0.571 debug: 0.566 semantic: 0.561 arm: 0.560 register: 0.552 device: 0.546 TCG: 0.544 hypervisor: 0.541 VMM: 0.540 risc-v: 0.540 performance: 0.532 architecture: 0.503 i386: 0.497 boot: 0.494 mistranslation: 0.485 x86: 0.462 vnc: 0.460 socket: 0.441 files: 0.424 kernel: 0.424 assembly: 0.384 KVM: 0.332 /proc/self/maps content returned to 32-bits guest under 64-bits qemu Reading /proc/self/maps a user doesn't get a stack record. Not all programs relies on the maps file but some do. The bug found by running 32-bits binaries with address sanitizer (Asan) instrumentations under 64-bit qemu. $ echo "int main() { return 0; }" > /tmp/test.c $ gcc -m32 -fsanitize=address -fno-common -Wall -g -fPIC -o /tmp/test /tmp/test.c $ qemu-i386-static /tmp/test ==4092==AddressSanitizer CHECK failed: /home/michail/Downloads/gcc-4.9.0/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cc:63 "(((uptr)&rl >= start && (uptr)&rl < end)) != (0)" (0x0, 0x0) #0 0xf632ff01 (/home/michail/build/lib32/libasan.so.1+0x53f01) #1 0xf6333f49 (/home/michail/build/lib32/libasan.so.1+0x57f49) #2 0xf6338785 (/home/michail/build/lib32/libasan.so.1+0x5c785) #3 0xf6338bd1 (/home/michail/build/lib32/libasan.so.1+0x5cbd1) #4 0xf6331baf (/home/michail/build/lib32/libasan.so.1+0x55baf) #5 0xf6331dca (/home/michail/build/lib32/libasan.so.1+0x55dca) #6 0xf6331f5a (/home/michail/build/lib32/libasan.so.1+0x55f5a) #7 0xf6330bd4 (/home/michail/build/lib32/libasan.so.1+0x54bd4) #8 0xf67ebeec (/lib/ld-linux.so.2+0xeeec) #9 0xf67de10e (/lib/ld-linux.so.2+0x110e) This happened because during initialization Asan can't find stack boundaries. For some reasons Qemu wants to report stack boundaries just for several arch targets skipping other ones. This is from linux-user/syscall.c open_self_maps() #if defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_UNICORE32) dprintf(fd, "%08llx-%08llx rw-p %08llx 00:00 0 [stack]\n", (unsigned long long)ts->info->stack_limit, (unsigned long long)(ts->info->start_stack + (TARGET_PAGE_SIZE - 1)) & TARGET_PAGE_MASK, (unsigned long long)0); #endif Not very clear why the case covers just specific targets. This bug continues the previously reported issue with not hiden system map http://lists.nongnu.org/archive/html/qemu-devel/2014-07/msg02793.html. I think the ifdefs are just accident of history and we can safely remove them. We removed the ifdefs at some point; the test case in this bug report now runs successfully.