Alexandre Julliard : loader: Make sure the new stack is 16-byte aligned in the preloader.
Alexandre Julliard
julliard at winehq.org
Fri Dec 17 11:30:44 CST 2010
Module: wine
Branch: master
Commit: 144cb78dbaeedcc36946907c5ccf391ecb011f04
URL: http://source.winehq.org/git/wine.git/?a=commit;h=144cb78dbaeedcc36946907c5ccf391ecb011f04
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Dec 16 16:52:02 2010 +0100
loader: Make sure the new stack is 16-byte aligned in the preloader.
---
loader/preloader.c | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/loader/preloader.c b/loader/preloader.c
index 2dc2872..8524ba5 100644
--- a/loader/preloader.c
+++ b/loader/preloader.c
@@ -512,18 +512,19 @@ static void set_auxiliary_values( ElfW(auxv_t) *av, const ElfW(auxv_t) *new_av,
src = (char *)*stack;
dst = src - (new_count - delete_count) * sizeof(*av);
- if (new_count > delete_count) /* need to make room for the extra values */
+ dst = (char *)((unsigned long)dst & ~15);
+ if (dst < src) /* need to make room for the extra values */
{
int len = (char *)(av + av_count + 1) - src;
for (i = 0; i < len; i++) dst[i] = src[i];
}
- else if (new_count < delete_count) /* get rid of unused values */
+ else if (dst > src) /* get rid of unused values */
{
int len = (char *)(av + av_count + 1) - src;
for (i = len - 1; i >= 0; i--) dst[i] = src[i];
}
*stack = dst;
- av -= (new_count - delete_count);
+ av = (ElfW(auxv_t) *)((char *)av + (dst - src));
/* now set the values */
for (j = 0; new_av[j].a_type != AT_NULL; j++)
More information about the wine-cvs
mailing list