Print this page
6507 i386 makecontext(3c) needs to 16-byte align the stack

*** 159,170 **** testl %edx, %edx /* check if _enviorn==0 */ jne 1f /* fixed bug 4203802 */ leal 16(%ebp,%eax,4),%edx /* envp */ movl %edx,_environ /* copy to _environ */ 1: andl $-16,%esp /* make main() and exit() be called with */ ! subl $4,%esp /* a 16-byte aligned stack pointer */ pushl %edx leal 12(%ebp),%edx /* argv */ movl %edx,___Argv pushl %edx pushl %eax /* argc */ --- 159,181 ---- testl %edx, %edx /* check if _enviorn==0 */ jne 1f /* fixed bug 4203802 */ leal 16(%ebp,%eax,4),%edx /* envp */ movl %edx,_environ /* copy to _environ */ 1: + /* + * The stack needs to be 16-byte aligned with a 4-byte bias. See + * comment in lib/libc/i386/gen/makectxt.c. + * + * Note: If you change it, you need to change it in the following + * files as well: + * + * - lib/libc/i386/threads/machdep.c + * - lib/libc/i386/gen/makectxt.c + * - lib/common/i386/crti.s + */ andl $-16,%esp /* make main() and exit() be called with */ ! subl $4,%esp /* a properly aligned stack pointer */ pushl %edx leal 12(%ebp),%edx /* argv */ movl %edx,___Argv pushl %edx pushl %eax /* argc */