[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [MirageOS-devel] Crash on x86 with doubles
On 2 July 2014 12:45, Anil Madhavapeddy <anil@xxxxxxxxxx> wrote: > On 2 Jul 2014, at 13:04, Thomas Leonard <talex5@xxxxxxxxx> wrote: > >> On 2 July 2014 09:02, Anil Madhavapeddy <anil@xxxxxxxxxx> wrote: >>> On 1 Jul 2014, at 22:53, Thomas Leonard <talex5@xxxxxxxxx> wrote: >>> >>>> I've got printing of floating point values working now on ARM, but >>>> while testing I discovered it crashes on x86. >>>> >>>> This turned out to be unrelated to OCaml or Mirage. It seems that >>>> passing a double argument to any varargs function causes a crash on >>>> x86_64 if done from a Mini-OS thread. Can any x86 gurus here shed some >>>> light on what might cause that? x86 is a mystery to me. >>> >>> First thing to check is that %rsp stack alignment is valid when you >>> enter the function, as it's required to be 16-byte aligned by the >>> x86_64 ABI if you're using the XMM registers. >>> >>> An ancient diff in our local MiniOS that fixed one instance of this >>> is below. (I can't reproduce this instantly to give you a more precise >>> diagnosis as I'm travelling at the moment, apologies!) >> >> Ah, that was indeed the problem. I changed the x86 arch_create_thread >> to skip 8 bytes and now it works! >> >> Though, it seemed that it *was* 16-byte aligned before, and is now off >> by 8 bytes, which I don't understand. I'll send the patch to xen-devel >> and they can decide if it's the right fix. > > Stack misalignment is the bug that keeps on giving. It's really easy > for an unrelated change to misalign the stack under some conditions, and > to not notice until a future 16-byte alignment operation happens. > > Found several of these in OCaml as well... > http://caml.inria.fr/mantis/view.php?id=5700 > http://caml.inria.fr/mantis/view.php?id=6038 > > Incidentally, I notice that the thread machinery in MiniOS is now active > again. I removed it from our MiniOS on the basis that it wasn't used > (but there's no harm in leaving it there now). But that might explain > why the issue cropped up again, as I never tested that code path in > upstream MiniOS. I've removed it again now (mirage-platform now overrides Mini-OS's start_kernel). -- Dr Thomas Leonard http://0install.net/ GPG: 9242 9807 C985 3C07 44A6 8B9A AE07 8280 59A5 3CC1 GPG: DA98 25AE CAD0 8975 7CDA BD8E 0713 3F96 CA74 D8BA _______________________________________________ MirageOS-devel mailing list MirageOS-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |