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