wine_anon_mmap MAP_FIXED patch
Bang Jun-Young
junyoung at mogua.com
Wed Nov 14 18:29:25 CST 2001
ChangeLog entry:
* memory/virtual.c, msdos/dosmem.c:
Bang Jun-Young <junyoung at mogua.com>
Ensure that wine_anon_mmap() is always established at
specified address, otherwise it fails.
Why this is necessary is because most Win32 binaries expect itself
to be loaded at fixed address (0x400000). GCC and M$ compilers seem
to strip relocation info on .exe by default, so we need to ensure
that on some OS, i.e. NetBSD. Refer to NetBSD/FreeBSD mmap(2) manpage
on MAP_FIXED flag. On Linux, it shouldn't do any harm.
--
Bang Jun-Young <junyoung at mogua.com>
-------------- next part --------------
Index: memory/virtual.c
===================================================================
RCS file: /home/wine/wine/memory/virtual.c,v
retrieving revision 1.70
diff -u -r1.70 virtual.c
--- memory/virtual.c 2001/11/06 20:57:23 1.70
+++ memory/virtual.c 2001/11/14 22:37:41
@@ -498,7 +498,7 @@
/* zero-map the whole range */
if ((ptr = wine_anon_mmap( base, total_size,
- PROT_READ | PROT_WRITE | PROT_EXEC, 0 )) == (char *)-1)
+ PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED )) == (char *)-1)
{
ptr = wine_anon_mmap( NULL, total_size,
PROT_READ | PROT_WRITE | PROT_EXEC, 0 );
Index: msdos/dosmem.c
===================================================================
RCS file: /home/wine/wine/msdos/dosmem.c,v
retrieving revision 1.33
diff -u -r1.33 dosmem.c
--- msdos/dosmem.c 2001/11/06 20:57:24 1.33
+++ msdos/dosmem.c 2001/11/14 22:37:45
@@ -451,7 +451,7 @@
int sys_offset = 0;
int page_size = getpagesize();
void *addr = wine_anon_mmap( (void *)page_size, 0x110000-page_size,
- PROT_READ | PROT_WRITE | PROT_EXEC, 0 );
+ PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED );
if (addr == (void *)page_size) /* we got what we wanted */
{
/* now map from address 0 */
More information about the wine-patches
mailing list