static void rddata(Biobuf*, uchar**, int*);
 static LSym *rdsym(Link*, Biobuf*, char*);
 
+void   writeobjdirect(Link*, Biobuf*);
+
+void
+writeobj(Link *ctxt, Biobuf *b)
+{
+       char *cmd[2];
+       
+       // TODO(rsc): Use 'go tool objwriter' to write object file,
+       // allowing the bulk of liblink to be moved into Go.
+       // As a first step, we check that we can invoke objwriter at all
+       // (it is an empty program for now).
+       // This tests the cmd/dist bootstrap process, making sure
+       // that objwriter is available when it needs to be.
+       // Once the support mechanisms are there, we can put the
+       // real code in.
+       
+       cmd[0] = smprint("%s/pkg/tool/%s_%s/objwriter", getgoroot(), getgohostos(), getgohostarch());
+       cmd[1] = "ping";
+       cmd[2] = nil;
+       if(runcmd(cmd) < 0)
+               sysfatal("cannot run objwriter: %r");
+
+       writeobjdirect(ctxt, b);
+}
+
 // The Go and C compilers, and the assembler, call writeobj to write
 // out a Go object file.  The linker does not call this; the linker
 // does not write out object files.
 void
-writeobj(Link *ctxt, Biobuf *b)
+writeobjdirect(Link *ctxt, Biobuf *b)
 {
        int flag, found;
        Hist *h;