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" );