summaryrefslogtreecommitdiff
path: root/devel/st/files/patch-md.h
diff options
context:
space:
mode:
Diffstat (limited to 'devel/st/files/patch-md.h')
-rw-r--r--devel/st/files/patch-md.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/devel/st/files/patch-md.h b/devel/st/files/patch-md.h
new file mode 100644
index 000000000000..c423b4501f63
--- /dev/null
+++ b/devel/st/files/patch-md.h
@@ -0,0 +1,22 @@
+--- md.h 2009-10-01 20:46:43.000000000 +0200
++++ md.h 2014-12-16 22:52:34.000000000 +0100
+@@ -161,6 +161,19 @@
+ #define MD_JB_SP 34
+ #elif defined(__amd64__)
+ #define MD_JB_SP 2
++/*
++ * The following comment is taken from src/lib/libc/amd64/gen/makecontext.c
++ * It explains why we specifically break the alignment to 64 byte boundary
++ * that is unconditionally enforced by sched.c, by setting MD_STACK_PAD_SIZE
++ * to this funky value.
++ * Without this, anything using va_start() & friends fails unpredictably.
++ */
++ /*
++ * Account for arguments on stack and do the funky C entry alignment.
++ * This means that we need an 8-byte-odd alignment since the ABI expects
++ * the return address to be pushed, thus breaking the 16 byte alignment.
++ */
++#define MD_STACK_PAD_SIZE 8
+ #else
+ #error Unknown CPU architecture
+ #endif