Yes, fair enough. I suppose what I meant was that that particular part of the startup code was *regarding* SP as being uninitialised: it didn't read it, or use it, or set it on purpose to any kind of interim temp value before calling SYS_HEAPINFO.
It's true, of course, that this particular image does include an M-profile vector table that sets sp = 0x20004000 at startup. But the code (from newlib startup) that calls SYS_HEAPINFO is apparently intended to be generic enough not to depend on that, so in a different context, it might perfectly well be run with total nonsense in sp and expect to be able to get away with not doing anything about that until it gets back a more sensible value from semihosting. -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1918302 Title: qemu-system-arm segfaults while servicing SYS_HEAPINFO Status in QEMU: Fix Committed Bug description: I compiled QEMU version 5.2.0 from source on Ubuntu 18.04, and tried to use it to run the attached bare-metal Arm hello-world image, using the command line qemu-system-arm -M microbit -semihosting -nographic -device loader,file=hello.hex The result was that qemu-system-arm itself died of a segfault. Compiling it for debugging, the location of the segfault was in target/arm/arm-semi.c, in the case handler for the semihosting call TARGET_SYS_HEAPINFO, on line 1020 which assigns to 'rambase': const struct arm_boot_info *info = env->boot_info; target_ulong rambase = info->loader_start; and the problem seems to be that 'info', aka env->boot_info, is NULL in this context. To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1918302/+subscriptions