diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2011-12-21 21:19:48 +0400 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2011-12-21 21:19:48 +0400 |
commit | f500a700b15d6a55202cfac4cc05039ba23e9361 (patch) | |
tree | a49bf641fed48fc2537d70e8b7c2aa04108eae84 /winsup/cygwin/dcrt0.cc | |
parent | 40fb18380bf18739b8e6bd4a05fc7b02cbc8e84b (diff) |
* dcrt0.cc (_dll_crt0): Rephrase comments. Set $ebp to NULL, as in
the pthread stack setup.
* wow64.cc (wow64_revert_to_original_stack): Rephrase some comments.
Return _tlsbase-16 rather than _main_tls-4 so as not to waste stack.
Diffstat (limited to 'winsup/cygwin/dcrt0.cc')
-rw-r--r-- | winsup/cygwin/dcrt0.cc | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 8d5017715..827ab143d 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -951,19 +951,21 @@ _dll_crt0 () description. */ if (wow64_needs_stack_adjustment && !dynamically_loaded) { - /* Must be static since it's referenced after the stack pointers have - been moved. */ + /* Must be static since it's referenced after the stack and frame + pointer registers have been changed. */ static PVOID allocationbase = 0; - /* Check if we just move the stack. See comment in + /* Check if we just move the stack. If so, wow64_revert_to_original_stack + returns a non-NULL, 16 byte aligned address. See comments in wow64_revert_to_original_stack for the gory details. */ PVOID stackaddr = wow64_revert_to_original_stack (allocationbase); if (stackaddr) { - /* 2nd half of the stack move. Set stack pointers to new address. */ + /* 2nd half of the stack move. Set stack pointer to new address. + Set frame pointer to 0. */ __asm__ ("\n\ movl %[ADDR], %%esp \n\ - movl %%esp, %%ebp \n" + xorl %%ebp, %%ebp \n" : : [ADDR] "r" (stackaddr)); /* Now we're back on the original stack. Free up space taken by the former main thread stack and set DeallocationStack correctly. */ |