diff --git a/gotools/ChangeLog b/gotools/ChangeLog
index fbe4d74d5006837fb2fbd6a2ecb4899508f0d678..8eceb18e518e5762e0faf84c10730475f3abbe9e 100644
--- a/gotools/ChangeLog
+++ b/gotools/ChangeLog
@@ -1,3 +1,9 @@
+2015-03-24  Ian Lance Taylor  <iant@google.com>
+
+	PR go/65462
+	* Makefile.am (go_cmd_go_files): Add $(libgodir)/zstdpkglist.go.
+	* Makefile.in: Rebuild.
+
 2015-03-12  Ian Lance Taylor  <iant@google.com>
 
 	* Makefile.am (GOLINK): Add GOCFLAGS.
diff --git a/gotools/Makefile.am b/gotools/Makefile.am
index 9d3ca22346c75cbe85efe79de78467fc33ee49e5..7fb0f75c297150d5bc50f15857f10721d910b652 100644
--- a/gotools/Makefile.am
+++ b/gotools/Makefile.am
@@ -67,7 +67,8 @@ go_cmd_go_files = \
 	$(cmdsrcdir)/go/tool.go \
 	$(cmdsrcdir)/go/vcs.go \
 	$(cmdsrcdir)/go/version.go \
-	$(cmdsrcdir)/go/vet.go
+	$(cmdsrcdir)/go/vet.go \
+	$(libgodir)/zstdpkglist.go
 
 go_cmd_gofmt_files = \
 	$(cmdsrcdir)/gofmt/doc.go \
diff --git a/gotools/Makefile.in b/gotools/Makefile.in
index c370157da477b29b610dc8b7154bbddfc7acf9ce..d08a597a85c17f55483b813281018e48af3c2dc8 100644
--- a/gotools/Makefile.in
+++ b/gotools/Makefile.in
@@ -257,7 +257,8 @@ go_cmd_go_files = \
 	$(cmdsrcdir)/go/tool.go \
 	$(cmdsrcdir)/go/vcs.go \
 	$(cmdsrcdir)/go/version.go \
-	$(cmdsrcdir)/go/vet.go
+	$(cmdsrcdir)/go/vet.go \
+	$(libgodir)/zstdpkglist.go
 
 go_cmd_gofmt_files = \
 	$(cmdsrcdir)/gofmt/doc.go \
@@ -518,8 +519,8 @@ distclean-generic:
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-@NATIVE_FALSE@install-exec-local:
 @NATIVE_FALSE@uninstall-local:
+@NATIVE_FALSE@install-exec-local:
 clean: clean-am
 
 clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \
diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index f6f967e22a676b18c3559ca72e40125461192821..e71a6fa0369090a4a394f6f7e86b932c7d95e8f6 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -978,6 +978,20 @@ s-version: Makefile
 	$(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
 	$(STAMP) $@
 
+noinst_DATA = zstdpkglist.go
+
+# Generate the list of go std packages that were included in libgo
+zstdpkglist.go: s-zstdpkglist; @true
+s-zstdpkglist: Makefile
+	rm -f zstdpkglist.go.tmp
+	echo 'package main' > zstdpkglist.go.tmp
+	echo "" >> zstdpkglist.go.tmp
+	echo 'var stdpkg = map[string]bool{' >> zstdpkglist.go.tmp
+	echo $(libgo_go_objs) 'unsafe.lo' | sed 's/\.lo /\": true,\n/g' | sed 's/\.lo/\": true,/' | sed 's/-go//' | grep -v _c | sed 's/^/\t\"/' | sort | uniq >> zstdpkglist.go.tmp
+	echo '}' >> zstdpkglist.go.tmp
+	$(SHELL) $(srcdir)/mvifdiff.sh zstdpkglist.go.tmp zstdpkglist.go
+	$(STAMP) $@
+
 go_sort_files = \
 	go/sort/search.go \
 	go/sort/sort.go
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index c908869cd61f074430dd3f2875ada7c46c36e789..88b83adf47738d0fff31ea9641daee8550f6c8b7 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -269,23 +269,24 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
-DATA = $(toolexeclibgo_DATA) $(toolexeclibgoarchive_DATA) \
-	$(toolexeclibgocompress_DATA) $(toolexeclibgocontainer_DATA) \
-	$(toolexeclibgocrypto_DATA) $(toolexeclibgocryptox509_DATA) \
-	$(toolexeclibgodatabase_DATA) $(toolexeclibgodatabasesql_DATA) \
-	$(toolexeclibgodebug_DATA) $(toolexeclibgoencoding_DATA) \
-	$(toolexeclibgoexp_DATA) $(toolexeclibgogo_DATA) \
-	$(toolexeclibgohash_DATA) $(toolexeclibgohtml_DATA) \
-	$(toolexeclibgoimage_DATA) $(toolexeclibgoimagecolor_DATA) \
-	$(toolexeclibgoindex_DATA) $(toolexeclibgoio_DATA) \
-	$(toolexeclibgolog_DATA) $(toolexeclibgomath_DATA) \
-	$(toolexeclibgomime_DATA) $(toolexeclibgonet_DATA) \
-	$(toolexeclibgonethttp_DATA) $(toolexeclibgonetrpc_DATA) \
-	$(toolexeclibgoold_DATA) $(toolexeclibgoos_DATA) \
-	$(toolexeclibgopath_DATA) $(toolexeclibgoregexp_DATA) \
-	$(toolexeclibgoruntime_DATA) $(toolexeclibgosync_DATA) \
-	$(toolexeclibgotesting_DATA) $(toolexeclibgotext_DATA) \
-	$(toolexeclibgotexttemplate_DATA) $(toolexeclibgounicode_DATA)
+DATA = $(noinst_DATA) $(toolexeclibgo_DATA) \
+	$(toolexeclibgoarchive_DATA) $(toolexeclibgocompress_DATA) \
+	$(toolexeclibgocontainer_DATA) $(toolexeclibgocrypto_DATA) \
+	$(toolexeclibgocryptox509_DATA) $(toolexeclibgodatabase_DATA) \
+	$(toolexeclibgodatabasesql_DATA) $(toolexeclibgodebug_DATA) \
+	$(toolexeclibgoencoding_DATA) $(toolexeclibgoexp_DATA) \
+	$(toolexeclibgogo_DATA) $(toolexeclibgohash_DATA) \
+	$(toolexeclibgohtml_DATA) $(toolexeclibgoimage_DATA) \
+	$(toolexeclibgoimagecolor_DATA) $(toolexeclibgoindex_DATA) \
+	$(toolexeclibgoio_DATA) $(toolexeclibgolog_DATA) \
+	$(toolexeclibgomath_DATA) $(toolexeclibgomime_DATA) \
+	$(toolexeclibgonet_DATA) $(toolexeclibgonethttp_DATA) \
+	$(toolexeclibgonetrpc_DATA) $(toolexeclibgoold_DATA) \
+	$(toolexeclibgoos_DATA) $(toolexeclibgopath_DATA) \
+	$(toolexeclibgoregexp_DATA) $(toolexeclibgoruntime_DATA) \
+	$(toolexeclibgosync_DATA) $(toolexeclibgotesting_DATA) \
+	$(toolexeclibgotext_DATA) $(toolexeclibgotexttemplate_DATA) \
+	$(toolexeclibgounicode_DATA)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -1154,6 +1155,7 @@ go_runtime_files = \
 	go/runtime/softfloat64.go \
 	version.go
 
+noinst_DATA = zstdpkglist.go
 go_sort_files = \
 	go/sort/search.go \
 	go/sort/sort.go
@@ -4394,6 +4396,18 @@ s-version: Makefile
 	$(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
 	$(STAMP) $@
 
+# Generate the list of go std packages that were included in libgo
+zstdpkglist.go: s-zstdpkglist; @true
+s-zstdpkglist: Makefile
+	rm -f zstdpkglist.go.tmp
+	echo 'package main' > zstdpkglist.go.tmp
+	echo "" >> zstdpkglist.go.tmp
+	echo 'var stdpkg = map[string]bool{' >> zstdpkglist.go.tmp
+	echo $(libgo_go_objs) 'unsafe.lo' | sed 's/\.lo /\": true,\n/g' | sed 's/\.lo/\": true,/' | sed 's/-go//' | grep -v _c | sed 's/^/\t\"/' | sort | uniq >> zstdpkglist.go.tmp
+	echo '}' >> zstdpkglist.go.tmp
+	$(SHELL) $(srcdir)/mvifdiff.sh zstdpkglist.go.tmp zstdpkglist.go
+	$(STAMP) $@
+
 libcalls.go: s-libcalls; @true
 s-libcalls: libcalls-list go/syscall/mksyscall.awk $(go_base_syscall_files)
 	rm -f libcalls.go.tmp
diff --git a/libgo/go/cmd/go/build.go b/libgo/go/cmd/go/build.go
index 95b9804d3de3d1dbffbf5006cfc38a5f12409f2d..22d37f3fa3b3fe2e2fc56254d88ed4d2f9c9cfc9 100644
--- a/libgo/go/cmd/go/build.go
+++ b/libgo/go/cmd/go/build.go
@@ -132,7 +132,8 @@ var buildLdflags []string    // -ldflags flag
 var buildGccgoflags []string // -gccgoflags flag
 var buildRace bool           // -race flag
 
-var reqPkgSrc bool // req src for Imports
+// Require the source for go std packages
+var reqStdPkgSrc bool
 var buildContext = build.Default
 var buildToolchain toolchain = noToolchain{}
 
@@ -187,9 +188,9 @@ func addBuildFlags(cmd *Command) {
 	cmd.Flag.BoolVar(&buildRace, "race", false, "")
 	switch build.Default.Compiler {
 	case "gc":
-		reqPkgSrc = true
+		reqStdPkgSrc = true
 	case "gccgo":
-		reqPkgSrc = false
+		reqStdPkgSrc = false
 	}
 }
 
@@ -579,7 +580,7 @@ func (b *builder) action(mode buildMode, depMode buildMode, p *Package) *action
 	// are writing is not the cgo we need to use.
 
 	if goos == runtime.GOOS && goarch == runtime.GOARCH && !buildRace {
-		if reqPkgSrc {
+		if reqStdPkgSrc {
 			if len(p.CgoFiles) > 0 || p.Standard && p.ImportPath == "runtime/cgo" {
 				var stk importStack
 				p1 := loadPackage("cmd/cgo", &stk)
diff --git a/libgo/go/cmd/go/pkg.go b/libgo/go/cmd/go/pkg.go
index 621cb4b6083cd76e57a92cf211c318d43be3eb9c..62f6b4adf57222ad50858a464079168bf523d202 100644
--- a/libgo/go/cmd/go/pkg.go
+++ b/libgo/go/cmd/go/pkg.go
@@ -112,7 +112,11 @@ func (p *Package) copyBuild(pp *build.Package) {
 	p.ConflictDir = pp.ConflictDir
 	// TODO? Target
 	p.Goroot = pp.Goroot
-	p.Standard = p.Goroot && p.ImportPath != "" && !strings.Contains(p.ImportPath, ".")
+	if buildContext.Compiler == "gccgo" {
+		p.Standard = stdpkg[p.ImportPath]
+	} else {
+		p.Standard = p.Goroot && p.ImportPath != "" && !strings.Contains(p.ImportPath, ".")
+	}
 	p.GoFiles = pp.GoFiles
 	p.CgoFiles = pp.CgoFiles
 	p.IgnoredGoFiles = pp.IgnoredGoFiles
@@ -582,7 +586,7 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
 			continue
 		}
 		p1 := loadImport(path, p.Dir, stk, p.build.ImportPos[path])
-		if !reqPkgSrc && p1.Root == "" {
+		if !reqStdPkgSrc && p1.Standard {
 			continue
 		}
 		if p1.local {
diff --git a/libgo/go/cmd/go/test.go b/libgo/go/cmd/go/test.go
index 28b46ff52bffd34959dfcba05f96968e8b2dbde0..cc0a9acf45dfbcf7b4d92c56298afe2e15fdb1bc 100644
--- a/libgo/go/cmd/go/test.go
+++ b/libgo/go/cmd/go/test.go
@@ -384,17 +384,18 @@ func runTest(cmd *Command, args []string) {
 		delete(deps, "unsafe")
 
 		all := []string{}
-		if reqPkgSrc {
-			for path := range deps {
-				if !build.IsLocalImport(path) {
-					all = append(all, path)
-				}
+		for path := range deps {
+			if !build.IsLocalImport(path) {
+				all = append(all, path)
 			}
 		}
 		sort.Strings(all)
 
 		a := &action{}
 		for _, p := range packagesForBuild(all) {
+			if !reqStdPkgSrc && p.Standard {
+				continue
+			}
 			a.deps = append(a.deps, b.action(modeInstall, modeInstall, p))
 		}
 		b.do(a)
@@ -563,7 +564,7 @@ func (b *builder) test(p *Package) (buildAction, runAction, printAction *action,
 	stk.push(p.ImportPath + " (test)")
 	for _, path := range p.TestImports {
 		p1 := loadImport(path, p.Dir, &stk, p.build.TestImportPos[path])
-		if !reqPkgSrc && p1.Root == "" {
+		if !reqStdPkgSrc && p1.Standard {
 			continue
 		}
 		if p1.Error != nil {
@@ -591,7 +592,7 @@ func (b *builder) test(p *Package) (buildAction, runAction, printAction *action,
 			continue
 		}
 		p1 := loadImport(path, p.Dir, &stk, p.build.XTestImportPos[path])
-		if !reqPkgSrc && p1.Root == "" {
+		if !reqStdPkgSrc && p1.Standard {
 			continue
 		}
 		if p1.Error != nil {
@@ -722,7 +723,7 @@ func (b *builder) test(p *Package) (buildAction, runAction, printAction *action,
 			pmain.imports = append(pmain.imports, ptest)
 		} else {
 			p1 := loadImport(dep, "", &stk, nil)
-			if !reqPkgSrc && p1.Root == "" {
+			if !reqStdPkgSrc && p1.Standard {
 				continue
 			}
 			if p1.Error != nil {