]> Cypherpunks repositories - gostls13.git/commitdiff
8l/6l: new -Hwindowsgui flag allows to build windows gui pe
authorAlex Brainman <alex.brainman@gmail.com>
Thu, 24 Feb 2011 05:10:30 +0000 (16:10 +1100)
committerAlex Brainman <alex.brainman@gmail.com>
Thu, 24 Feb 2011 05:10:30 +0000 (16:10 +1100)
Fixes #1516.

R=rsc, mattn
CC=golang-dev
https://golang.org/cl/4214041

src/cmd/6l/obj.c
src/cmd/8l/obj.c
src/cmd/ld/lib.c
src/cmd/ld/lib.h
src/cmd/ld/pe.c
src/cmd/ld/pe.h
src/pkg/exp/wingui/Makefile

index 6ade3800a224746f7a3cec7cf759458ccf9ebac5..8d602b649f83a06f68c840a4f294d788fb9a3988 100644 (file)
@@ -51,6 +51,7 @@ Header headers[] = {
    "linux", Hlinux,
    "freebsd", Hfreebsd,
    "windows", Hwindows,
+   "windowsgui", Hwindows,
    0, 0
 };
 
index 6ea9108f4d00ac16753c2cd720b80d037f44543c..791ba1e525390c886d81f58ecb9a4e205c6618bd 100644 (file)
@@ -57,6 +57,7 @@ Header headers[] = {
    "nacl", Hnacl,
    "freebsd", Hfreebsd,
    "windows", Hwindows,
+   "windowsgui", Hwindows,
    "tiny", Htiny,
    0, 0
 };
index 998e28cf16a174e7ef68bbe99e00391a5708b334..39593085d4507ff4e3b64d2132143b99a5ee85ae 100644 (file)
@@ -1271,8 +1271,10 @@ headtype(char *name)
        int i;
 
        for(i=0; headers[i].name; i++)
-               if(strcmp(name, headers[i].name) == 0)
+               if(strcmp(name, headers[i].name) == 0) {
+                       headstring = headers[i].name;
                        return headers[i].val;
+               }
        fprint(2, "unknown header type -H %s\n", name);
        errorexit();
        return -1;  // not reached
index 234ea3198ff2fe2c31904ee0c499412a1cc6f1a2..7df348353cb4f5aedd82d112ebbf38a14eff5d0c 100644 (file)
@@ -211,31 +211,33 @@ enum {
 
 /* executable header types */
 enum {
-   Hgarbunix = 0,      // garbage unix
-   Hnoheader,          // no header
-   Hunixcoff,          // unix coff
-   Hrisc,              // aif for risc os
-   Hplan9x32,          // plan 9 32-bit format
-   Hplan9x64,          // plan 9 64-bit format
-   Hmsdoscom,          // MS-DOS .COM
-   Hnetbsd,            // NetBSD
-   Hmsdosexe,          // fake MS-DOS .EXE
-   Hixp1200,           // IXP1200 (raw)
-   Helf,               // ELF32
-   Hipaq,              // ipaq
-   Hdarwin,            // Apple Mach-O
-   Hlinux,             // Linux ELF
-   Hnacl,              // Google Native Client
-   Hfreebsd,           // FreeBSD ELF
-   Hwindows,           // MS Windows PE
-   Htiny               // tiny (os image)
+       Hgarbunix = 0,  // garbage unix
+       Hnoheader,      // no header
+       Hunixcoff,      // unix coff
+       Hrisc,          // aif for risc os
+       Hplan9x32,      // plan 9 32-bit format
+       Hplan9x64,      // plan 9 64-bit format
+       Hmsdoscom,      // MS-DOS .COM
+       Hnetbsd,        // NetBSD
+       Hmsdosexe,      // fake MS-DOS .EXE
+       Hixp1200,       // IXP1200 (raw)
+       Helf,           // ELF32
+       Hipaq,          // ipaq
+       Hdarwin,        // Apple Mach-O
+       Hlinux,         // Linux ELF
+       Hnacl,          // Google Native Client
+       Hfreebsd,       // FreeBSD ELF
+       Hwindows,       // MS Windows PE
+       Htiny           // tiny (os image)
 };
 
 typedef struct Header Header;
 struct Header {
-   char *name;
-   int val;
+       char *name;
+       int val;
 };
 
-extern Header headers[];
-int headtype(char*);
+EXTERN char*   headstring;
+extern Header  headers[];
+
+int    headtype(char*);
index 425fd9e091e6912324e86147780ddca6c9c54dd4..e72b0b2a0d4086a5725b7dc1a3c8f9d359122f98 100644 (file)
@@ -526,7 +526,10 @@ asmbpe(void)
        set(MinorSubsystemVersion, 0);
        set(SizeOfImage, nextsectoff);
        set(SizeOfHeaders, PEFILEHEADR);
-       set(Subsystem, 3);      // WINDOWS_CUI
+       if(strcmp(headstring, "windowsgui") == 0)
+               set(Subsystem, IMAGE_SUBSYSTEM_WINDOWS_GUI);
+       else
+               set(Subsystem, IMAGE_SUBSYSTEM_WINDOWS_CUI);
        set(SizeOfStackReserve, 0x0040000);
        set(SizeOfStackCommit, 0x00001000);
        set(SizeOfHeapReserve, 0x00100000);
index 6dbf6a5be6fce22840edc78d5eb4538d33198fc6..2180fb88cb79d98871066be1487ea8ade40aa25a 100644 (file)
@@ -131,6 +131,9 @@ enum {
        IMAGE_DIRECTORY_ENTRY_IAT = 12,
        IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13,
        IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14,
+
+       IMAGE_SUBSYSTEM_WINDOWS_GUI = 2,
+       IMAGE_SUBSYSTEM_WINDOWS_CUI = 3,
 };
 
 void peinit(void);
index e9d44d2bcf5456e91bae702130d65327151b77d7..983a8270be8d17043e8c517ffd028721c7994bb3 100644 (file)
@@ -6,6 +6,8 @@ GOOS=windows
 
 include ../../../Make.inc
 
+LD:=$(LD) -Hwindowsgui
+
 TARG=wingui
 
 GOFILES=\