Patch to get Borland's bcc 5.5 (free beer compiler) to work

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The only problem in the head code appears to be in the linker, which it turns 
out has a problem when it's told there's 3GB of user address space. Since 
Windows only offers a 3GB user address space in what passes for Microsoft's 
high end server editions of the operating system, it is unlikely that this is 
necessary. My solution is to drop the user address space to 2GB - if 3GB is 
desired, it probably should be a configurable option rather than hard coded 
as is the case now.

I dealt with a related FIXME along the way.

diff -u -r1.4 virtual.c
--- dlls/ntdll/virtual.c	7 Jan 2003 20:36:28 -0000	1.4
+++ dlls/ntdll/virtual.c	28 Apr 2003 00:05:58 -0000
@@ -102,7 +102,8 @@
 # define page_mask  0xfff
 # define page_shift 12
 # define page_size  0x1000
-# define ADDRESS_SPACE_LIMIT  ((void *)0xc0000000)  /* top of the user 
address space */
+/*# define ADDRESS_SPACE_LIMIT  ((void *)0xc0000000)  /* top of the user 
address space */
+#define ADDRESS_SPACE_LIMIT ((void *) 0x80000000)
 #else
 static UINT page_shift;
 static UINT page_mask;
@@ -1180,13 +1181,24 @@
     MEMORY_BASIC_INFORMATION *info = buffer;
 
     if (info_class != MemoryBasicInformation) return 
STATUS_INVALID_INFO_CLASS;
-    if (ADDRESS_SPACE_LIMIT && addr >= ADDRESS_SPACE_LIMIT)
-        return STATUS_WORKING_SET_LIMIT_RANGE;  /* FIXME */
-
     if (!is_current_process( process ))
     {
         ERR("Unsupported on other process\n");
         return STATUS_ACCESS_DENIED;
+    }
+
+    if (ADDRESS_SPACE_LIMIT && addr >= ADDRESS_SPACE_LIMIT)
+    {
+	info->BaseAddress = ADDRESS_SPACE_LIMIT;
+	info->AllocationBase = ADDRESS_SPACE_LIMIT;
+	info->AllocationProtect = PAGE_NOACCESS;
+	info->RegionSize = 0;
+	info->RegionSize -= (unsigned long) ADDRESS_SPACE_LIMIT;
+	info->State = MEM_COMMIT;
+	info->Protect = PAGE_NOACCESS;
+	info->Type = MEM_PRIVATE;
+	*res_len = sizeof(*info);
+	return STATUS_SUCCESS;
     }
 
     base = ROUND_ADDR( addr, page_mask );



[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux