graphic: 0.925 architecture: 0.923 semantic: 0.905 x86: 0.897 arm: 0.878 performance: 0.865 mistranslation: 0.845 permissions: 0.821 user-level: 0.805 PID: 0.755 debug: 0.741 device: 0.721 files: 0.683 socket: 0.669 kernel: 0.625 ppc: 0.572 vnc: 0.566 peripherals: 0.564 virtual: 0.563 network: 0.537 register: 0.536 assembly: 0.530 risc-v: 0.508 TCG: 0.443 VMM: 0.423 hypervisor: 0.392 boot: 0.326 i386: 0.113 KVM: 0.108 qemu-arm core dumped for no entry symbol programe Hi qemu developers, Environment: * Fedora 24 x86_64 * qemu-arm version 2.6.92, Copyright (c) 2003-2008 Fabrice Bellard * arm-linux-gnu-gcc 6.1.1 20160621 (Red Hat Cross 6.1.1-2) (GCC) target: arm-linux-gnueabi * glibc-arm-linux-gnu-devel-2.23 very simple hello.c: #include int main(int argc, char *argv[]) { printf("Hello World\n"); return 0; } arm-linux-gnu-gcc hello.c -I/usr/arm-linux-gnu/include -L/usr/arm-linux-gnu/lib -nostdlib -lc /usr/bin/arm-linux-gnu-ld: Warning: Cannot find entry symbol _start; defaulting to 00000000000101fc qemu-arm -L /usr/arm-linux-gnu ./a.out Hello World qemu: uncaught target signal 4 (Illegal instruction) - core dumped Illegal instruction But provided entry symbol: arm-linux-gnu-gcc hello.c -I/usr/arm-linux-gnu/include -L/usr/arm-linux-gnu/lib -nostdlib /usr/arm-linux-gnu/lib/crt1.o /usr/arm-linux-gnu/lib/crti.o /usr/arm-linux-gnu/lib/crtn.o -lc qemu-arm -L /usr/arm-linux-gnu ./a.out is able to work happily! Regards, Leslie Zhai file a.out a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=6a86f764c1200a41253e1bc80d3155a295b87818, not stripped Why do you think this is a bug in QEMU? This program crashes on exit if you run it on real arm hardware. This is unsurprising as you have told the compiler to build it with no C runtime. The program thus starts at the beginning of 'main', and when it hits the return at the end there is nowhere for it to return to and it crashes. If you link the program with the C runtime the way you are expected to, then the runtime gets control at the start of execution and provides a place for main() to return to. If you choose not to link against the C runtime then it is your responsibility to provide an alternate runtime (including defining an entry point) which implements the semantics that the main() function expects.