diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
index b51f56dc440a776f4d04b06f107e07030b24aa8b..605ef52e96923c00cbfb413451d0ae3732df9b12 100644
--- a/src/cmd/dist/build.go
+++ b/src/cmd/dist/build.go
@@ -488,6 +488,16 @@ func setup() {
 	xmkdirall(p)
 	xatexit(func() { xremoveall(p) })
 
+	// Create alternate driectory for intermediate
+	// standard library .a's to be placed rather than
+	// the final build's install locations.
+	p = pathf("%s/pkg/obj/go-bootstrap", goroot)
+	if rebuildall {
+		xremoveall(p)
+	}
+	xmkdirall(p)
+	xatexit(func() { xremoveall(p) })
+
 	// Create tool directory.
 	// We keep it in pkg/, just like the object directory above.
 	if rebuildall {
@@ -651,6 +661,7 @@ func runInstall(pkg string, ch chan struct{}) {
 			link = append(link, goldflags)
 		}
 		link = append(link, "-extld="+compilerEnvLookup(defaultcc, goos, goarch))
+		link = append(link, "-L="+pathf("%s/pkg/obj/go-bootstrap/%s_%s", goroot, goos, goarch))
 		link = append(link, "-o", pathf("%s/%s%s", tooldir, elem, exe))
 		targ = len(link) - 1
 	}
@@ -934,7 +945,7 @@ func runInstall(pkg string, ch chan struct{}) {
 // packagefile returns the path to a compiled .a file for the given package
 // path. Paths may need to be resolved with resolveVendor first.
 func packagefile(pkg string) string {
-	return pathf("%s/pkg/%s_%s/%s.a", goroot, goos, goarch, pkg)
+	return pathf("%s/pkg/obj/go-bootstrap/%s_%s/%s.a", goroot, goos, goarch, pkg)
 }
 
 // unixOS is the set of GOOS values matched by the "unix" build tag.