Patch to get Borland's bcc 5.5 (free beer compiler) to work
Troy Rollo
wine at troy.rollo.name
Sun Apr 27 19:15:23 CDT 2003
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 );
More information about the wine-patches
mailing list