]> Cypherpunks repositories - gostls13.git/commitdiff
all: compiler/bootstrap for dragonfly/amd64
authorJoel Sing <jsing@google.com>
Fri, 23 Aug 2013 15:18:04 +0000 (01:18 +1000)
committerJoel Sing <jsing@google.com>
Fri, 23 Aug 2013 15:18:04 +0000 (01:18 +1000)
Add dragonfly/amd64 support to the Go compiler, bootstrap and GOOS list.

R=devon.odell, bradfitz
CC=golang-dev
https://golang.org/cl/12796050

15 files changed:
src/cmd/6l/asm.c
src/cmd/6l/obj.c
src/cmd/6l/pass.c
src/cmd/dist/build.c
src/cmd/dist/unix.c
src/cmd/go/signal_unix.go
src/cmd/ld/doc.go
src/cmd/ld/elf.c
src/cmd/ld/elf.h
src/cmd/ld/lib.h
src/lib9/run_unix.c
src/lib9/tempdir_unix.c
src/libmach/dragonfly.c [new file with mode: 0644]
src/pkg/go/build/deps_test.go
src/pkg/go/build/syslist.go

index 88fa67d9934e68872966d4f6ace834a2c1d52779..31c6b83b3a6bc660176728d0469789c6b11d850e 100644 (file)
@@ -43,6 +43,7 @@ char linuxdynld[] = "/lib64/ld-linux-x86-64.so.2";
 char freebsddynld[] = "/libexec/ld-elf.so.1";
 char openbsddynld[] = "/usr/libexec/ld.so";
 char netbsddynld[] = "/libexec/ld.elf_so";
+char dragonflydynld[] = "/libexec/ld-elf.so.2";
 
 char   zeroes[32];
 
@@ -672,6 +673,7 @@ asmb(void)
        case Hfreebsd:
        case Hnetbsd:
        case Hopenbsd:
+       case Hdragonfly:
                debug['8'] = 1; /* 64-bit addresses */
                break;
        case Hwindows:
@@ -700,6 +702,7 @@ asmb(void)
                case Hfreebsd:
                case Hnetbsd:
                case Hopenbsd:
+               case Hdragonfly:
                        symo = rnd(HEADR+segtext.len, INITRND)+rnd(segrodata.len, INITRND)+segdata.filelen;
                        symo = rnd(symo, INITRND);
                        break;
@@ -790,6 +793,7 @@ asmb(void)
        case Hfreebsd:
        case Hnetbsd:
        case Hopenbsd:
+       case Hdragonfly:
                asmbelf(symo);
                break;
        case Hwindows:
index 30775e04b16840da473ae176ad3c37b31ca90f2c..5337ecace9eb4b648f4c2590b5dac3cc3fa64f1c 100644 (file)
@@ -48,6 +48,7 @@ Header headers[] = {
        "plan9", Hplan9x64,
        "elf", Helf,
        "darwin", Hdarwin,
+       "dragonfly", Hdragonfly,
        "linux", Hlinux,
        "freebsd", Hfreebsd,
        "netbsd", Hnetbsd,
@@ -62,6 +63,7 @@ Header headers[] = {
  *     -Hplan9 -T0x200028 -R0x200000   is plan9 64-bit format
  *     -Helf -T0x80110000 -R4096       is ELF32
  *     -Hdarwin -Tx -Rx                is apple MH-exec
+ *     -Hdragonfly -Tx -Rx             is DragonFly elf-exec
  *     -Hlinux -Tx -Rx                 is linux elf-exec
  *     -Hfreebsd -Tx -Rx               is FreeBSD elf-exec
  *     -Hnetbsd -Tx -Rx                is NetBSD elf-exec
@@ -170,7 +172,7 @@ main(int argc, char *argv[])
        default:
                diag("unknown -H option");
                errorexit();
-       case Hplan9x32: /* plan 9 */
+       case Hplan9x32:         /* plan 9 */
                HEADR = 32L;
                if(INITTEXT == -1)
                        INITTEXT = 4096+HEADR;
@@ -179,7 +181,7 @@ main(int argc, char *argv[])
                if(INITRND == -1)
                        INITRND = 4096;
                break;
-       case Hplan9x64: /* plan 9 */
+       case Hplan9x64:         /* plan 9 */
                HEADR = 32L + 8L;
                if(INITTEXT == -1)
                        INITTEXT = 0x200000+HEADR;
@@ -188,7 +190,7 @@ main(int argc, char *argv[])
                if(INITRND == -1)
                        INITRND = 0x200000;
                break;
-       case Helf:      /* elf32 executable */
+       case Helf:              /* elf32 executable */
                HEADR = rnd(52L+3*32L, 16);
                if(INITTEXT == -1)
                        INITTEXT = 0x80110000L;
@@ -197,7 +199,7 @@ main(int argc, char *argv[])
                if(INITRND == -1)
                        INITRND = 4096;
                break;
-       case Hdarwin:   /* apple MACH */
+       case Hdarwin:           /* apple MACH */
                /*
                 * OS X system constant - offset from 0(GS) to our TLS.
                 * Explained in ../../pkg/runtime/cgo/gcc_darwin_amd64.c.
@@ -212,10 +214,11 @@ main(int argc, char *argv[])
                if(INITDAT == -1)
                        INITDAT = 0;
                break;
-       case Hlinux:    /* elf64 executable */
-       case Hfreebsd:  /* freebsd */
-       case Hnetbsd:   /* netbsd */
-       case Hopenbsd:  /* openbsd */
+       case Hlinux:            /* elf64 executable */
+       case Hfreebsd:          /* freebsd */
+       case Hnetbsd:           /* netbsd */
+       case Hopenbsd:          /* openbsd */
+       case Hdragonfly:        /* dragonfly */
                /*
                 * ELF uses TLS offset negative from FS.
                 * Translate 0(FS) and 8(FS) into -16(FS) and -8(FS).
@@ -232,7 +235,7 @@ main(int argc, char *argv[])
                if(INITRND == -1)
                        INITRND = 4096;
                break;
-       case Hwindows: /* PE executable */
+       case Hwindows:          /* PE executable */
                peinit();
                HEADR = PEFILEHEADR;
                if(INITTEXT == -1)
index 65e8127875fb6ed4d0654359b57988cdce236d0c..be1bc4f07002cb429b453142dcb28aad7c0d969b 100644 (file)
@@ -322,7 +322,7 @@ patch(void)
                }
                if(HEADTYPE == Hlinux || HEADTYPE == Hfreebsd
                || HEADTYPE == Hopenbsd || HEADTYPE == Hnetbsd
-               || HEADTYPE == Hplan9x64) {
+               || HEADTYPE == Hplan9x64 || HEADTYPE == Hdragonfly) {
                        // ELF uses FS instead of GS.
                        if(p->from.type == D_INDIR+D_GS)
                                p->from.type = D_INDIR+D_FS;
@@ -522,7 +522,8 @@ dostkoff(void)
                        p->as = AMOVQ;
                        if(HEADTYPE == Hlinux || HEADTYPE == Hfreebsd
                        || HEADTYPE == Hopenbsd || HEADTYPE == Hnetbsd
-                       || HEADTYPE == Hplan9x64)       // ELF uses FS
+                       || HEADTYPE == Hplan9x64 || HEADTYPE == Hdragonfly)
+                               // ELF uses FS
                                p->from.type = D_INDIR+D_FS;
                        else
                                p->from.type = D_INDIR+D_GS;
index fa43c77e505780a5ae1a188b0c23fcd7c31636d4..0a74ce8bbed6bc62f30b0f54911123525db0379e 100644 (file)
@@ -48,6 +48,7 @@ static char *okgoarch[] = {
 // The known operating systems.
 static char *okgoos[] = {
        "darwin",
+       "dragonfly",
        "linux",
        "freebsd",
        "netbsd",
index 0011e2f278afbf9e2ce5ef5a76dcd2860f8580dd..fa388e0587bec1a4e4026b5c93d6873edfaeb51c 100644 (file)
@@ -674,6 +674,8 @@ main(int argc, char **argv)
                gohostarch = "amd64";
 #elif defined(__linux__)
        gohostos = "linux";
+#elif defined(__DragonFly__)
+       gohostos = "dragonfly";
 #elif defined(__FreeBSD__)
        gohostos = "freebsd";
 #elif defined(__FreeBSD_kernel__)
index 124f356bf82d6e7ad1470c90053572d7e77b2da8..00c71657f5a399ed20e37512f4426dba3cbf0e68 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd
 
 package main
 
index 5f7c2565ef9af709bff76693557fc5a383d9dddb..06b4116247aefe30de52f84a8dfc071fe68d4f96 100644 (file)
@@ -33,6 +33,8 @@ Options new in this version:
                linker. This flag cannot be used when $GOOS is windows.
        -H darwin     (only in 6l/8l)
                Write Apple Mach-O binaries (default when $GOOS is darwin)
+       -H dragonfly  (only in 6l)
+               Write DragonFly ELF binaries (default when $GOOS is dragonfly)
        -H linux
                Write Linux ELF binaries (default when $GOOS is linux)
        -H freebsd
index 52bf333bd794f955f3d3086678af364c0c632f37..6b3638ec56f6c63032b2da7e608d3927df62abf9 100644 (file)
@@ -1189,6 +1189,9 @@ asmbelf(vlong symo)
                        case Hopenbsd:
                                interpreter = openbsddynld;
                                break;
+                       case Hdragonfly:
+                               interpreter = dragonflydynld;
+                               break;
                        }
                }
                resoff -= elfinterp(sh, startva, resoff, interpreter);
@@ -1461,6 +1464,8 @@ elfobj:
                eh->ident[EI_OSABI] = ELFOSABI_NETBSD;
        else if(HEADTYPE == Hopenbsd)
                eh->ident[EI_OSABI] = ELFOSABI_OPENBSD;
+       else if(HEADTYPE == Hdragonfly)
+               eh->ident[EI_OSABI] = ELFOSABI_NONE;
        if(PtrSize == 8)
                eh->ident[EI_CLASS] = ELFCLASS64;
        else
index dee5a6383587261fd79438c7a982eb128a423b70..5b2ff041a30d8c6183c035bd6a8445966bb5c96d 100644 (file)
@@ -1009,6 +1009,7 @@ extern char linuxdynld[];
 extern char freebsddynld[];
 extern char netbsddynld[];
 extern char openbsddynld[];
+extern char dragonflydynld[];
 int    elfreloc1(Reloc*, vlong sectoff);
 void   putelfsectionsyms(void);
 
index 0ba5203d1472c08c619fe6d82386dd9789260448..7ad630e1f0c38b29cf2f9093a568df57b1010374 100644 (file)
@@ -344,6 +344,7 @@ enum {
        Hfreebsd,       // FreeBSD ELF
        Hwindows,       // MS Windows PE
        Hopenbsd,       // OpenBSD ELF
+       Hdragonfly,     // DragonFly ELF
 };
 
 typedef struct Header Header;
index c26cf0afb7912eb68690596987a13bca5056519b..3db33c76ef8d04bf02546d817251c1b1c7aafe26 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd
 
 #include <u.h>
 #include <errno.h>
index 99a7092b68b09797477e4b7a27063734ca28e603..3ce87751b2faed3a47c6c67ff5d612fa903df596 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd
 
 #include <u.h>
 #include <dirent.h>
diff --git a/src/libmach/dragonfly.c b/src/libmach/dragonfly.c
new file mode 100644 (file)
index 0000000..43dd005
--- /dev/null
@@ -0,0 +1,62 @@
+// This is stubbed out for the moment. Will revisit when the time comes.
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+#include <mach.h>
+
+int
+ctlproc(int pid, char *msg)
+{
+       USED(pid);
+       USED(msg);
+
+       sysfatal("ctlproc unimplemented in DragonFly");
+       return -1;
+}
+
+char*
+proctextfile(int pid)
+{
+       USED(pid);
+       
+       sysfatal("proctextfile unimplemented in DragonFly");
+       return nil;
+}
+
+char*
+procstatus(int pid)
+{
+       USED(pid);
+
+       sysfatal("procstatus unimplemented in DragonFly");
+       return nil;
+}
+
+Map*
+attachproc(int pid, Fhdr *fp)
+{
+       USED(pid);
+       USED(fp);
+
+       sysfatal("attachproc unimplemented in DragonFly");
+       return nil;
+}
+
+void
+detachproc(Map *m)
+{
+       USED(m);
+
+       sysfatal("detachproc unimplemented in DragonFly");
+}
+
+int
+procthreadpids(int pid, int *p, int np)
+{
+       USED(pid);
+       USED(p);
+       USED(np);
+
+       sysfatal("procthreadpids unimplemented in DragonFly");
+       return -1;
+}
index 1a8564136f8a15d6263260bddd8a3cde607044a6..65c5efb5c58be46a5de8fc218d2d9d04db25d810 100644 (file)
@@ -356,7 +356,7 @@ func allowed(pkg string) map[string]bool {
 }
 
 var bools = []bool{false, true}
-var geese = []string{"darwin", "freebsd", "linux", "netbsd", "openbsd", "plan9", "windows"}
+var geese = []string{"darwin", "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "plan9", "windows"}
 var goarches = []string{"386", "amd64", "arm"}
 
 type osPkg struct {
index ea21f3c74bb83b33a9fb6fc892e1f2e76d1f52d4..e1fbf6330b19ae3c7f75057299788e11a4888fde 100644 (file)
@@ -4,5 +4,5 @@
 
 package build
 
-const goosList = "darwin freebsd linux netbsd openbsd plan9 windows "
+const goosList = "darwin dragonfly freebsd linux netbsd openbsd plan9 windows "
 const goarchList = "386 amd64 arm "