1. 15 May, 2014 10 commits
    • Russ Cox's avatar
      runtime: make scan of pointer-in-interface same as scan of pointer · 68aaf2cc
      Russ Cox authored
      The GC program describing a data structure sometimes trusts the
      pointer base type and other times does not (if not, the garbage collector
      must fall back on per-allocation type information stored in the heap).
      Make the scanning of a pointer in an interface do the same.
      This fixes a crash in a particular use of reflect.SliceHeader.
      
      Fixes #8004.
      
      LGTM=khr
      R=golang-codereviews, khr
      CC=0xe2.0x9a.0x9b, golang-codereviews, iant, r
      https://golang.org/cl/100470045
      68aaf2cc
    • Mikio Hara's avatar
      net/http: fix nits found by go tool vet · 27b98974
      Mikio Hara authored
      LGTM=ruiu
      R=golang-codereviews, ruiu
      CC=golang-codereviews
      https://golang.org/cl/91480043
      27b98974
    • Russ Cox's avatar
      cmd/gc: correct handling of globals, func args, results · f5184d34
      Russ Cox authored
      Globals, function arguments, and results are special cases in
      registerization.
      
      Globals must be flushed aggressively, because nearly any
      operation can cause a panic, and the recovery code must see
      the latest values. Globals also must be loaded aggressively,
      because nearly any store through a pointer might be updating a
      global: the compiler cannot see all the "address of"
      operations on globals, especially exported globals. To
      accomplish this, mark all globals as having their address
      taken, which effectively disables registerization.
      
      If a function contains a defer statement, the function results
      must be flushed aggressively, because nearly any operation can
      cause a panic, and the deferred code may call recover, causing
      the original function to return the current values of its
      function results. To accomplish this, mark all function
      results as having their address taken if the function contains
      any defer statements. This causes not just aggressive flushing
      but also aggressive loading. The aggressive loading is
      overkill but the best we can do in the current code.
      
      Function arguments must be considered live at all safe points
      in a function, because garbage collection always preserves
      them: they must be up-to-date in order to be preserved
      correctly. Accomplish this by marking them live at all call
      sites. An earlier attempt at this marked function arguments as
      having their address taken, which disabled registerization
      completely, making programs slower. This CL's solution allows
      registerization while preserving safety. The benchmark speedup
      is caused by being able to registerize again (the earlier CL
      lost the same amount).
      
      benchmark                old ns/op     new ns/op     delta
      BenchmarkEqualPort32     61.4          56.0          -8.79%
      
      benchmark                old MB/s     new MB/s     speedup
      BenchmarkEqualPort32     521.56       570.97       1.09x
      
      Fixes #1304. (again)
      Fixes #7944. (again)
      Fixes #7984.
      Fixes #7995.
      
      LGTM=khr
      R=golang-codereviews, khr
      CC=golang-codereviews, iant, r
      https://golang.org/cl/97500044
      f5184d34
    • Russ Cox's avatar
      cmd/gc: fix duplicate map key check · ec38c6f5
      Russ Cox authored
      Do not compare nil and true.
      
      Fixes #7996.
      
      LGTM=r
      R=golang-codereviews, r
      CC=golang-codereviews
      https://golang.org/cl/91470043
      ec38c6f5
    • Russ Cox's avatar
      crypto/sha256, crypto/sha512: fix argument size in assembly · fbd09150
      Russ Cox authored
      The function takes 32 bytes of arguments: 8 for the *block
      and then 3*8 for the slice.
      
      The 24 is not causing a bug (today at least) because the
      final word is the cap of the slice, which the assembly
      does not use.
      
      Identified by 'go vet std'.
      
      LGTM=bradfitz
      R=golang-codereviews, bradfitz
      CC=golang-codereviews
      https://golang.org/cl/96360043
      fbd09150
    • Alex Brainman's avatar
      cmd/addr2line,cmd/objdump: test that commands accept addresses with 0x prefix and without · 435ba129
      Alex Brainman authored
      LGTM=iant
      R=golang-codereviews, iant
      CC=golang-codereviews
      https://golang.org/cl/100440045
      435ba129
    • Alex Brainman's avatar
      misc/pprof: always use go tool objdump on windows · fcfc17f1
      Alex Brainman authored
      Fixes #7406.
      
      LGTM=r
      R=golang-codereviews, r
      CC=golang-codereviews
      https://golang.org/cl/97440043
      fcfc17f1
    • Alex Brainman's avatar
      cmd/addr2line, cmd/objdump: fix pe text section starting address · 6c7bef55
      Alex Brainman authored
      fixes windows build
      
      LGTM=bradfitz
      R=golang-codereviews, bradfitz
      CC=golang-codereviews
      https://golang.org/cl/97500043
      6c7bef55
    • Russ Cox's avatar
      cmd/nm, cmd/objdump: fix elf symbol types · 8e22903b
      Russ Cox authored
      Turns out elf.File.Sections is indexed by the actual
      section number, not the number minus one.
      I don't know why I thought the -1 was necessary.
      
      Fixes objdump test (and therefore build) on ELF systems.
      
      While we're here, fix bounds on gnuDump so that we
      don't crash when asked to disassemble outside
      the text segment. May fix Windows build or at least
      make the failure more interesting.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/92390043
      8e22903b
    • Guillaume J. Charmes's avatar
      net: detect changes to /etc/resolv.conf. · bf1d400d
      Guillaume J. Charmes authored
      Implement the changes as suggested by rsc.
      Fixes #6670.
      
      LGTM=josharian, iant
      R=golang-codereviews, iant, josharian, mikioh.mikioh, alex, gobot
      CC=golang-codereviews, rsc
      https://golang.org/cl/83690045
      bf1d400d
  2. 14 May, 2014 9 commits
  3. 13 May, 2014 12 commits
  4. 12 May, 2014 9 commits
    • Russ Cox's avatar
      cmd/gc: fix liveness vs regopt mismatch for input variables · 26ad5d4f
      Russ Cox authored
      The inputs to a function are marked live at all times in the
      liveness bitmaps, so that the garbage collector will not free
      the things they point at and reuse the pointers, so that the
      pointers shown in stack traces are guaranteed not to have
      been recycled.
      
      Unfortunately, no one told the register optimizer that the
      inputs need to be preserved at all call sites. If a function
      is done with a particular input value, the optimizer will stop
      preserving it across calls. For single-word values this just
      means that the value recorded might be stale. For multi-word
      values like slices, the value recorded could be only partially stale:
      it can happen that, say, the cap was updated but not the len,
      or that the len was updated but not the base pointer.
      Either of these possibilities (and others) would make the
      garbage collector misinterpret memory, leading to memory
      corruption.
      
      This came up in a real program, in which the garbage collector's
      'slice len ≤ slice cap' check caught the inconsistency.
      
      Fixes #7944.
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=golang-codereviews, khr
      https://golang.org/cl/100370045
      26ad5d4f
    • Josh Bleecher Snyder's avatar
      cmd/gc: alias more variables during register allocation · 03c0f3fe
      Josh Bleecher Snyder authored
      This is joint work with Daniel Morsing.
      
      In order for the register allocator to alias two variables, they must have the same width, stack offset, and etype. Code generation was altering a variable's etype in a few places. This prevented the variable from being moved to a register, which in turn prevented peephole optimization. This failure to alias was very common, with almost 23,000 instances just running make.bash.
      
      This phenomenon was not visible in the register allocation debug output because the variables that failed to alias had the same name. The debugging-only change to bits.c fixes this by printing the variable number with its name.
      
      This CL fixes the source of all etype mismatches for 6g, all but one case for 8g, and depressingly few cases for 5g. (I believe that extending CL 6819083 to 5g is a prerequisite.) Fixing the remaining cases in 8g and 5g is work for the future.
      
      The etype mismatch fixes are:
      
      * [gc] Slicing changed the type of the base pointer into a uintptr in order to perform arithmetic on it. Instead, support addition directly on pointers.
      
      * [*g] OSPTR was giving type uintptr to slice base pointers; undo that. This arose, for example, while compiling copy(dst, src).
      
      * [8g] 64 bit float conversion was assigning int64 type during codegen, overwriting the existing uint64 type.
      
      Note that some etype mismatches are appropriate, such as a struct with a single field or an array with a single element.
      
      With these fixes, the number of registerizations that occur while running make.bash for 6g increases ~10%. Hello world binary size shrinks ~1.5%. Running all benchmarks in the standard library show performance improvements ranging from nominal to substantive (>10%); a full comparison using 6g on my laptop is available at https://gist.github.com/josharian/8f9b5beb46667c272064. The microbenchmarks must be taken with a grain of salt; see issue 7920. The few benchmarks that show real regressions are likely due to issue 7920. I manually examined the generated code for the top few regressions and none had any assembly output changes. The few benchmarks that show extraordinary improvements are likely also due to issue 7920.
      
      Performance results from 8g appear similar to 6g.
      
      5g shows no performance improvements. This is not surprising, given the discussion above.
      
      Update #7316
      
      LGTM=rsc
      R=rsc, daniel.morsing, bradfitz
      CC=dave, golang-codereviews
      https://golang.org/cl/91850043
      03c0f3fe
    • Russ Cox's avatar
      cmd/go: detect import cycle caused by test code · 2497c430
      Russ Cox authored
      The runtime was detecting the cycle already,
      but we can give a better error without even
      building the binary.
      
      Fixes #7789.
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=golang-codereviews
      https://golang.org/cl/96290043
      2497c430
    • Ian Lance Taylor's avatar
      cmd/go: link SWIG objects directly rather than using a shared library · 02cc45ad
      Ian Lance Taylor authored
      This change requires using SWIG version 3.0 or later.  Earlier
      versions of SWIG do not generate the pragmas required to use
      the external linker.
      
      Fixes #7155.
      Fixes #7156.
      
      LGTM=rsc
      R=rsc
      CC=golang-codereviews
      https://golang.org/cl/97120046
      02cc45ad
    • Russ Cox's avatar
      cmd/gc: fix escape analysis for slice of array · f078711b
      Russ Cox authored
      Fixes #7931.
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=golang-codereviews
      https://golang.org/cl/100390044
      f078711b
    • Fabrizio Milo's avatar
      net/http: fix flaky test · 7e8bc474
      Fabrizio Milo authored
      Prevent idle transport on race condition.
      
      Fixes #7847
      
      LGTM=bradfitz
      R=golang-codereviews, bradfitz
      CC=golang-codereviews
      https://golang.org/cl/96230044
      7e8bc474
    • Brad Fitzpatrick's avatar
      A+C: Fabrizio Milo (individual CLA) · fb392867
      Brad Fitzpatrick authored
      Generated by addca.
      
      R=gobot
      CC=golang-codereviews
      https://golang.org/cl/100390045
      fb392867
    • Russ Cox's avatar
      cmd/gc: record line number for auto-generated wrappers as <autogenerated>:1 · 9b976f5f
      Russ Cox authored
      Before we used line 1 of the first source file.
      This should be clearer.
      
      Fixes #4388.
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=golang-codereviews
      https://golang.org/cl/92250044
      9b976f5f
    • Brad Fitzpatrick's avatar
      undo CL 92210044 / 5cb21eee2d35 · c91aea6c
      Brad Fitzpatrick authored
      <enter reason for undo>
      
      ««« original CL description
      net: make use of SO_LINGER_SEC on darwin
      
      Fixes #7971.
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=golang-codereviews
      https://golang.org/cl/92210044
      »»»
      
      TBR=iant
      R=golang-codereviews
      CC=golang-codereviews
      https://golang.org/cl/96220049
      c91aea6c