Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/go: buildid broken for binaries using cgo on Mac OS 10.10.4? #12327

Closed
petermattis opened this issue Aug 25, 2015 · 19 comments
Closed

cmd/go: buildid broken for binaries using cgo on Mac OS 10.10.4? #12327

petermattis opened this issue Aug 25, 2015 · 19 comments

Comments

@petermattis
Copy link

New with go-1.5: go install <binary> for a binary using cgo seems to always rebuild the binary. I haven't been able to narrow down a test case, though I did verify that ReadBuildIDFromBinary is returning an empty string for the problematic binaries. A somewhat large test case is github.com/cockroachdb/cockroach:

~ go install -v github.com/cockroachdb/cockroach
github.com/cockroachdb/cockroach
~ go install -v github.com/cockroachdb/cockroach
github.com/cockroachdb/cockroach

I would expect the second invocation to do nothing. nm reveals:

~ nm cockroach | grep buildid
00000000042a0260 t go.buildid

That symbol location is suspicious as the comments in ReadBuildIDFromBinary say that the symbol should be located at 0x2000. Compare this with stringer built with go-1.5 on the same system:

~ nm stringer | grep buildid
0000000000002000 t go.buildid
@bradfitz
Copy link
Contributor

Are you using 1.5 or 1.5rc1?

/cc @rsc, who tried to fix this in d2cf46d for #12173

@petermattis
Copy link
Author

I'm using 1.5. I definitely have d2cf46d in my git log.

petermattis added a commit to cockroachdb/c-protobuf that referenced this issue Aug 25, 2015
Work around golang/go#12327 by moving the bulk
of protoc into a library. We still relink protoc on every go install,
but the relink only takes 1 second.
petermattis added a commit to cockroachdb/c-protobuf that referenced this issue Aug 25, 2015
Work around golang/go#12327 by moving the bulk
of protoc into a library. We still relink protoc on every go install,
but the relink only takes 1 second.
petermattis added a commit to cockroachdb/c-protobuf that referenced this issue Aug 25, 2015
Work around golang/go#12327 by moving the bulk
of protoc into a library. We still relink protoc on every go install,
but the relink only takes 1 second.
@ianlancetaylor ianlancetaylor added this to the Go1.5.1 milestone Aug 25, 2015
@ianlancetaylor ianlancetaylor modified the milestones: Go1.5.2, Go1.5.1 Sep 8, 2015
@mwhudson
Copy link
Contributor

It looks like the assumption ReadBuildIDFromBinary makes that the buildid is somewhere near the start of the file is just wrong for this case. Can you tell what is actually at the front of the file? I don't remember anything like enough about macho to be useful here, unfortunately.

@petermattis
Copy link
Author

@mwhudson I know very little about macho as well. Here is what nm and otool -l give me. I'm happy to run other commands to help debug this, though I'll need guidance. Not sure if it is important, but the binary is linked using extld=clang++:

~/Development/go/bin go install -x -v github.com/cockroachdb/cockroach
WORK=/var/folders/qc/fpqpgdqd167c70dtc6840xxh0000gn/T/go-build174439831
github.com/cockroachdb/cockroach
mkdir -p $WORK/github.com/cockroachdb/cockroach/_obj/
mkdir -p $WORK/github.com/cockroachdb/cockroach/_obj/exe/
cd /Users/pmattis/Development/go/src/github.com/cockroachdb/cockroach
/Users/pmattis/Development/go-1.5/pkg/tool/darwin_amd64/compile -o $WORK/github.com/cockroachdb/cockroach.a -trimpath $WORK -p main -complete -buildid 3be2cbacc3a970735375300079a08c5f9fdd2806 -D _/Users/pmattis/Development/go/src/github.com/cockroachdb/cockroach -I $WORK -I /Users/pmattis/Development/go/pkg/darwin_amd64 -pack ./main.go
cd .
/Users/pmattis/Development/go-1.5/pkg/tool/darwin_amd64/link -o $WORK/github.com/cockroachdb/cockroach/_obj/exe/a.out -L $WORK -L /Users/pmattis/Development/go/pkg/darwin_amd64 -extld=clang++ -buildmode=exe -buildid=3be2cbacc3a970735375300079a08c5f9fdd2806 $WORK/github.com/cockroachdb/cockroach.a
mkdir -p /Users/pmattis/Development/go/bin/
mv $WORK/github.com/cockroachdb/cockroach/_obj/exe/a.out /Users/pmattis/Development/go/bin/cockroach

~/Development/go/bin nm ./cockroach  | grep buildid
0000000004318290 t go.buildid

~/Development/go/bin otool -l ./cockroach
./cockroach:
Load command 0
      cmd LC_SEGMENT_64
  cmdsize 72
  segname __PAGEZERO
   vmaddr 0x0000000000000000
   vmsize 0x0000000004000000
  fileoff 0
 filesize 0
  maxprot 0x00000000
 initprot 0x00000000
   nsects 0
    flags 0x0
Load command 1
      cmd LC_SEGMENT_64
  cmdsize 1032
  segname __TEXT
   vmaddr 0x0000000004000000
   vmsize 0x000000000144b000
  fileoff 0
 filesize 21278720
  maxprot 0x00000007
 initprot 0x00000005
   nsects 12
    flags 0x0
Section
  sectname __text
   segname __TEXT
      addr 0x0000000004002740
      size 0x0000000000b5cf10
    offset 10048
     align 2^4 (16)
    reloff 0
    nreloc 0
     flags 0x80000400
 reserved1 0
 reserved2 0
Section
  sectname __stubs
   segname __TEXT
      addr 0x0000000004b5f650
      size 0x000000000000253e
    offset 11925072
     align 2^1 (2)
    reloff 0
    nreloc 0
     flags 0x80000408
 reserved1 0 (index into indirect symbol table)
 reserved2 6 (size of stubs)
Section
  sectname __stub_helper
   segname __TEXT
      addr 0x0000000004b61b90
      size 0x0000000000000b3e
    offset 11934608
     align 2^2 (4)
    reloff 0
    nreloc 0
     flags 0x80000400
 reserved1 0
 reserved2 0
Section
  sectname __const
   segname __TEXT
      addr 0x0000000004b626d0
      size 0x0000000000011d40
    offset 11937488
     align 2^4 (16)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __gcc_except_tab
   segname __TEXT
      addr 0x0000000004b74410
      size 0x000000000003afb0
    offset 12010512
     align 2^2 (4)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __cstring
   segname __TEXT
      addr 0x0000000004baf3c0
      size 0x0000000000015174
    offset 12252096
     align 2^4 (16)
    reloff 0
    nreloc 0
     flags 0x00000002
 reserved1 0
 reserved2 0
Section
  sectname __rodata
   segname __TEXT
      addr 0x0000000004bc4540
      size 0x000000000055f5d0
    offset 12338496
     align 2^5 (32)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __typelink
   segname __TEXT
      addr 0x0000000005123b10
      size 0x00000000000166f8
    offset 17971984
     align 2^3 (8)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __gosymtab
   segname __TEXT
      addr 0x000000000513a208
      size 0x0000000000000000
    offset 18063880
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __gopclntab
   segname __TEXT
      addr 0x000000000513a220
      size 0x00000000002f3518
    offset 18063904
     align 2^5 (32)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __unwind_info
   segname __TEXT
      addr 0x000000000542d738
      size 0x00000000000104fc
    offset 21157688
     align 2^2 (4)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __eh_frame
   segname __TEXT
      addr 0x000000000543dc38
      size 0x000000000000d3c0
    offset 21224504
     align 2^3 (8)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Load command 2
      cmd LC_SEGMENT_64
  cmdsize 1112
  segname __DATA
   vmaddr 0x000000000544b000
   vmsize 0x000000000038f000
  fileoff 21278720
 filesize 3518464
  maxprot 0x00000007
 initprot 0x00000003
   nsects 13
    flags 0x0
Section
  sectname __nl_symbol_ptr
   segname __DATA
      addr 0x000000000544b000
      size 0x0000000000000010
    offset 21278720
     align 2^3 (8)
    reloff 0
    nreloc 0
     flags 0x00000006
 reserved1 1589 (index into indirect symbol table)
 reserved2 0
Section
  sectname __got
   segname __DATA
      addr 0x000000000544b010
      size 0x0000000000000940
    offset 21278736
     align 2^3 (8)
    reloff 0
    nreloc 0
     flags 0x00000006
 reserved1 1591 (index into indirect symbol table)
 reserved2 0
Section
  sectname __la_symbol_ptr
   segname __DATA
      addr 0x000000000544b950
      size 0x00000000000031a8
    offset 21281104
     align 2^3 (8)
    reloff 0
    nreloc 0
     flags 0x00000007
 reserved1 1887 (index into indirect symbol table)
 reserved2 0
Section
  sectname __mod_init_func
   segname __DATA
      addr 0x000000000544eaf8
      size 0x0000000000000360
    offset 21293816
     align 2^3 (8)
    reloff 0
    nreloc 0
     flags 0x00000009
 reserved1 0
 reserved2 0
Section
  sectname __const
   segname __DATA
      addr 0x000000000544ee60
      size 0x0000000000010400
    offset 21294688
     align 2^4 (16)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __data
   segname __DATA
      addr 0x000000000545f260
      size 0x0000000000016ee0
    offset 21361248
     align 2^5 (32)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __thread_vars
   segname __DATA
      addr 0x0000000005476140
      size 0x0000000000000060
    offset 21455168
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000013
 reserved1 0
 reserved2 0
Section
  sectname __noptrdata
   segname __DATA
      addr 0x00000000054761a0
      size 0x000000000032f102
    offset 21455264
     align 2^5 (32)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __thread_data
   segname __DATA
      addr 0x00000000057a52a8
      size 0x0000000000000014
    offset 24793768
     align 2^3 (8)
    reloff 0
    nreloc 0
     flags 0x00000011
 reserved1 0
 reserved2 0
Section
  sectname __thread_bss
   segname __DATA
      addr 0x00000000057a52c0
      size 0x0000000000000168
    offset 0
     align 2^3 (8)
    reloff 0
    nreloc 0
     flags 0x00000012
 reserved1 0
 reserved2 0
Section
  sectname __common
   segname __DATA
      addr 0x00000000057a5428
      size 0x0000000000000f79
    offset 0
     align 2^3 (8)
    reloff 0
    nreloc 0
     flags 0x00000001
 reserved1 0
 reserved2 0
Section
  sectname __noptrbss
   segname __DATA
      addr 0x00000000057a63c0
      size 0x0000000000007860
    offset 0
     align 2^5 (32)
    reloff 0
    nreloc 0
     flags 0x00000001
 reserved1 0
 reserved2 0
Section
  sectname __bss
   segname __DATA
      addr 0x00000000057adc20
      size 0x000000000002ba58
    offset 0
     align 2^5 (32)
    reloff 0
    nreloc 0
     flags 0x00000001
 reserved1 0
 reserved2 0
Load command 3
      cmd LC_SEGMENT_64
  cmdsize 72
  segname __LINKEDIT
   vmaddr 0x00000000057da000
   vmsize 0x0000000000658000
  fileoff 31580160
 filesize 6649016
  maxprot 0x00000007
 initprot 0x00000001
   nsects 0
    flags 0x0
Load command 4
            cmd LC_DYLD_INFO_ONLY
        cmdsize 48
     rebase_off 0
    rebase_size 0
       bind_off 31580160
      bind_size 4864
  weak_bind_off 31585024
 weak_bind_size 37160
  lazy_bind_off 31622184
 lazy_bind_size 10232
     export_off 31632416
    export_size 392088
Load command 5
     cmd LC_SYMTAB
 cmdsize 24
  symoff 32068496
   nsyms 115725
  stroff 33934000
 strsize 4295176
Load command 6
            cmd LC_DYSYMTAB
        cmdsize 80
      ilocalsym 0
      nlocalsym 105472
     iextdefsym 105472
     nextdefsym 9898
      iundefsym 115370
      nundefsym 355
         tocoff 0
           ntoc 0
      modtaboff 0
        nmodtab 0
   extrefsymoff 0
    nextrefsyms 0
 indirectsymoff 33920096
  nindirectsyms 3476
      extreloff 0
        nextrel 0
      locreloff 0
        nlocrel 0
Load command 7
          cmd LC_LOAD_DYLINKER
      cmdsize 32
         name /usr/lib/dyld (offset 12)
Load command 8
     cmd LC_UUID
 cmdsize 24
    uuid 627006E0-27F5-307F-849A-377495039B6C
Load command 9
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.10
      sdk 10.11
Load command 10
      cmd LC_SOURCE_VERSION
  cmdsize 16
  version 0.0
Load command 11
       cmd LC_MAIN
   cmdsize 24
  entryoff 3629472
 stacksize 0
Load command 12
          cmd LC_LOAD_DYLIB
      cmdsize 104
         name /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (offset 24)
   time stamp 2 Wed Dec 31 19:00:02 1969
      current version 1253.0.0
compatibility version 150.0.0
Load command 13
          cmd LC_LOAD_DYLIB
      cmdsize 96
         name /System/Library/Frameworks/Security.framework/Versions/A/Security (offset 24)
   time stamp 2 Wed Dec 31 19:00:02 1969
      current version 57336.1.9
compatibility version 1.0.0
Load command 14
          cmd LC_LOAD_DYLIB
      cmdsize 56
         name /usr/lib/libSystem.B.dylib (offset 24)
   time stamp 2 Wed Dec 31 19:00:02 1969
      current version 1225.1.1
compatibility version 1.0.0
Load command 15
          cmd LC_LOAD_DYLIB
      cmdsize 48
         name /usr/lib/libc++.1.dylib (offset 24)
   time stamp 2 Wed Dec 31 19:00:02 1969
      current version 120.1.0
compatibility version 1.0.0
Load command 16
      cmd LC_FUNCTION_STARTS
  cmdsize 16
  dataoff 32024504
 datasize 43992
Load command 17
      cmd LC_DATA_IN_CODE
  cmdsize 16
  dataoff 32068496
 datasize 0
Load command 18
      cmd LC_SEGMENT_64
  cmdsize 1032
  segname __DWARF
   vmaddr 0x0000000005e32000
   vmsize 0x0000000000678000
  fileoff 24797184
 filesize 6779048
  maxprot 0x00000007
 initprot 0x00000003
   nsects 12
    flags 0x0
Section
  sectname __debug_abbrev
   segname __DWARF
      addr 0x0000000005e32000
      size 0x0000000000000114
    offset 24797184
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __debug_aranges
   segname __DWARF
      addr 0x0000000005e32114
      size 0x0000000000000050
    offset 24797460
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __debug_frame
   segname __DWARF
      addr 0x0000000005e32164
      size 0x00000000000b6ce8
    offset 24797540
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __debug_info
   segname __DWARF
      addr 0x0000000005ee8e4c
      size 0x00000000001dec79
    offset 25546316
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __debug_line
   segname __DWARF
      addr 0x00000000060c7ac5
      size 0x000000000007a379
    offset 27507397
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __debug_pubnames
   segname __DWARF
      addr 0x0000000006141e3e
      size 0x000000000010b7b5
    offset 28007998
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __debug_pubtypes
   segname __DWARF
      addr 0x000000000624d5f3
      size 0x00000000000555c7
    offset 29103603
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __debug_str
   segname __DWARF
      addr 0x00000000062a2bba
      size 0x0000000000145dbc
    offset 29453242
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __apple_names
   segname __DWARF
      addr 0x00000000063e8976
      size 0x00000000000880b0
    offset 30787958
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __apple_types
   segname __DWARF
      addr 0x0000000006470a26
      size 0x000000000003863a
    offset 31345190
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __apple_namespac
   segname __DWARF
      addr 0x00000000064a9060
      size 0x0000000000000024
    offset 31576160
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __apple_objc
   segname __DWARF
      addr 0x00000000064a9084
      size 0x0000000000000024
    offset 31576196
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0

@bradfitz
Copy link
Contributor

Are we missing OS X version coverage in our builders?

I mean, we ARE. But is that at fault here?

@petermattis
Copy link
Author

The clang++ ld command line is:

clang++ -m64 -gdwarf-2 -Wl,-no_pie,-headerpad,1144 -Wl,-pagezero_size,4000000 
  -o a.out -Qunused-arguments 
  tmp/000000.o tmp/000001.o tmp/000002.o tmp/000003.o tmp/000004.o tmp/000005.o tmp/000006.o 
  tmp/000007.o tmp/000008.o tmp/000009.o tmp/000010.o tmp/go.o 
  -g -O2 -Wl,-undefined -Wl,dynamic_lookup -g -O2 -framework CoreFoundation -framework Security 
  -g -O2 -g -O2 -g -O2 -g -O2 -lpthread -g -O2 -Wl,-undefined -Wl,dynamic_lookup 
  -g -O2 -Wl,-undefined -Wl,dynamic_lookup -Wl,-undefined -Wl,dynamic_lookup 
  -g -O2 -g -O2 -Wl,-undefined -Wl,dynamic_lookup -g -O2

The tmp/go.o input contains the Go symbols, including go.buildid. The other tmp/*.o files contain cgo compiled libraries. The order of these .o files to the linker seems to be important. If I place tmp/go.o first (by reordering the lines here), then the location of the go.buildid moves much closer to the front of the file:

~/Development/go/bin nm ~./cockroach  | grep buildid
0000000004004d40 t go.buildid

I also noticed that the 4000000 portion of the symbol exactly matches the -pagezero_size flag passed to the linker. That offset doesn't affect where the symbol is on disk. Hacking together a little program to search the file binary for the buildid I can see it is now lying at offset 19776 (0x4d40). This isn't within the first 16KB of the binary (as required by ReadBuildIDFromBinary), but it's a lot closer than it was before.

The above is poking around in stuff I really don't understand.

@petermattis
Copy link
Author

Certainly seems like go.o should appear first on the command line. From the ld manpage: The object files are loaded in the order in which they are specified on the command line.

@rsc
Copy link
Contributor

rsc commented Nov 16, 2015 via email

@petermattis
Copy link
Author

AFAICT, 60f783d is the commit which introduced hostobj. Looks like the elements in hostobj have always been linked before go.o.

@rsc
Copy link
Contributor

rsc commented Nov 16, 2015 via email

@gopherbot
Copy link

CL https://golang.org/cl/16964 mentions this issue.

@petermattis
Copy link
Author

CL 16964 won't completely fix the issue. The location of the go.buildid symbol still varies for my test case. A little digging revealed this is due to the __TEXT.__stubs and __TEXT.__stub_helper sections being placed before the __TEXT.__text section:

otool -l ./cockroach
...
Section
  sectname __stubs
   segname __TEXT
...
    offset 7794
...
Section
  sectname __stub_helper
   segname __TEXT
...
    offset 17328
...
Section
  sectname __text
   segname __TEXT
...
    offset 20208
...

The location of the go.buildid symbol within the binary is at offset 20208 (i.e. right at the start of the __TEXT.__text section). Any ideas why the __stubs and __stub_helper sections are being output before the __text section? That doesn't happen without CL 16964 applied.

I wonder if trying to force a symbol into a particular location in the binary is trying to be too clever. It would be more robust to adapt/borrow some code from debug/macho to find the location of the __TEXT.__text section. Or perhaps to fallback to reading the entire binary if the desired symbol can't be found in the first 16KB of the file.

@rsc rsc closed this as completed in 6bf794a Nov 18, 2015
@tamird
Copy link
Contributor

tamird commented Nov 18, 2015

Looks like Github mistook Does not fix #12327 to mean Fixes #12327. Would someone reopen this?

@ianlancetaylor
Copy link
Contributor

Reopened.

@rsc
Copy link
Contributor

rsc commented Nov 18, 2015

CL 17038 parses Mach-O as you suggest and reads more of the file.

@gopherbot
Copy link

CL https://golang.org/cl/17038 mentions this issue.

@rsc rsc closed this as completed in 2611917 Nov 19, 2015
rsc added a commit that referenced this issue Nov 19, 2015
It's intended primarily as a torture test for OS X.
Apparently Windows can't take it.

Updates fix for #12327.

Change-Id: If2af249ea8e2f55bff8f232dce06172e6fef9f49
Reviewed-on: https://go-review.googlesource.com/17073
Reviewed-by: Russ Cox <rsc@golang.org>
@gopherbot
Copy link

CL https://golang.org/cl/17127 mentions this issue.

@gopherbot
Copy link

CL https://golang.org/cl/17128 mentions this issue.

@gopherbot
Copy link

CL https://golang.org/cl/17126 mentions this issue.

rsc added a commit that referenced this issue Nov 23, 2015
Does not fix #12327 but nicer anyway.

Change-Id: I4ad730a4ca833d76957b7571895b3a08a6a530d4
Reviewed-on: https://go-review.googlesource.com/16964
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-on: https://go-review.googlesource.com/17126
rsc added a commit that referenced this issue Nov 23, 2015
…bles

This is a bit of a belt-and-suspenders fix.
On OS X, we now parse the Mach-O file to find the __text section,
which is arguably the more proper fix. But it's a bit worrisome to
depend on a name like __text not changing, so we also read more
of the initial file (now 32 kB, up from 8 kB) and scan that too.

Fixes #12327.

Change-Id: I3a201a3dc278d24707109bb3961c3bdd8b8a0b7b
Reviewed-on: https://go-review.googlesource.com/17038
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-on: https://go-review.googlesource.com/17127
rsc added a commit that referenced this issue Nov 23, 2015
It's intended primarily as a torture test for OS X.
Apparently Windows can't take it.

Updates fix for #12327.

Change-Id: If2af249ea8e2f55bff8f232dce06172e6fef9f49
Reviewed-on: https://go-review.googlesource.com/17073
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-on: https://go-review.googlesource.com/17128
Reviewed-by: Ian Lance Taylor <iant@golang.org>
@golang golang locked and limited conversation to collaborators Nov 27, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

7 participants