Builtin modules must be aligned on 64K boundary.
diff --git a/library/loader.c b/library/loader.c
index 20e29e6..5562952 100644
--- a/library/loader.c
+++ b/library/loader.c
@@ -220,18 +220,9 @@
assert( size <= page_size );
- if (nt_descr->OptionalHeader.ImageBase)
- {
- addr = wine_anon_mmap( (void *)nt_descr->OptionalHeader.ImageBase,
- page_size, PROT_READ|PROT_WRITE, MAP_FIXED );
- if (addr != (BYTE *)nt_descr->OptionalHeader.ImageBase) return NULL;
- }
- else
- {
- /* this will leak memory; but it should never happen */
- addr = wine_anon_mmap( NULL, page_size, PROT_READ|PROT_WRITE, 0 );
- if (addr == (BYTE *)-1) return NULL;
- }
+ /* module address must be aligned on 64K boundary */
+ addr = (BYTE *)((nt_descr->OptionalHeader.ImageBase + 0xffff) & ~0xffff);
+ if (wine_anon_mmap( addr, page_size, PROT_READ|PROT_WRITE, MAP_FIXED ) != addr) return NULL;
dos = (IMAGE_DOS_HEADER *)addr;
nt = (IMAGE_NT_HEADERS *)(dos + 1);
diff --git a/tools/winebuild/spec32.c b/tools/winebuild/spec32.c
index 01f19f3..7284f9b 100644
--- a/tools/winebuild/spec32.c
+++ b/tools/winebuild/spec32.c
@@ -550,7 +550,7 @@
fprintf( outfile, "#endif\n" );
fprintf( outfile, "asm(\".section \\\".text\\\"\\n\\t\"\n" );
fprintf( outfile, " \".align %d\\n\"\n", get_alignment(page_size) );
- fprintf( outfile, " \"" __ASM_NAME("pe_header") ":\\t.skip %ld\\n\\t\");\n", page_size );
+ fprintf( outfile, " \"" __ASM_NAME("pe_header") ":\\t.skip 65536\\n\\t\");\n" );
fprintf( outfile, "#ifndef __GNUC__\n" );
fprintf( outfile, "}\n" );
fprintf( outfile, "#endif\n" );