diff --git a/.gitignore b/.gitignore
index 0fd85b8..91b7123 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1 @@
-SOURCES/go1.2.1.src.tar.gz
-SOURCES/golang-19087:a15f344a9efa-xattrs.tar
+SOURCES/go1.3.3.src.tar.gz
diff --git a/.golang.metadata b/.golang.metadata
index a213e59..2383d3b 100644
--- a/.golang.metadata
+++ b/.golang.metadata
@@ -1,2 +1 @@
-6a4b9991eddd8039438438d6aa25126ab7e07f2f SOURCES/go1.2.1.src.tar.gz
-7c4f18e5cb43a251ad456052ae27c9ee57d1fe54 SOURCES/golang-19087:a15f344a9efa-xattrs.tar
+b54b7deb7b7afe9f5d9a3f5dd830c7dede35393a SOURCES/go1.3.3.src.tar.gz
diff --git a/SOURCES/go1.3-tar-fix_writing_of_pax_headers.patch b/SOURCES/go1.3-tar-fix_writing_of_pax_headers.patch
new file mode 100644
index 0000000..1c847e7
--- /dev/null
+++ b/SOURCES/go1.3-tar-fix_writing_of_pax_headers.patch
@@ -0,0 +1,110 @@
+# HG changeset patch
+# User Cristian Staretu <unclejacksons@gmail.com>
+# Date 1405555229 -36000
+#      Thu Jul 17 10:00:29 2014 +1000
+# Node ID 1b17b3426e3c281a973d2d7bbf235b936d6a0942
+# Parent  278365dff593f027db6c6b2c0a89262490d6b676
+archive/tar: fix writing of pax headers
+
+"archive/tar: reuse temporary buffer in writeHeader" introduced a
+change which was supposed to help lower the number of allocations from
+512 bytes for every call to writeHeader. This change broke the writing
+of PAX headers.
+
+writeHeader calls writePAXHeader and writePAXHeader calls writeHeader
+again. writeHeader will end up writing the PAX header twice.
+
+example broken header:
+PaxHeaders.4007/NetLock_Arany_=Class_Gold=_Ftanstvny.crt0000000000000000000000000000007112301216634021512 xustar0000000000000000
+PaxHeaders.4007/NetLock_Arany_=Class_Gold=_Ftanstvny.crt0000000000000000000000000000007112301216634021512 xustar0000000000000000
+
+example correct header:
+PaxHeaders.4290/NetLock_Arany_=Class_Gold=_Ftanstvny.crt0000000000000000000000000000007112301216634021516 xustar0000000000000000
+0100644000000000000000000000270412301216634007250 0ustar0000000000000000
+
+This commit adds a dedicated buffer for pax headers to the Writer
+struct. This change increases the size of the struct by 512 bytes, but
+allows tar/writer to avoid allocating 512 bytes for all written
+headers and it avoids allocating 512 more bytes for pax headers.
+
+LGTM=dsymonds
+R=dsymonds, dave, iant
+CC=golang-codereviews
+https://codereview.appspot.com/110480043
+
+Committer: David Symonds <dsymonds@golang.org>
+
+diff -r 278365dff593 -r 1b17b3426e3c src/pkg/archive/tar/writer.go
+--- a/src/pkg/archive/tar/writer.go	Wed Jul 16 16:29:51 2014 -0700
++++ b/src/pkg/archive/tar/writer.go	Thu Jul 17 10:00:29 2014 +1000
+@@ -39,7 +39,8 @@
+ 	closed     bool
+ 	usedBinary bool            // whether the binary numeric field extension was used
+ 	preferPax  bool            // use pax header instead of binary numeric header
+-	hdrBuff    [blockSize]byte // buffer to use in writeHeader
++	hdrBuff    [blockSize]byte // buffer to use in writeHeader when writing a regular header
++	paxHdrBuff [blockSize]byte // buffer to use in writeHeader when writing a pax header
+ }
+ 
+ // NewWriter creates a new Writer writing to w.
+@@ -161,7 +162,17 @@
+ 	// subsecond time resolution, but for now let's just capture
+ 	// too long fields or non ascii characters
+ 
+-	header := tw.hdrBuff[:]
++	var header []byte
++
++	// We need to select which scratch buffer to use carefully,
++	// since this method is called recursively to write PAX headers.
++	// If allowPax is true, this is the non-recursive call, and we will use hdrBuff.
++	// If allowPax is false, we are being called by writePAXHeader, and hdrBuff is
++	// already being used by the non-recursive call, so we must use paxHdrBuff.
++	header = tw.hdrBuff[:]
++	if !allowPax {
++		header = tw.paxHdrBuff[:]
++	}
+ 	copy(header, zeroBlock)
+ 	s := slicer(header)
+ 
+diff -r 278365dff593 -r 1b17b3426e3c src/pkg/archive/tar/writer_test.go
+--- a/src/pkg/archive/tar/writer_test.go	Wed Jul 16 16:29:51 2014 -0700
++++ b/src/pkg/archive/tar/writer_test.go	Thu Jul 17 10:00:29 2014 +1000
+@@ -454,3 +454,38 @@
+ 		t.Fatal("Couldn't recover long name")
+ 	}
+ }
++
++func TestValidTypeflagWithPAXHeader(t *testing.T) {
++	var buffer bytes.Buffer
++	tw := NewWriter(&buffer)
++
++	fileName := strings.Repeat("ab", 100)
++
++	hdr := &Header{
++		Name:     fileName,
++		Size:     4,
++		Typeflag: 0,
++	}
++	if err := tw.WriteHeader(hdr); err != nil {
++		t.Fatalf("Failed to write header: %s", err)
++	}
++	if _, err := tw.Write([]byte("fooo")); err != nil {
++		t.Fatalf("Failed to write the file's data: %s", err)
++	}
++	tw.Close()
++
++	tr := NewReader(&buffer)
++
++	for {
++		header, err := tr.Next()
++		if err == io.EOF {
++			break
++		}
++		if err != nil {
++			t.Fatalf("Failed to read header: %s", err)
++		}
++		if header.Typeflag != 0 {
++			t.Fatalf("Typeflag should've been 0, found %d", header.Typeflag)
++		}
++	}
++}
diff --git a/SOURCES/go1.3-tar_reuse_buffer_readHeader.patch b/SOURCES/go1.3-tar_reuse_buffer_readHeader.patch
new file mode 100644
index 0000000..1c6693c
--- /dev/null
+++ b/SOURCES/go1.3-tar_reuse_buffer_readHeader.patch
@@ -0,0 +1,64 @@
+# HG changeset patch
+# User Cristian Staretu <unclejacksons@gmail.com>
+# Date 1404344479 -36000
+#      Thu Jul 03 09:41:19 2014 +1000
+# Node ID 17404efd6b02d4b3acd17070e3f89de97a145877
+# Parent  837348e418f33fc7a242f56dbe2feff829532526
+archive/tar: reuse temporary buffer in readHeader
+
+A temporary 512 bytes buffer is allocated for every call to
+readHeader. This buffer isn't returned to the caller and it could
+be reused to lower the number of memory allocations.
+
+This CL improves it by using a pool and zeroing out the buffer before
+putting it back into the pool.
+
+benchmark                  old ns/op     new ns/op     delta
+BenchmarkListFiles100k     545249903     538832687     -1.18%
+
+benchmark                  old allocs    new allocs    delta
+BenchmarkListFiles100k     2105167       2005692       -4.73%
+
+benchmark                  old bytes     new bytes     delta
+BenchmarkListFiles100k     105903472     54831527      -48.22%
+
+This improvement is very important if your code has to deal with a lot
+of tarballs which contain a lot of files.
+
+LGTM=dsymonds
+R=golang-codereviews, dave, dsymonds, bradfitz
+CC=golang-codereviews
+https://codereview.appspot.com/108240044
+
+Committer: David Symonds <dsymonds@golang.org>
+
+diff -r 837348e418f3 -r 17404efd6b02 src/pkg/archive/tar/reader.go
+--- a/src/pkg/archive/tar/reader.go	Thu Jul 03 09:40:53 2014 +1000
++++ b/src/pkg/archive/tar/reader.go	Thu Jul 03 09:41:19 2014 +1000
+@@ -29,10 +29,11 @@
+ // The Next method advances to the next file in the archive (including the first),
+ // and then it can be treated as an io.Reader to access the file's data.
+ type Reader struct {
+-	r    io.Reader
+-	err  error
+-	pad  int64          // amount of padding (ignored) after current file entry
+-	curr numBytesReader // reader for current file entry
++	r       io.Reader
++	err     error
++	pad     int64           // amount of padding (ignored) after current file entry
++	curr    numBytesReader  // reader for current file entry
++	hdrBuff [blockSize]byte // buffer to use in readHeader
+ }
+ 
+ // A numBytesReader is an io.Reader with a numBytes method, returning the number
+@@ -426,7 +427,9 @@
+ }
+ 
+ func (tr *Reader) readHeader() *Header {
+-	header := make([]byte, blockSize)
++	header := tr.hdrBuff[:]
++	copy(header, zeroBlock)
++
+ 	if _, tr.err = io.ReadFull(tr.r, header); tr.err != nil {
+ 		return nil
+ 	}
diff --git a/SOURCES/go1.3-tar_reuse_buffer_writeHeader.patch b/SOURCES/go1.3-tar_reuse_buffer_writeHeader.patch
new file mode 100644
index 0000000..6cd8969
--- /dev/null
+++ b/SOURCES/go1.3-tar_reuse_buffer_writeHeader.patch
@@ -0,0 +1,56 @@
+# HG changeset patch
+# User Cristian Staretu <unclejacksons@gmail.com>
+# Date 1404344453 -36000
+#      Thu Jul 03 09:40:53 2014 +1000
+# Node ID 837348e418f33fc7a242f56dbe2feff829532526
+# Parent  c5f72a685e256457a0872f6587e2bb9500eac7c4
+archive/tar: reuse temporary buffer in writeHeader
+
+A temporary 512 bytes buffer is allocated for every call to
+writeHeader. This buffer could be reused the lower the number
+of memory allocations.
+
+benchmark                   old ns/op     new ns/op     delta
+BenchmarkWriteFiles100k     634622051     583810847     -8.01%
+
+benchmark                   old allocs     new allocs     delta
+BenchmarkWriteFiles100k     2701920        2602621        -3.68%
+
+benchmark                   old bytes     new bytes     delta
+BenchmarkWriteFiles100k     115383884     64349922      -44.23%
+
+This change is very important if your code has to write a lot of
+tarballs with a lot of files.
+
+LGTM=dsymonds
+R=golang-codereviews, dave, dsymonds
+CC=golang-codereviews
+https://codereview.appspot.com/107440043
+
+Committer: David Symonds <dsymonds@golang.org>
+
+diff -r c5f72a685e25 -r 837348e418f3 src/pkg/archive/tar/writer.go
+--- a/src/pkg/archive/tar/writer.go	Wed Jul 02 15:28:57 2014 -0700
++++ b/src/pkg/archive/tar/writer.go	Thu Jul 03 09:40:53 2014 +1000
+@@ -37,8 +37,9 @@
+ 	nb         int64 // number of unwritten bytes for current file entry
+ 	pad        int64 // amount of padding to write after current file entry
+ 	closed     bool
+-	usedBinary bool // whether the binary numeric field extension was used
+-	preferPax  bool // use pax header instead of binary numeric header
++	usedBinary bool            // whether the binary numeric field extension was used
++	preferPax  bool            // use pax header instead of binary numeric header
++	hdrBuff    [blockSize]byte // buffer to use in writeHeader
+ }
+ 
+ // NewWriter creates a new Writer writing to w.
+@@ -160,7 +161,8 @@
+ 	// subsecond time resolution, but for now let's just capture
+ 	// too long fields or non ascii characters
+ 
+-	header := make([]byte, blockSize)
++	header := tw.hdrBuff[:]
++	copy(header, zeroBlock)
+ 	s := slicer(header)
+ 
+ 	// keep a reference to the filename to allow to overwrite it later if we detect that we can use ustar longnames instead of pax
diff --git a/SOURCES/golang-1.2-archive_tar-xattr.patch b/SOURCES/golang-1.2-archive_tar-xattr.patch
deleted file mode 100644
index 10c8f3d..0000000
--- a/SOURCES/golang-1.2-archive_tar-xattr.patch
+++ /dev/null
@@ -1,197 +0,0 @@
-# HG changeset patch
-# User Alexander Larsson <alexander.larsson@gmail.com>
-# Date 1392282510 -39600
-# Node ID a15f344a9efa35ef168c8feaa92a15a1cdc93db5
-# Parent  1a32fe60e0798d82bbff6c945001c7f0ba8de5ea
-archive/tar: support extended attributes
-
-This adds support for archives with the SCHILY.xattr field in the
-pax header. This is what gnu tar and star generate.
-Fixes issue 7154.
-
-LGTM=dsymonds
-R=golang-codereviews, gobot, dsymonds
-CC=golang-codereviews
-https://codereview.appspot.com/54570043
-
-Committer: David Symonds <dsymonds@golang.org>
-
-diff -r 1a32fe60e079 -r a15f344a9efa src/pkg/archive/tar/common.go
---- a/src/pkg/archive/tar/common.go	Thu Feb 13 03:09:03 2014 -0500
-+++ b/src/pkg/archive/tar/common.go	Thu Feb 13 20:08:30 2014 +1100
-@@ -57,6 +57,7 @@
- 	Devminor   int64     // minor number of character or block device
- 	AccessTime time.Time // access time
- 	ChangeTime time.Time // status change time
-+	Xattrs     map[string]string
- }
- 
- // File name constants from the tar spec.
-@@ -189,6 +190,7 @@
- 	paxSize     = "size"
- 	paxUid      = "uid"
- 	paxUname    = "uname"
-+	paxXattr    = "SCHILY.xattr."
- 	paxNone     = ""
- )
- 
-diff -r 1a32fe60e079 -r a15f344a9efa src/pkg/archive/tar/reader.go
---- a/src/pkg/archive/tar/reader.go	Thu Feb 13 03:09:03 2014 -0500
-+++ b/src/pkg/archive/tar/reader.go	Thu Feb 13 20:08:30 2014 +1100
-@@ -139,8 +139,14 @@
- 				return err
- 			}
- 			hdr.Size = int64(size)
-+		default:
-+			if strings.HasPrefix(k, paxXattr) {
-+				if hdr.Xattrs == nil {
-+					hdr.Xattrs = make(map[string]string)
-+				}
-+				hdr.Xattrs[k[len(paxXattr):]] = v
-+			}
- 		}
--
- 	}
- 	return nil
- }
-diff -r 1a32fe60e079 -r a15f344a9efa src/pkg/archive/tar/reader_test.go
---- a/src/pkg/archive/tar/reader_test.go	Thu Feb 13 03:09:03 2014 -0500
-+++ b/src/pkg/archive/tar/reader_test.go	Thu Feb 13 20:08:30 2014 +1100
-@@ -161,6 +161,46 @@
- 			},
- 		},
- 	},
-+	{
-+		file: "testdata/xattrs.tar",
-+		headers: []*Header{
-+			{
-+				Name:       "small.txt",
-+				Mode:       0644,
-+				Uid:        1000,
-+				Gid:        10,
-+				Size:       5,
-+				ModTime:    time.Unix(1386065770, 448252320),
-+				Typeflag:   '0',
-+				Uname:      "alex",
-+				Gname:      "wheel",
-+				AccessTime: time.Unix(1389782991, 419875220),
-+				ChangeTime: time.Unix(1389782956, 794414986),
-+				Xattrs: map[string]string{
-+					"user.key":  "value",
-+					"user.key2": "value2",
-+					// Interestingly, selinux encodes the terminating null inside the xattr
-+					"security.selinux": "unconfined_u:object_r:default_t:s0\x00",
-+				},
-+			},
-+			{
-+				Name:       "small2.txt",
-+				Mode:       0644,
-+				Uid:        1000,
-+				Gid:        10,
-+				Size:       11,
-+				ModTime:    time.Unix(1386065770, 449252304),
-+				Typeflag:   '0',
-+				Uname:      "alex",
-+				Gname:      "wheel",
-+				AccessTime: time.Unix(1389782991, 419875220),
-+				ChangeTime: time.Unix(1386065770, 449252304),
-+				Xattrs: map[string]string{
-+					"security.selinux": "unconfined_u:object_r:default_t:s0\x00",
-+				},
-+			},
-+		},
-+	},
- }
- 
- func TestReader(t *testing.T) {
-@@ -180,7 +220,7 @@
- 				f.Close()
- 				continue testLoop
- 			}
--			if *hdr != *header {
-+			if !reflect.DeepEqual(*hdr, *header) {
- 				t.Errorf("test %d, entry %d: Incorrect header:\nhave %+v\nwant %+v",
- 					i, j, *hdr, *header)
- 			}
-@@ -253,7 +293,7 @@
- 		}
- 
- 		// check the header
--		if *hdr != *headers[nread] {
-+		if !reflect.DeepEqual(*hdr, *headers[nread]) {
- 			t.Errorf("Incorrect header:\nhave %+v\nwant %+v",
- 				*hdr, headers[nread])
- 		}
-diff -r 1a32fe60e079 -r a15f344a9efa src/pkg/archive/tar/writer.go
---- a/src/pkg/archive/tar/writer.go	Thu Feb 13 03:09:03 2014 -0500
-+++ b/src/pkg/archive/tar/writer.go	Thu Feb 13 20:08:30 2014 +1100
-@@ -236,6 +236,12 @@
- 		return tw.err
- 	}
- 
-+	if allowPax {
-+		for k, v := range hdr.Xattrs {
-+			paxHeaders[paxXattr+k] = v
-+		}
-+	}
-+
- 	if len(paxHeaders) > 0 {
- 		if !allowPax {
- 			return errInvalidHeader
-diff -r 1a32fe60e079 -r a15f344a9efa src/pkg/archive/tar/writer_test.go
---- a/src/pkg/archive/tar/writer_test.go	Thu Feb 13 03:09:03 2014 -0500
-+++ b/src/pkg/archive/tar/writer_test.go	Thu Feb 13 20:08:30 2014 +1100
-@@ -10,6 +10,7 @@
- 	"io"
- 	"io/ioutil"
- 	"os"
-+	"reflect"
- 	"strings"
- 	"testing"
- 	"testing/iotest"
-@@ -338,6 +339,45 @@
- 	}
- }
- 
-+func TestPaxXattrs(t *testing.T) {
-+	xattrs := map[string]string{
-+		"user.key": "value",
-+	}
-+
-+	// Create an archive with an xattr
-+	fileinfo, err := os.Stat("testdata/small.txt")
-+	if err != nil {
-+		t.Fatal(err)
-+	}
-+	hdr, err := FileInfoHeader(fileinfo, "")
-+	if err != nil {
-+		t.Fatalf("os.Stat: %v", err)
-+	}
-+	contents := "Kilts"
-+	hdr.Xattrs = xattrs
-+	var buf bytes.Buffer
-+	writer := NewWriter(&buf)
-+	if err := writer.WriteHeader(hdr); err != nil {
-+		t.Fatal(err)
-+	}
-+	if _, err = writer.Write([]byte(contents)); err != nil {
-+		t.Fatal(err)
-+	}
-+	if err := writer.Close(); err != nil {
-+		t.Fatal(err)
-+	}
-+	// Test that we can get the xattrs back out of the archive.
-+	reader := NewReader(&buf)
-+	hdr, err = reader.Next()
-+	if err != nil {
-+		t.Fatal(err)
-+	}
-+	if !reflect.DeepEqual(hdr.Xattrs, xattrs) {
-+		t.Fatalf("xattrs did not survive round trip: got %+v, want %+v",
-+			hdr.Xattrs, xattrs)
-+	}
-+}
-+
- func TestPAXHeader(t *testing.T) {
- 	medName := strings.Repeat("CD", 50)
- 	longName := strings.Repeat("AB", 100)
diff --git a/SOURCES/golang-1.2-remove-ECC-p224.patch b/SOURCES/golang-1.2-remove-ECC-p224.patch
index d31b400..1b9e021 100644
--- a/SOURCES/golang-1.2-remove-ECC-p224.patch
+++ b/SOURCES/golang-1.2-remove-ECC-p224.patch
@@ -1,7 +1,8 @@
-diff -r 87dea3f5ebe7 api/go1.txt
---- a/api/go1.txt	Fri Nov 29 08:32:31 2013 +1100
-+++ b/api/go1.txt	Fri Dec 06 13:31:29 2013 -0500
-@@ -412,7 +412,6 @@
+Index: go/api/go1.txt
+===================================================================
+--- go.orig/api/go1.txt
++++ go/api/go1.txt
+@@ -412,7 +412,6 @@ pkg crypto/ecdsa, type PublicKey struct,
  pkg crypto/ecdsa, type PublicKey struct, embedded elliptic.Curve
  pkg crypto/elliptic, func GenerateKey(Curve, io.Reader) ([]uint8, *big.Int, *big.Int, error)
  pkg crypto/elliptic, func Marshal(Curve, *big.Int, *big.Int) []uint8
@@ -9,10 +10,11 @@ diff -r 87dea3f5ebe7 api/go1.txt
  pkg crypto/elliptic, func P256() Curve
  pkg crypto/elliptic, func P384() Curve
  pkg crypto/elliptic, func P521() Curve
-diff -r 87dea3f5ebe7 src/pkg/crypto/ecdsa/ecdsa_test.go
---- a/src/pkg/crypto/ecdsa/ecdsa_test.go	Fri Nov 29 08:32:31 2013 +1100
-+++ b/src/pkg/crypto/ecdsa/ecdsa_test.go	Fri Dec 06 13:31:29 2013 -0500
-@@ -33,7 +33,6 @@
+Index: go/src/pkg/crypto/ecdsa/ecdsa_test.go
+===================================================================
+--- go.orig/src/pkg/crypto/ecdsa/ecdsa_test.go
++++ go/src/pkg/crypto/ecdsa/ecdsa_test.go
+@@ -33,7 +33,6 @@ func testKeyGeneration(t *testing.T, c e
  }
  
  func TestKeyGeneration(t *testing.T) {
@@ -20,7 +22,7 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/ecdsa/ecdsa_test.go
  	if testing.Short() {
  		return
  	}
-@@ -63,7 +62,6 @@
+@@ -63,7 +62,6 @@ func testSignAndVerify(t *testing.T, c e
  }
  
  func TestSignAndVerify(t *testing.T) {
@@ -28,7 +30,7 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/ecdsa/ecdsa_test.go
  	if testing.Short() {
  		return
  	}
-@@ -129,8 +127,6 @@
+@@ -129,8 +127,6 @@ func TestVectors(t *testing.T) {
  			parts := strings.SplitN(line, ",", 2)
  
  			switch parts[0] {
@@ -37,9 +39,10 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/ecdsa/ecdsa_test.go
  			case "P-256":
  				pub.Curve = elliptic.P256()
  			case "P-384":
-diff -r 87dea3f5ebe7 src/pkg/crypto/elliptic/bottombits.go
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/src/pkg/crypto/elliptic/bottombits.go	Fri Dec 06 13:31:29 2013 -0500
+Index: go/src/pkg/crypto/elliptic/bottombits.go
+===================================================================
+--- /dev/null
++++ go/src/pkg/crypto/elliptic/bottombits.go
 @@ -0,0 +1,14 @@
 +
 +// Copyright 2012 The Go Authors.  All rights reserved.
@@ -55,10 +58,11 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/elliptic/bottombits.go
 +const two31m3 = 1<<31 - 1<<3
 +const two31m15m3 = 1<<31 - 1<<15 - 1<<3
 +
-diff -r 87dea3f5ebe7 src/pkg/crypto/elliptic/elliptic.go
---- a/src/pkg/crypto/elliptic/elliptic.go	Fri Nov 29 08:32:31 2013 +1100
-+++ b/src/pkg/crypto/elliptic/elliptic.go	Fri Dec 06 13:31:29 2013 -0500
-@@ -326,7 +326,6 @@
+Index: go/src/pkg/crypto/elliptic/elliptic.go
+===================================================================
+--- go.orig/src/pkg/crypto/elliptic/elliptic.go
++++ go/src/pkg/crypto/elliptic/elliptic.go
+@@ -326,7 +326,6 @@ var p384 *CurveParams
  var p521 *CurveParams
  
  func initAll() {
@@ -66,25 +70,27 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/elliptic/elliptic.go
  	initP256()
  	initP384()
  	initP521()
-diff -r 87dea3f5ebe7 src/pkg/crypto/elliptic/elliptic_test.go
---- a/src/pkg/crypto/elliptic/elliptic_test.go	Fri Nov 29 08:32:31 2013 +1100
-+++ b/src/pkg/crypto/elliptic/elliptic_test.go	Fri Dec 06 13:31:29 2013 -0500
+Index: go/src/pkg/crypto/elliptic/elliptic_test.go
+===================================================================
+--- go.orig/src/pkg/crypto/elliptic/elliptic_test.go
++++ go/src/pkg/crypto/elliptic/elliptic_test.go
 @@ -1,3 +1,5 @@
 +// +build ignore
 +
  // Copyright 2010 The Go Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
-diff -r 87dea3f5ebe7 src/pkg/crypto/elliptic/p224.go
---- a/src/pkg/crypto/elliptic/p224.go	Fri Nov 29 08:32:31 2013 +1100
-+++ b/src/pkg/crypto/elliptic/p224.go	Fri Dec 06 13:31:29 2013 -0500
+Index: go/src/pkg/crypto/elliptic/p224.go
+===================================================================
+--- go.orig/src/pkg/crypto/elliptic/p224.go
++++ go/src/pkg/crypto/elliptic/p224.go
 @@ -1,3 +1,5 @@
 +// +build ignore
 +
  // Copyright 2012 The Go Authors.  All rights reserved.
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
-@@ -183,10 +185,6 @@
+@@ -183,10 +185,6 @@ func p224Add(out, a, b *p224FieldElement
  	}
  }
  
@@ -95,7 +101,7 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/elliptic/p224.go
  // p224ZeroModP31 is 0 mod p where bit 31 is set in all limbs so that we can
  // subtract smaller amounts without underflow. See the section "Subtraction" in
  // [1] for reasoning.
-@@ -215,9 +213,6 @@
+@@ -215,9 +213,6 @@ const two63m35m19 = 1<<63 - 1<<35 - 1<<1
  // "Subtraction" in [1] for why.
  var p224ZeroModP63 = [8]uint64{two63p35, two63m35, two63m35, two63m35, two63m35m19, two63m35, two63m35, two63m35}
  
@@ -105,19 +111,21 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/elliptic/p224.go
  // p224Mul computes *out = a*b
  //
  // a[i] < 2**29, b[i] < 2**30 (or vice versa)
-diff -r 87dea3f5ebe7 src/pkg/crypto/elliptic/p224_test.go
---- a/src/pkg/crypto/elliptic/p224_test.go	Fri Nov 29 08:32:31 2013 +1100
-+++ b/src/pkg/crypto/elliptic/p224_test.go	Fri Dec 06 13:31:29 2013 -0500
+Index: go/src/pkg/crypto/elliptic/p224_test.go
+===================================================================
+--- go.orig/src/pkg/crypto/elliptic/p224_test.go
++++ go/src/pkg/crypto/elliptic/p224_test.go
 @@ -1,3 +1,5 @@
 +// +build ignore
 +
  // Copyright 2012 The Go Authors.  All rights reserved.
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
-diff -r 87dea3f5ebe7 src/pkg/crypto/x509/x509.go
---- a/src/pkg/crypto/x509/x509.go	Fri Nov 29 08:32:31 2013 +1100
-+++ b/src/pkg/crypto/x509/x509.go	Fri Dec 06 13:31:29 2013 -0500
-@@ -305,9 +305,6 @@
+Index: go/src/pkg/crypto/x509/x509.go
+===================================================================
+--- go.orig/src/pkg/crypto/x509/x509.go
++++ go/src/pkg/crypto/x509/x509.go
+@@ -306,9 +306,6 @@ func getPublicKeyAlgorithmFromOID(oid as
  
  // RFC 5480, 2.1.1.1. Named Curve
  //
@@ -127,7 +135,7 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/x509/x509.go
  // secp256r1 OBJECT IDENTIFIER ::= {
  //   iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3)
  //   prime(1) 7 }
-@@ -320,7 +317,6 @@
+@@ -321,7 +318,6 @@ func getPublicKeyAlgorithmFromOID(oid as
  //
  // NB: secp256r1 is equivalent to prime256v1
  var (
@@ -135,7 +143,7 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/x509/x509.go
  	oidNamedCurveP256 = asn1.ObjectIdentifier{1, 2, 840, 10045, 3, 1, 7}
  	oidNamedCurveP384 = asn1.ObjectIdentifier{1, 3, 132, 0, 34}
  	oidNamedCurveP521 = asn1.ObjectIdentifier{1, 3, 132, 0, 35}
-@@ -328,8 +324,6 @@
+@@ -329,8 +325,6 @@ var (
  
  func namedCurveFromOID(oid asn1.ObjectIdentifier) elliptic.Curve {
  	switch {
@@ -144,7 +152,7 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/x509/x509.go
  	case oid.Equal(oidNamedCurveP256):
  		return elliptic.P256()
  	case oid.Equal(oidNamedCurveP384):
-@@ -342,8 +336,6 @@
+@@ -343,8 +337,6 @@ func namedCurveFromOID(oid asn1.ObjectId
  
  func oidFromNamedCurve(curve elliptic.Curve) (asn1.ObjectIdentifier, bool) {
  	switch curve {
@@ -153,12 +161,12 @@ diff -r 87dea3f5ebe7 src/pkg/crypto/x509/x509.go
  	case elliptic.P256():
  		return oidNamedCurveP256, true
  	case elliptic.P384():
-@@ -1373,7 +1365,7 @@
- 		hashFunc = crypto.SHA1
- 	case *ecdsa.PrivateKey:
+@@ -1371,7 +1363,7 @@ func signingParamsForPrivateKey(priv int
+ 		pubType = ECDSA
+ 
  		switch priv.Curve {
 -		case elliptic.P224(), elliptic.P256():
 +		case elliptic.P256():
  			hashFunc = crypto.SHA256
- 			signatureAlgorithm.Algorithm = oidSignatureECDSAWithSHA256
+ 			sigAlgo.Algorithm = oidSignatureECDSAWithSHA256
  		case elliptic.P384():
diff --git a/SOURCES/golang-1.2-verbose-build.patch b/SOURCES/golang-1.2-verbose-build.patch
index d6e2da4..1698d82 100644
--- a/SOURCES/golang-1.2-verbose-build.patch
+++ b/SOURCES/golang-1.2-verbose-build.patch
@@ -1,27 +1,19 @@
-diff -r 7326da92ff4d src/make.bash
---- a/src/make.bash	Mon Dec 02 09:06:41 2013 +1100
-+++ b/src/make.bash	Tue Dec 03 15:29:09 2013 -0500
-@@ -145,7 +145,7 @@
- if [ "$1" = "--no-clean" ]; then
- 	buildall=""
- fi
--./cmd/dist/dist bootstrap $buildall $GO_DISTFLAGS -v # builds go_bootstrap
-+./cmd/dist/dist bootstrap $buildall $GO_DISTFLAGS -vv # builds go_bootstrap
- # Delay move of dist tool to now, because bootstrap may clear tool directory.
- mv cmd/dist/dist "$GOTOOLDIR"/dist
- "$GOTOOLDIR"/go_bootstrap clean -i std
-@@ -154,12 +154,12 @@
- if [ "$GOHOSTARCH" != "$GOARCH" -o "$GOHOSTOS" != "$GOOS" ]; then
- 	echo "# Building packages and commands for host, $GOHOSTOS/$GOHOSTARCH."
- 	GOOS=$GOHOSTOS GOARCH=$GOHOSTARCH \
+Index: go/src/make.bash
+===================================================================
+--- go.orig/src/make.bash
++++ go/src/make.bash
+@@ -161,12 +161,12 @@ if [ "$GOHOSTARCH" != "$GOARCH" -o "$GOH
+ 	# CC_FOR_TARGET is recorded as the default compiler for the go tool. When building for the host, however,
+ 	# use the host compiler, CC, from `cmd/dist/dist env` instead.
+ 	CC=$CC GOOS=$GOHOSTOS GOARCH=$GOHOSTARCH \
 -		"$GOTOOLDIR"/go_bootstrap install -ccflags "$GO_CCFLAGS" -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std
 +		"$GOTOOLDIR"/go_bootstrap install -ccflags "$GO_CCFLAGS" -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v -x std
  	echo
  fi
  
  echo "# Building packages and commands for $GOOS/$GOARCH."
--"$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -ccflags "$GO_CCFLAGS" -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std
-+"$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -ccflags "$GO_CCFLAGS" -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v -x std
+-CC=$CC_FOR_TARGET "$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -ccflags "$GO_CCFLAGS" -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std
++CC=$CC_FOR_TARGET "$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -ccflags "$GO_CCFLAGS" -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v -x std
  echo
  
  rm -f "$GOTOOLDIR"/go_bootstrap
diff --git a/SOURCES/golang-gdbinit b/SOURCES/golang-gdbinit
index 0a32958..4ef690b 100644
--- a/SOURCES/golang-gdbinit
+++ b/SOURCES/golang-gdbinit
@@ -1,2 +1 @@
 add-auto-load-safe-path /usr/lib/golang/src/pkg/runtime/runtime-gdb.py
-add-auto-load-safe-path /usr/lib64/golang/src/pkg/runtime/runtime-gdb.py
diff --git a/SPECS/golang.spec b/SPECS/golang.spec
index db48d28..7ea5424 100644
--- a/SPECS/golang.spec
+++ b/SPECS/golang.spec
@@ -25,7 +25,8 @@
 
 # let this match the macros in macros.golang
 %global goroot          /usr/lib/%{name}
-%global go_arches       %{ix86} x86_64 %{arm}
+%global gopath          %{_datadir}/gocode
+%global go_arches       x86_64
 %ifarch x86_64
 %global gohostarch  amd64
 %endif
@@ -37,22 +38,18 @@
 %endif
 
 Name:           golang
-Version:        1.2.1
-Release:        3%{?dist}
+Version:        1.3.3
+Release:        2%{?dist}
 Summary:        The Go Programming Language
 
 License:        BSD
 URL:            http://golang.org/
-Source0:        https://go.googlecode.com/files/go%{version}.src.tar.gz
+Source0:        https://storage.googleapis.com/golang/go%{version}.src.tar.gz
 
 # this command moved places
 %if 0%{?fedora} >= 21
 BuildRequires:  /usr/bin/hostname
-Patch210:       golang-f21-hostname.patch
 
-# Patch211 - F21+ has glibc 2.19.90 (2.20 devel)+ which deprecates 
-#            _BSD_SOURCE and _SVID_SOURCE
-Patch211:       golang-1.2-BSD-SVID-SOURCE.patch
 %else
 BuildRequires:  /bin/hostname
 %endif
@@ -62,10 +59,6 @@ Requires:       golang-bin
 Requires:       golang-src
 
 BuildRequires:  emacs
-# xemacs on fedora only
-%if 0%{?fedora}
-BuildRequires:  xemacs xemacs-packages-extra
-%endif
 
 Patch0:         golang-1.2-verbose-build.patch
 
@@ -76,10 +69,12 @@ Patch1:         golang-1.2-remove-ECC-p224.patch
 # http://code.google.com/p/go/issues/detail?id=6522
 Patch2:         ./golang-1.2-skipCpuProfileTest.patch
 
-# Pull in new archive/tar upstream patch to support xattrs for
-# docker-0.8.1
-# https://code.google.com/p/go/source/detail?r=a15f344a9efa
-Patch3:         golang-1.2-archive_tar-xattr.patch
+# these patches can be dropped for go1.4
+# discovered working here https://github.com/dotcloud/docker/pull/6829
+Patch3:         ./go1.3-tar_reuse_buffer_readHeader.patch
+Patch4:         ./go1.3-tar_reuse_buffer_writeHeader.patch
+# https://code.google.com/p/go/source/detail?r=1b17b3426e3c
+Patch5:         ./go1.3-tar-fix_writing_of_pax_headers.patch
 
 # Having documentation separate was broken
 Obsoletes:      %{name}-docs < 1.1-4
@@ -94,10 +89,6 @@ Source100:      golang-gdbinit
 Source101:      golang-prelink.conf
 Source102:      macros.golang
 
-# Patch4 - pull in new archive/tar upstream patch, this file is part
-#          of the upstream merge and is used for test cases.
-Source400:      golang-19087:a15f344a9efa-xattrs.tar
-
 %description
 %{summary}.
 
@@ -134,24 +125,11 @@ BuildArch:     noarch
 %{summary}.
 
 
-# xemacs on fedora only
-%if 0%{?fedora}
-%package -n    xemacs-%{name}
-Summary:       XEmacs add-on package for Go
-Requires:      xemacs(bin) >= %{_xemacs_version}
-Requires:      xemacs-packages-extra
-BuildArch:     noarch
-
-%description -n xemacs-%{name}
-%{summary}.
-%endif
-
 ##
 # the source tree
 %package        src
 Summary:        Golang compiler source tree
 Requires:       go = %{version}-%{release}
-# the binary bits in this tree are for testdata
 BuildArch:      noarch
 %description    src
 %{summary}
@@ -163,10 +141,12 @@ BuildArch:      noarch
 Summary:        Golang compiler tool for linux 386
 Requires:       go = %{version}-%{release}
 Requires:       golang-pkg-linux-386 = %{version}-%{release}
+Requires(post): golang-pkg-linux-386 = %{version}-%{release}
 Provides:       golang-bin = 386
 # We strip the meta dependency, but go does require glibc.
 # This is an odd issue, still looking for a better fix.
 Requires:       glibc
+Requires:       gcc
 Requires(post): %{_sbindir}/update-alternatives
 Requires(postun): %{_sbindir}/update-alternatives
 %description    pkg-bin-linux-386
@@ -178,10 +158,12 @@ Requires(postun): %{_sbindir}/update-alternatives
 Summary:        Golang compiler tool for linux amd64
 Requires:       go = %{version}-%{release}
 Requires:       golang-pkg-linux-amd64 = %{version}-%{release}
+Requires(post): golang-pkg-linux-amd64 = %{version}-%{release}
 Provides:       golang-bin = amd64
 # We strip the meta dependency, but go does require glibc.
 # This is an odd issue, still looking for a better fix.
 Requires:       glibc
+Requires:       gcc
 Requires(post): %{_sbindir}/update-alternatives
 Requires(postun): %{_sbindir}/update-alternatives
 %description    pkg-bin-linux-amd64
@@ -193,10 +175,12 @@ Requires(postun): %{_sbindir}/update-alternatives
 Summary:        Golang compiler tool for linux arm
 Requires:       go = %{version}-%{release}
 Requires:       golang-pkg-linux-arm = %{version}-%{release}
+Requires(post): golang-pkg-linux-arm = %{version}-%{release}
 Provides:       golang-bin = arm
 # We strip the meta dependency, but go does require glibc.
 # This is an odd issue, still looking for a better fix.
 Requires:       glibc
+Requires:       gcc
 Requires(post): %{_sbindir}/update-alternatives
 Requires(postun): %{_sbindir}/update-alternatives
 %description    pkg-bin-linux-arm
@@ -349,11 +333,9 @@ end
 %prep
 %setup -q -n go
 
-cp %SOURCE400 src/pkg/archive/tar/testdata/xattrs.tar
-
 %if 0%{?fedora} >= 21
 %patch210 -p0
-%patch211 -p0
+%patch211 -p1
 %endif
 
 # increase verbosity of build
@@ -365,9 +347,12 @@ cp %SOURCE400 src/pkg/archive/tar/testdata/xattrs.tar
 # skip flaky test
 %patch2 -p1
 
-# new archive/tar implementation from upstream
-# TODO: remove this when updated to go1.3
+# performance for archive/tar
 %patch3 -p1
+%patch4 -p1
+
+# buffer the PAX header
+%patch5 -p1
 
 # create a [dirty] gcc wrapper to allow us to build with our own flags
 # (dirty because it is spoofing 'gcc' since CC value is stored in the go tool)
@@ -402,33 +387,18 @@ pushd src
 			PATH="$(pwd -P)/../zz:$PATH" CC="gcc" \
 				GOOS=${goos} \
 				GOARCH=${goarch} \
-				./make.bash
+				./make.bash --no-clean
 		done
 	done
 popd
 
-# compile for emacs and xemacs
+# compile for emacs
 cd misc
 mv emacs/go-mode-load.el emacs/%{name}-init.el
-# xemacs on fedora only
-%if 0%{?fedora}
-cp -av emacs xemacs
-%{_xemacs_bytecompile} xemacs/go-mode.el
-%endif
 %{_emacs_bytecompile} emacs/go-mode.el
 cd ..
 
 
-%check
-export GOROOT=$(pwd -P)
-export PATH="$PATH":"$GOROOT"/bin
-cd src
-# not using our 'gcc' since the CFLAGS fails crash_cgo_test.go due to unused variables
-# https://code.google.com/p/go/issues/detail?id=6883
-#./run.bash --no-rebuild
-cd ..
-
-
 %install
 rm -rf $RPM_BUILD_ROOT
 
@@ -438,9 +408,40 @@ mkdir -p $RPM_BUILD_ROOT%{goroot}
 
 # install everything into libdir (until symlink problems are fixed)
 # https://code.google.com/p/go/issues/detail?id=5830
-cp -av api bin doc favicon.ico include lib pkg robots.txt src \
+cp -apv api bin doc favicon.ico include lib pkg robots.txt src misc VERSION \
    $RPM_BUILD_ROOT%{goroot}
 
+# bz1099206
+find $RPM_BUILD_ROOT%{goroot}/src -exec touch -r $RPM_BUILD_ROOT%{goroot}/VERSION "{}" \;
+# and level out all the built archives
+touch $RPM_BUILD_ROOT%{goroot}/pkg
+find $RPM_BUILD_ROOT%{goroot}/pkg -exec touch -r $RPM_BUILD_ROOT%{goroot}/pkg "{}" \;
+# generate the spec file ownership of this source tree and packages
+cwd=$(pwd)
+src_list=$cwd/go-src.list
+rm -f $src_list
+touch $src_list
+pushd $RPM_BUILD_ROOT%{goroot}
+	find src/ -type d -printf '%%%dir %{goroot}/%p\n' >> $src_list
+	find src/ ! -type d -printf '%{goroot}/%p\n' >> $src_list
+
+
+	for goos in darwin freebsd linux netbsd openbsd plan9 windows ; do
+		for goarch in 386 amd64 arm ; do
+			if [ "${goarch}" = "arm" ] ; then
+				if [ "${goos}" = "darwin" -o "${goos}" = "windows" -o "${goos}" = "plan9" -o "${goos}" = "openbsd" ] ;then
+					continue
+				fi
+			fi
+			file_list=${cwd}/pkg-${goos}-${goarch}.list
+			rm -f $file_list
+			touch $file_list
+			find pkg/${goos}_${goarch}/ -type d -printf '%%%dir %{goroot}/%p\n' >> $file_list
+			find pkg/${goos}_${goarch}/ ! -type d -printf '%{goroot}/%p\n' >> $file_list
+		done
+	done
+popd
+
 # remove the unnecessary zoneinfo file (Go will always use the system one first)
 rm -rfv $RPM_BUILD_ROOT%{goroot}/lib/time
 
@@ -453,6 +454,12 @@ mkdir -p $RPM_BUILD_ROOT%{goroot}/bin/linux_%{gohostarch}
 mv $RPM_BUILD_ROOT%{goroot}/bin/go $RPM_BUILD_ROOT%{goroot}/bin/linux_%{gohostarch}/go
 mv $RPM_BUILD_ROOT%{goroot}/bin/gofmt $RPM_BUILD_ROOT%{goroot}/bin/linux_%{gohostarch}/gofmt
 
+# ensure these exist and are owned
+mkdir -p $RPM_BUILD_ROOT%{gopath}/src/github.com/
+mkdir -p $RPM_BUILD_ROOT%{gopath}/src/bitbucket.org/
+mkdir -p $RPM_BUILD_ROOT%{gopath}/src/code.google.com/
+mkdir -p $RPM_BUILD_ROOT%{gopath}/src/code.google.com/p/
+
 # remove the go and gofmt for other platforms (not used in the compile)
 pushd $RPM_BUILD_ROOT%{goroot}/bin/
 	rm -rf darwin_* windows_* freebsd_* netbsd_* openbsd_* plan9_*
@@ -466,8 +473,11 @@ pushd $RPM_BUILD_ROOT%{goroot}/bin/
 	esac
 popd
 
-touch $RPM_BUILD_ROOT%{_bindir}/go
-touch $RPM_BUILD_ROOT%{_bindir}/gofmt
+# make sure these files exist and point to alternatives
+rm -f $RPM_BUILD_ROOT%{_bindir}/go
+ln -sf /etc/alternatives/go $RPM_BUILD_ROOT%{_bindir}/go
+rm -f $RPM_BUILD_ROOT%{_bindir}/gofmt
+ln -sf /etc/alternatives/gofmt $RPM_BUILD_ROOT%{_bindir}/gofmt
 
 # misc/bash
 mkdir -p $RPM_BUILD_ROOT%{_datadir}/bash-completion/completions
@@ -482,15 +492,6 @@ mkdir -p $RPM_BUILD_ROOT%{_emacs_sitestartdir}
 cp -av misc/emacs/go-mode.* $RPM_BUILD_ROOT%{_emacs_sitelispdir}/%{name}
 cp -av misc/emacs/%{name}-init.el $RPM_BUILD_ROOT%{_emacs_sitestartdir}
 
-# xemacs on fedora only
-%if 0%{?fedora}
-# misc/xemacs
-mkdir -p $RPM_BUILD_ROOT%{_xemacs_sitelispdir}/%{name}
-mkdir -p $RPM_BUILD_ROOT%{_xemacs_sitestartdir}
-cp -av misc/xemacs/go-mode.* $RPM_BUILD_ROOT%{_xemacs_sitelispdir}/%{name}
-cp -av misc/xemacs/%{name}-init.el $RPM_BUILD_ROOT%{_xemacs_sitestartdir}
-%endif
-
 # misc/vim
 mkdir -p $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles
 cp -av misc/vim/* $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles
@@ -502,7 +503,7 @@ cp -av misc/zsh/go $RPM_BUILD_ROOT%{_datadir}/zsh/site-functions
 
 # gdbinit
 mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d
-cp -av %{SOURCE100} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d/golang
+cp -av %{SOURCE100} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d/golang.gdb
 
 # prelink blacklist
 mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/prelink.conf.d
@@ -519,8 +520,32 @@ cp -av %{SOURCE102} $RPM_BUILD_ROOT%{_sysconfdir}/rpm/macros.golang
 %endif
 
 
+%check
+export GOROOT=$(pwd -P)
+export PATH="$PATH":"$GOROOT"/bin
+cd src
+# skip using CGO for test. causes a SIGABRT on fc21 (bz1086900)
+# until this test/issue is fixed
+# https://bugzilla.redhat.com/show_bug.cgi?id=1086900
+# CGO for test, which fails in i686 on fc21 inside mock/chroot (bz1087621)
+# https://bugzilla.redhat.com/show_bug.cgi?id=1087621
+
+# not using our 'gcc' since the CFLAGS fails crash_cgo_test.go due to unused variables
+# https://code.google.com/p/go/issues/detail?id=6883
+CGO_ENABLED=0 ./run.bash --no-rebuild
+cd ..
+
+if [ $(go list -json std | grep Stale | wc -l) -gt 2 ] ; then
+	# cmd/go and cmd/gofmt show like they are stale. we can ignore
+	exit 1
+fi
+
+
 %ifarch %{ix86}
 %post pkg-bin-linux-386
+# since the cgo.a packaged in this rpm will be older than the other archives likely built on the ARM builder,
+touch -r %{goroot}/pkg/linux_386/runtime.a %{goroot}/pkg/linux_386/runtime/cgo.a
+
 %{_sbindir}/update-alternatives --install %{_bindir}/go \
 	go %{goroot}/bin/linux_386/go 90 \
 	--slave %{_bindir}/gofmt gofmt %{goroot}/bin/linux_386/gofmt
@@ -533,6 +558,9 @@ fi
 
 %ifarch x86_64
 %post pkg-bin-linux-amd64
+# since the cgo.a packaged in this rpm will be older than the other archives likely built on the ARM builder,
+touch -r %{goroot}/pkg/linux_amd64/runtime.a %{goroot}/pkg/linux_amd64/runtime/cgo.a
+
 %{_sbindir}/update-alternatives --install %{_bindir}/go \
 	go %{goroot}/bin/linux_amd64/go 90 \
 	--slave %{_bindir}/gofmt gofmt %{goroot}/bin/linux_amd64/gofmt
@@ -545,6 +573,9 @@ fi
 
 %ifarch %{arm}
 %post pkg-bin-linux-arm
+# since the cgo.a packaged in this rpm will be older than the other archives likely built on the ARM builder,
+touch -r %{goroot}/pkg/linux_arm/runtime.a %{goroot}/pkg/linux_arm/runtime/cgo.a
+
 %{_sbindir}/update-alternatives --install %{_bindir}/go \
 	go %{goroot}/bin/linux_arm/go 90 \
 	--slave %{_bindir}/gofmt gofmt %{goroot}/bin/linux_arm/gofmt
@@ -555,17 +586,30 @@ if [ $1 = 0 ]; then
 fi
 %endif
 
+
+#%post pkg-openbsd-arm
+#GOROOT=%{goroot} GOOS=openbsd GOARCH=arm go install std
+
 %files
-%doc AUTHORS CONTRIBUTORS LICENSE PATENTS VERSION
+%doc AUTHORS CONTRIBUTORS LICENSE PATENTS
+# VERSION has to be present in the GOROOT, for `go install std` to work
+%doc %{goroot}/VERSION
 
 # go files
-%{goroot}
+%dir %{goroot}
+%{goroot}/*
 %exclude %{goroot}/bin/
 %exclude %{goroot}/pkg/
 %exclude %{goroot}/src/
 
-# this directory is part of the core library tool
-%{goroot}/pkg/obj/linux_%{gohostarch}/
+# ensure directory ownership, so they are cleaned up if empty
+%dir %{gopath}
+%dir %{gopath}/src
+%dir %{gopath}/src/github.com/
+%dir %{gopath}/src/bitbucket.org/
+%dir %{gopath}/src/code.google.com/
+%dir %{gopath}/src/code.google.com/p/
+
 
 # autocomplete
 %{_datadir}/bash-completion
@@ -595,106 +639,252 @@ fi
 %{_emacs_sitestartdir}/*.el
 
 
-# xemacs on fedora only
-%if 0%{?fedora}
-%files -n xemacs-%{name}
-%doc AUTHORS CONTRIBUTORS LICENSE PATENTS
-%{_xemacs_sitelispdir}/%{name}
-%{_xemacs_sitestartdir}/*.el
-%endif
-
-%files src
+%files -f go-src.list src
 %{goroot}/src/
 
 %ifarch %{ix86}
 %files pkg-bin-linux-386
 %{goroot}/bin/linux_386/
 # binary executables
-%ghost %{_bindir}/go
-%ghost %{_bindir}/gofmt
+%{_bindir}/go
+%{_bindir}/gofmt
+%dir %{goroot}/pkg/obj/linux_386
+%{goroot}/pkg/obj/linux_386/*
+%{goroot}/pkg/linux_386/runtime/cgo.a
+%dir %{goroot}/pkg/tool/linux_386
+%{goroot}/pkg/tool/linux_386/5a
+%{goroot}/pkg/tool/linux_386/5c
+%{goroot}/pkg/tool/linux_386/5g
+%{goroot}/pkg/tool/linux_386/5l
+%{goroot}/pkg/tool/linux_386/6a
+%{goroot}/pkg/tool/linux_386/6c
+%{goroot}/pkg/tool/linux_386/6g
+%{goroot}/pkg/tool/linux_386/6l
+%{goroot}/pkg/tool/linux_386/8a
+%{goroot}/pkg/tool/linux_386/8c
+%{goroot}/pkg/tool/linux_386/8g
+%{goroot}/pkg/tool/linux_386/8l
+%{goroot}/pkg/tool/linux_386/addr2line
+%{goroot}/pkg/tool/linux_386/dist
+%{goroot}/pkg/tool/linux_386/nm
+%{goroot}/pkg/tool/linux_386/objdump
+%{goroot}/pkg/tool/linux_386/pack
+%{goroot}/pkg/tool/linux_386/pprof
+
+# arch dependent generated files, used by cgo
+%{goroot}/src/pkg/runtime/zasm_linux_386.h
+%{goroot}/src/pkg/runtime/zgoarch_386.go
+%{goroot}/src/pkg/runtime/zmalloc_linux_386.c
+%{goroot}/src/pkg/runtime/zmprof_linux_386.c
+%{goroot}/src/pkg/runtime/znetpoll_linux_386.c
+%{goroot}/src/pkg/runtime/zruntime1_linux_386.c
+%{goroot}/src/pkg/runtime/zruntime_defs_linux_386.go
+%{goroot}/src/pkg/runtime/zsema_linux_386.c
+%{goroot}/src/pkg/runtime/zsigqueue_linux_386.c
+%{goroot}/src/pkg/runtime/zstring_linux_386.c
+%{goroot}/src/pkg/runtime/zsys_linux_386.s
+%{goroot}/src/pkg/runtime/ztime_linux_386.c
+%{goroot}/src/pkg/runtime/zalg_linux_386.c
+%{goroot}/src/pkg/runtime/zchan_linux_386.c
+%{goroot}/src/pkg/runtime/zcomplex_linux_386.c
+%{goroot}/src/pkg/runtime/zcpuprof_linux_386.c
+%{goroot}/src/pkg/runtime/zhashmap_linux_386.c
+%{goroot}/src/pkg/runtime/ziface_linux_386.c
+%{goroot}/src/pkg/runtime/zlfstack_linux_386.c
+%{goroot}/src/pkg/runtime/zrdebug_linux_386.c
+%{goroot}/src/pkg/runtime/zslice_linux_386.c
+%{goroot}/src/pkg/runtime/zsymtab_linux_386.c
 %endif
 
 %ifarch x86_64
 %files pkg-bin-linux-amd64
 %{goroot}/bin/linux_amd64/
 # binary executables
-%ghost %{_bindir}/go
-%ghost %{_bindir}/gofmt
+%{_bindir}/go
+%{_bindir}/gofmt
+%dir %{goroot}/pkg/obj/linux_amd64
+%{goroot}/pkg/obj/linux_amd64/*
+%{goroot}/pkg/linux_amd64/runtime/cgo.a
+%dir %{goroot}/pkg/tool/linux_amd64
+%{goroot}/pkg/tool/linux_amd64/5a
+%{goroot}/pkg/tool/linux_amd64/5c
+%{goroot}/pkg/tool/linux_amd64/5g
+%{goroot}/pkg/tool/linux_amd64/5l
+%{goroot}/pkg/tool/linux_amd64/6a
+%{goroot}/pkg/tool/linux_amd64/6c
+%{goroot}/pkg/tool/linux_amd64/6g
+%{goroot}/pkg/tool/linux_amd64/6l
+%{goroot}/pkg/tool/linux_amd64/8a
+%{goroot}/pkg/tool/linux_amd64/8c
+%{goroot}/pkg/tool/linux_amd64/8g
+%{goroot}/pkg/tool/linux_amd64/8l
+%{goroot}/pkg/tool/linux_amd64/addr2line
+%{goroot}/pkg/tool/linux_amd64/dist
+%{goroot}/pkg/tool/linux_amd64/nm
+%{goroot}/pkg/tool/linux_amd64/objdump
+%{goroot}/pkg/tool/linux_amd64/pack
+%{goroot}/pkg/tool/linux_amd64/pprof
+
+# arch dependent generated files, used by cgo
+%{goroot}/src/pkg/runtime/zasm_linux_amd64.h
+%{goroot}/src/pkg/runtime/zgoarch_amd64.go
+%{goroot}/src/pkg/runtime/zmalloc_linux_amd64.c
+%{goroot}/src/pkg/runtime/zmprof_linux_amd64.c
+%{goroot}/src/pkg/runtime/znetpoll_linux_amd64.c
+%{goroot}/src/pkg/runtime/zruntime1_linux_amd64.c
+%{goroot}/src/pkg/runtime/zruntime_defs_linux_amd64.go
+%{goroot}/src/pkg/runtime/zsema_linux_amd64.c
+%{goroot}/src/pkg/runtime/zsigqueue_linux_amd64.c
+%{goroot}/src/pkg/runtime/zstring_linux_amd64.c
+%{goroot}/src/pkg/runtime/zsys_linux_amd64.s
+%{goroot}/src/pkg/runtime/ztime_linux_amd64.c
+%{goroot}/src/pkg/runtime/zalg_linux_amd64.c
+%{goroot}/src/pkg/runtime/zchan_linux_amd64.c
+%{goroot}/src/pkg/runtime/zcomplex_linux_amd64.c
+%{goroot}/src/pkg/runtime/zcpuprof_linux_amd64.c
+%{goroot}/src/pkg/runtime/zhashmap_linux_amd64.c
+%{goroot}/src/pkg/runtime/ziface_linux_amd64.c
+%{goroot}/src/pkg/runtime/zlfstack_linux_amd64.c
+%{goroot}/src/pkg/runtime/zrdebug_linux_amd64.c
+%{goroot}/src/pkg/runtime/zslice_linux_amd64.c
+%{goroot}/src/pkg/runtime/zsymtab_linux_amd64.c
 %endif
 
 %ifarch %{arm}
 %files pkg-bin-linux-arm
 %{goroot}/bin/linux_arm/
 # binary executables
-%ghost %{_bindir}/go
-%ghost %{_bindir}/gofmt
+%{_bindir}/go
+%{_bindir}/gofmt
+%dir %{goroot}/pkg/obj/linux_arm
+%{goroot}/pkg/obj/linux_arm/*
+%{goroot}/pkg/linux_arm/runtime/cgo.a
+%dir %{goroot}/pkg/tool/linux_arm
+%{goroot}/pkg/tool/linux_arm/5a
+%{goroot}/pkg/tool/linux_arm/5c
+%{goroot}/pkg/tool/linux_arm/5g
+%{goroot}/pkg/tool/linux_arm/5l
+%{goroot}/pkg/tool/linux_arm/6a
+%{goroot}/pkg/tool/linux_arm/6c
+%{goroot}/pkg/tool/linux_arm/6g
+%{goroot}/pkg/tool/linux_arm/6l
+%{goroot}/pkg/tool/linux_arm/8a
+%{goroot}/pkg/tool/linux_arm/8c
+%{goroot}/pkg/tool/linux_arm/8g
+%{goroot}/pkg/tool/linux_arm/8l
+%{goroot}/pkg/tool/linux_arm/addr2line
+%{goroot}/pkg/tool/linux_arm/dist
+%{goroot}/pkg/tool/linux_arm/nm
+%{goroot}/pkg/tool/linux_arm/objdump
+%{goroot}/pkg/tool/linux_arm/pack
+%{goroot}/pkg/tool/linux_arm/pprof
+
+# arch dependent generated files, used by cgo
+%{goroot}/src/pkg/runtime/zasm_linux_arm.h
+%{goroot}/src/pkg/runtime/zgoarch_arm.go
+%{goroot}/src/pkg/runtime/zmalloc_linux_arm.c
+%{goroot}/src/pkg/runtime/zmprof_linux_arm.c
+%{goroot}/src/pkg/runtime/znetpoll_linux_arm.c
+%{goroot}/src/pkg/runtime/znoasm_arm_linux_arm.c
+%{goroot}/src/pkg/runtime/zruntime1_linux_arm.c
+%{goroot}/src/pkg/runtime/zruntime_defs_linux_arm.go
+%{goroot}/src/pkg/runtime/zsema_linux_arm.c
+%{goroot}/src/pkg/runtime/zsigqueue_linux_arm.c
+%{goroot}/src/pkg/runtime/zstring_linux_arm.c
+%{goroot}/src/pkg/runtime/zsys_linux_arm.s
+%{goroot}/src/pkg/runtime/ztime_linux_arm.c
+%{goroot}/src/pkg/runtime/zalg_linux_arm.c
+%{goroot}/src/pkg/runtime/zchan_linux_arm.c
+%{goroot}/src/pkg/runtime/zcomplex_linux_arm.c
+%{goroot}/src/pkg/runtime/zcpuprof_linux_arm.c
+%{goroot}/src/pkg/runtime/zhashmap_linux_arm.c
+%{goroot}/src/pkg/runtime/ziface_linux_arm.c
+%{goroot}/src/pkg/runtime/zlfstack_linux_arm.c
+%{goroot}/src/pkg/runtime/zrdebug_linux_arm.c
+%{goroot}/src/pkg/runtime/zslice_linux_arm.c
+%{goroot}/src/pkg/runtime/zsymtab_linux_arm.c
 %endif
 
-%files pkg-linux-386
+%files pkg-linux-386 -f pkg-linux-386.list
 %{goroot}/pkg/linux_386/
-%{goroot}/pkg/tool/linux_386/
+%ifarch %{ix86}
+%exclude %{goroot}/pkg/linux_386/runtime/cgo.a
+%endif
+%{goroot}/pkg/tool/linux_386/cgo
+%{goroot}/pkg/tool/linux_386/fix
+%{goroot}/pkg/tool/linux_386/yacc
 
-%files pkg-linux-amd64
+%files pkg-linux-amd64 -f pkg-linux-amd64.list
 %{goroot}/pkg/linux_amd64/
-%{goroot}/pkg/tool/linux_amd64/
+%ifarch x86_64
+%exclude %{goroot}/pkg/linux_amd64/runtime/cgo.a
+%endif
+%{goroot}/pkg/tool/linux_amd64/cgo
+%{goroot}/pkg/tool/linux_amd64/fix
+%{goroot}/pkg/tool/linux_amd64/yacc
 
-%files pkg-linux-arm
+%files pkg-linux-arm -f pkg-linux-arm.list
 %{goroot}/pkg/linux_arm/
-%{goroot}/pkg/tool/linux_arm/
+%ifarch %{arm}
+%exclude %{goroot}/pkg/linux_arm/runtime/cgo.a
+%endif
+%{goroot}/pkg/tool/linux_arm/cgo
+%{goroot}/pkg/tool/linux_arm/fix
+%{goroot}/pkg/tool/linux_arm/yacc
 
-%files pkg-darwin-386
+%files pkg-darwin-386 -f pkg-darwin-386.list
 %{goroot}/pkg/darwin_386/
 %{goroot}/pkg/tool/darwin_386/
 
-%files pkg-darwin-amd64
+%files pkg-darwin-amd64 -f pkg-darwin-amd64.list
 %{goroot}/pkg/darwin_amd64/
 %{goroot}/pkg/tool/darwin_amd64/
 
-%files pkg-windows-386
+%files pkg-windows-386 -f pkg-windows-386.list
 %{goroot}/pkg/windows_386/
 %{goroot}/pkg/tool/windows_386/
 
-%files pkg-windows-amd64
+%files pkg-windows-amd64 -f pkg-windows-amd64.list
 %{goroot}/pkg/windows_amd64/
 %{goroot}/pkg/tool/windows_amd64/
 
-%files pkg-plan9-386
+%files pkg-plan9-386 -f pkg-plan9-386.list
 %{goroot}/pkg/plan9_386/
 %{goroot}/pkg/tool/plan9_386/
 
-%files pkg-plan9-amd64
+%files pkg-plan9-amd64 -f pkg-plan9-amd64.list
 %{goroot}/pkg/plan9_amd64/
 %{goroot}/pkg/tool/plan9_amd64/
 
-%files pkg-freebsd-386
+%files pkg-freebsd-386 -f pkg-freebsd-386.list
 %{goroot}/pkg/freebsd_386/
 %{goroot}/pkg/tool/freebsd_386/
 
-%files pkg-freebsd-amd64
+%files pkg-freebsd-amd64 -f pkg-freebsd-amd64.list
 %{goroot}/pkg/freebsd_amd64/
 %{goroot}/pkg/tool/freebsd_amd64/
 
-%files pkg-freebsd-arm
+%files pkg-freebsd-arm -f pkg-freebsd-arm.list
 %{goroot}/pkg/freebsd_arm/
 %{goroot}/pkg/tool/freebsd_arm/
 
-%files pkg-netbsd-386
+%files pkg-netbsd-386 -f pkg-netbsd-386.list
 %{goroot}/pkg/netbsd_386/
 %{goroot}/pkg/tool/netbsd_386/
 
-%files pkg-netbsd-amd64
+%files pkg-netbsd-amd64 -f pkg-netbsd-amd64.list
 %{goroot}/pkg/netbsd_amd64/
 %{goroot}/pkg/tool/netbsd_amd64/
 
-%files pkg-netbsd-arm
+%files pkg-netbsd-arm -f pkg-netbsd-arm.list
 %{goroot}/pkg/netbsd_arm/
 %{goroot}/pkg/tool/netbsd_arm/
 
-%files pkg-openbsd-386
+%files pkg-openbsd-386 -f pkg-openbsd-386.list
 %{goroot}/pkg/openbsd_386/
 %{goroot}/pkg/tool/openbsd_386/
 
-%files pkg-openbsd-amd64
+%files pkg-openbsd-amd64 -f pkg-openbsd-amd64.list
 %{goroot}/pkg/openbsd_amd64/
 %{goroot}/pkg/tool/openbsd_amd64/
 
@@ -705,6 +895,113 @@ fi
 
 
 %changelog
+* Tue Oct 21 2014 Tomas Hrcka <thrcka@redhat.com> - 1.3.3-2
+- Restrict go_arches to x64 only
+
+* Wed Oct 01 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3.3-1
+- update to go1.3.3 (bz1146882)
+
+* Mon Sep 29 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3.2-1
+- update to go1.3.2 (bz1147324)
+
+* Thu Sep 11 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3.1-3
+- patching the tzinfo failure
+
+* Fri Aug 22 2014 Tomas Hrcka <thrcka@redhat.com> - 1.3.1-3
+- new upstream version
+- bump release
+
+* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Wed Aug 13 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3.1-1
+- update to go1.3.1
+
+* Wed Aug 13 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-11
+- merged a line wrong
+
+* Wed Aug 13 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-10
+- more work to get cgo.a timestamps to line up, due to build-env
+- explicitly list all the files and directories for the source and packages trees
+- touch all the built archives to be the same
+
+* Mon Aug 11 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-9
+- make golang-src 'noarch' again, since that was not a fix, and takes up more space
+
+* Mon Aug 11 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-8
+- update timestamps of source files during %%install bz1099206
+
+* Fri Aug 08 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-7
+- update timestamps of source during %%install bz1099206
+
+* Wed Aug 06 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-6
+- make the source subpackage arch'ed, instead of noarch
+
+* Mon Jul 21 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-5
+- fix the writing of pax headers
+
+* Tue Jul 15 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-4
+- fix the loading of gdb safe-path. bz981356
+
+* Tue Jul 08 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-3
+- `go install std` requires gcc, to build cgo. bz1105901, bz1101508
+
+* Mon Jul 07 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-2
+- archive/tar memory allocation improvements
+
+* Thu Jun 19 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3-1
+- update to go1.3
+
+* Fri Jun 13 2014 Vincent Batts <vbatts@fedoraproject.org> - 1.3rc2-1
+- update to go1.3rc2
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3rc1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Tue Jun 03 2014 Vincent Batts <vbatts@redhat.com> 1.3rc1-1
+- update to go1.3rc1
+- new arch file shuffling
+
+* Wed May 21 2014 Vincent Batts <vbatts@redhat.com> 1.3beta2-1
+- update to go1.3beta2
+- no longer provides go-mode for xemacs (emacs only)
+
+* Wed May 21 2014 Vincent Batts <vbatts@redhat.com> 1.2.2-7
+- bz1099206 ghost files are not what is needed
+
+* Tue May 20 2014 Vincent Batts <vbatts@redhat.com> 1.2.2-6
+- bz1099206 more fixing. The packages %%post need golang-bin present first
+
+* Tue May 20 2014 Vincent Batts <vbatts@redhat.com> 1.2.2-5
+- bz1099206 more fixing. Let go fix its own timestamps and freshness
+
+* Tue May 20 2014 Vincent Batts <vbatts@redhat.com> 1.2.2-4
+- fix the existence and alternatives of `go` and `gofmt`
+
+* Mon May 19 2014 Vincent Batts <vbatts@redhat.com> 1.2.2-3
+- bz1099206 fix timestamp issue caused by koji builders
+
+* Fri May 09 2014 Vincent Batts <vbatts@redhat.com> 1.2.2-2
+- more arch file shuffling
+
+* Fri May 09 2014 Vincent Batts <vbatts@redhat.com> 1.2.2-1
+- update to go1.2.2
+
+* Thu May 08 2014 Vincent Batts <vbatts@redhat.com> 1.2.1-8
+- RHEL6 rpm macros can't %%exlude missing files
+
+* Wed May 07 2014 Vincent Batts <vbatts@redhat.com> 1.2.1-7
+- missed two arch-dependent src files
+
+* Wed May 07 2014 Vincent Batts <vbatts@redhat.com> 1.2.1-6
+- put generated arch-dependent src in their respective RPMs
+
+* Fri Apr 11 2014 Vincent Batts <vbatts@redhat.com> 1.2.1-5
+- skip test that is causing a SIGABRT on fc21 bz1086900
+
+* Thu Apr 10 2014 Vincent Batts <vbatts@fedoraproject.org> 1.2.1-4
+- fixing file and directory ownership bz1010713
+
 * Wed Apr 09 2014 Vincent Batts <vbatts@fedoraproject.org> 1.2.1-3
 - including more to macros (%%go_arches)
 - set a standard goroot as /usr/lib/golang, regardless of arch
@@ -716,7 +1013,7 @@ fi
 * Tue Mar 04 2014 Adam Miller <maxamillion@fedoraproject.org> 1.2.1-1
 - Update to latest upstream
 
-* Thu Feb 20 2014 Adam Miller <maxamillion@fedoraproejct.org> 1.2-7
+* Thu Feb 20 2014 Adam Miller <maxamillion@fedoraproject.org> 1.2-7
 - Remove  _BSD_SOURCE and _SVID_SOURCE, they are deprecated in recent
   versions of glibc and aren't needed