|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] mini-os: x86_64: crash passing double arguments
I noticed that passing a double argument to a varargs function on
x86_64 causes Mini-OS to crash. This only happens when called from a
thread, not when using the boot stack.
Here's my test case:
static void foo(char *fmt, ...) { }
static void float_tester(void *p)
{
printk("Running tests...\n");
foo("%d", 3);
printk("Pass int.\n");
foo("%f", 3.1);
printk("Pass float.\n");
}
When run from test.c's app_main directly, it passes, but when run from
a thread it crashes:
(d22) Running tests...
(d22) Pass int.
(d22) GPF rip: 0000000000006b04, error_code=0
(d22) Thread: float
(d22) RIP: e030:[<0000000000006b04>]
Subtracting 8 bytes from thread->sp when creating a new thread fixes
it (patch attached), but I'm not sure whether this is the right
solution, or whether there's a problem elsewhere (I know very little
about x86).
My test-case and fix/work-around are here:
https://github.com/talex5/xen/commits/stack-fix-x86
Thanks,
--
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
Attachment:
0001-mini-os-x86_64-make-thread-stacks-16-byte-aligned.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |