1. 28 Aug, 2014 8 commits
    • Michael Hudson-Doyle's avatar
      debug/elf: support arm64 relocations · 299117ec
      Michael Hudson-Doyle authored
      This adds the minimal support for AArch64/arm64 relocations
      needed to get cgo to work (when an isomorphic patch is applied
      to gccgo) and a test.
      
      This change uses the "AAarch64" name for the architecture rather
      than the more widely accepted "arm64" because that's the name that
      the relevant docs from ARM such as
      
         http://infocenter.arm.com/help/topic/com.arm.doc.ihi0056b/IHI0056B_aaelf64.pdf
      
      all use.
      
      Fixes #8533.
      
      LGTM=iant
      R=golang-codereviews, aram, gobot, iant, minux
      CC=golang-codereviews
      https://golang.org/cl/132000043
      299117ec
    • Russ Cox's avatar
      cmd/5l, cmd/6l, cmd/8l: fix nacl binary corruption bug · a9b2651a
      Russ Cox authored
      NaCl requires the addition of a 32-byte "halt sled" at the end
      of the text segment. This means that segtext.len is actually
      32 bytes shorter than reality. The computation of the file offset
      of the end of the data segment did not take this 32 bytes into
      account, so if len and len+32 rounded up (by 64k) to different
      values, the symbol table overwrote the last page of the data
      segment.
      
      The last page of the data segment is usually the C .string
      symbols, which contain the strings used in error prints
      by the runtime. So when this happens, your program
      probably crashes, and then when it does, you get binary
      garbage instead of all the usual prints.
      
      The chance of hitting this with a randomly sized text segment
      is 32 in 65536, or 1 in 2048.
      
      If you add or remove ANY code while trying to debug this
      problem, you're overwhelmingly likely to bump the text
      segment one way or the other and make the bug disappear.
      
      Correct all the computations to use segdata.fileoff+segdata.filelen
      instead of trying to rederive segdata.fileoff.
      
      This fixes the failure during the nacl/amd64p32 build.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/135050043
      a9b2651a
    • Russ Cox's avatar
      runtime: fix nacl build · f9b9ecc5
      Russ Cox authored
      The NaCl "system calls" were assumed to have a compatible
      return convention with the C compiler, and we were using
      tail jumps to those functions. Don't do that anymore.
      
      Correct mistake introduced in newstackcall duringconversion
      from (SP) to (FP) notation. (Actually this fix, in asm_amd64p32.s,
      slipped into the C compiler change, but update the name to
      match what go vet wants.)
      
      Correct computation of caller stack pointer in morestack:
      on amd64p32, the saved PC is the size of a uintreg, not uintptr.
      This may not matter, since it's been like this for a while,
      but uintreg is the correct one. (And on non-NaCl they are the same.)
      
      This will allow the NaCl build to get much farther.
      It will probably still not work completely.
      There's a bug in 6l that needs fixing too.
      
      TBR=minux
      CC=golang-codereviews
      https://golang.org/cl/134990043
      f9b9ecc5
    • Dave Cheney's avatar
      runtime: fix arm5 softfloat build · 433d6437
      Dave Cheney authored
      runtime._sfloat2 now returns the lr value on the stack, not R0.
      
      Credit to Russ Cox for the fix.
      
      LGTM=rsc
      R=rsc
      CC=golang-codereviews
      https://golang.org/cl/133120045
      433d6437
    • Russ Cox's avatar
      runtime: fix arm build · 45c819b2
      Russ Cox authored
      TBR=minux
      CC=golang-codereviews
      https://golang.org/cl/137810043
      45c819b2
    • Russ Cox's avatar
      cmd/cc, runtime: preserve C runtime type names in generated Go · d21638b5
      Russ Cox authored
      uintptr or uint64 in the runtime C were turning into uint in the Go,
      bool was turning into uint8, and so on. Fix that.
      
      Also delete Go wrappers for C functions.
      The C functions can be called directly now
      (but still eventually need to be converted to Go).
      
      LGTM=bradfitz, minux, iant
      R=golang-codereviews, bradfitz, iant, minux
      CC=golang-codereviews, khr, r
      https://golang.org/cl/138740043
      d21638b5
    • Matthew Dempsky's avatar
      cmd/{addr2line,objdump}: fix finding pclntab and symtab for pe and plan9obj · 43d4f93c
      Matthew Dempsky authored
      Broken by 8b5fc7c59d05.
      
      Update #8092
      
      LGTM=iant, alex.brainman
      R=rsc, iant, alex.brainman
      CC=golang-codereviews
      https://golang.org/cl/138770043
      43d4f93c
    • Matthew Dempsky's avatar
      cmd/{ld,link,objdump}, runtime, debug/gosym: move linker-defined symbols into runtime package · 2c110a11
      Matthew Dempsky authored
      Fixes #8092.
      
      LGTM=rsc
      R=iant, rsc
      CC=golang-codereviews
      https://golang.org/cl/126790043
      2c110a11
  2. 27 Aug, 2014 9 commits
    • Russ Cox's avatar
      runtime: fix plan9 build · 9e360926
      Russ Cox authored
      sighandler now returns its value on the stack.
      
      TBR=0intro
      CC=golang-codereviews
      https://golang.org/cl/135900043
      9e360926
    • Russ Cox's avatar
      runtime: fix solaris build · 997809c8
      Russ Cox authored
      nanotime1 is not a Go function and must not store its result at 0(FP).
      That overwrites some data owned by the caller.
      
      TBR=aram
      CC=golang-codereviews
      https://golang.org/cl/138730043
      997809c8
    • Russ Cox's avatar
      runtime: fix windows signal handlers · c548cc2e
      Russ Cox authored
      Windows needs the return result in AX, but runtime.sighandler
      no longer stores it in AX. Load it back during the assembly trampoline.
      
      TBR=brainman
      CC=golang-codereviews
      https://golang.org/cl/133980043
      c548cc2e
    • Russ Cox's avatar
      runtime: give nosplit functions 32 more bytes of headroom · fe91006a
      Russ Cox authored
      The Go calling convention uses more stack space than C.
      On 64-bit systems we've been right up against the limit
      (128 bytes, so only 16 words) and doing awful things to
      our source code to work around it. Instead of continuing
      to do awful things, raise the limit to 160 bytes.
      I am prepared to raise the limit to 192 bytes if necessary,
      but I think this will be enough.
      
      Should fix current link-time stack overflow errors on
              - nacl/arm
              - netbsd/amd64
              - openbsd/amd64
              - solaris/amd64
              - windows/amd64
      
      TBR=r
      CC=golang-codereviews, iant
      https://golang.org/cl/131450043
      fe91006a
    • Brad Fitzpatrick's avatar
      runtime: restore header to first goroutine in Stack · 9a5654ab
      Brad Fitzpatrick authored
      It appears to have been accidentally lost when converting
      Stack from C to Go in https://golang.org/cl/129510043
      
      LGTM=rsc
      R=golang-codereviews
      CC=golang-codereviews, josharian, khr, remyoudompheng, rsc
      https://golang.org/cl/136870043
      9a5654ab
    • Russ Cox's avatar
      cmd/cc, runtime: convert C compilers to use Go calling convention · 25f6b02a
      Russ Cox authored
      To date, the C compilers and Go compilers differed only in how
      values were returned from functions. This made it difficult to call
      Go from C or C from Go if return values were involved. It also made
      assembly called from Go and assembly called from C different.
      
      This CL changes the C compiler to use the Go conventions, passing
      results on the stack, after the arguments.
      [Exception: this does not apply to C ... functions, because you can't
      know where on the stack the arguments end.]
      
      By doing this, the CL makes it possible to rewrite C functions into Go
      one at a time, without worrying about which languages call that
      function or which languages it calls.
      
      This CL also updates all the assembly files in package runtime to use
      the new conventions. Argument references of the form 40(SP) have
      been rewritten to the form name+10(FP) instead, and there are now
      Go func prototypes for every assembly function called from C or Go.
      This means that 'go vet runtime' checks effectively every assembly
      function, and go vet's output was used to automate the bulk of the
      conversion.
      
      Some functions, like seek and nsec on Plan 9, needed to be rewritten.
      
      Many assembly routines called from C were reading arguments
      incorrectly, using MOVL instead of MOVQ or vice versa, especially on
      the less used systems like openbsd.
      These were found by go vet and have been corrected too.
      If we're lucky, this may reduce flakiness on those systems.
      
      Tested on:
              darwin/386
              darwin/amd64
              linux/arm
              linux/386
              linux/amd64
      If this breaks another system, the bug is almost certainly in the
      sys_$GOOS_$GOARCH.s file, since the rest of the CL is tested
      by the combination of the above systems.
      
      LGTM=dvyukov, iant
      R=golang-codereviews, 0intro, dave, alex.brainman, dvyukov, iant
      CC=golang-codereviews, josharian, r
      https://golang.org/cl/135830043
      25f6b02a
    • Rick Hudson's avatar
      runtime: changes to g->atomicstatus (nee status) to support concurrent GC · 0a7c7ac8
      Rick Hudson authored
      Every change to g->atomicstatus is now done atomically so that we can
      ensure that all gs pass through a gc safepoint on demand. This allows
      the GC to move from one phase to the next safely. In some phases the
      stack will be scanned. This CL only deals with the infrastructure that
      allows g->atomicstatus to go from one state to another. Future CLs
      will deal with scanning and monitoring what phase the GC is in.
      
      The major change was to moving to using a Gscan bit to indicate that
      the status is in a scan state. The only bug fix was in oldstack where
      I wasn't moving to a Gcopystack state in order to block scanning until
      the new stack was in place. The proc.go file is waiting for an atomic
      load instruction.
      
      LGTM=rsc
      R=golang-codereviews, dvyukov, josharian, rsc
      CC=golang-codereviews, khr
      https://golang.org/cl/132960044
      0a7c7ac8
    • Russ Cox's avatar
      CONTRIBUTORS: add Rick Hudson (Google CLA) · 56f8b297
      Russ Cox authored
      TBR=rlh
      CC=golang-codereviews
      https://golang.org/cl/131410043
      56f8b297
    • Dave Cheney's avatar
      cmd/gc: fix undefined behaviour warnings in mparith3.c · 9c504696
      Dave Cheney authored
      Update #8527
      
      Fixes two warnings:
      
      src/cmd/gc/mparith3.c:255:10: runtime error: shift exponent 52 is too large for 32-bit type 'int'
      src/cmd/gc/mparith3.c:254:14: runtime error: shift exponent 52 is too large for 32-bit type 'int'
      
      LGTM=rsc
      R=r, dvyukov, rsc
      CC=golang-codereviews
      https://golang.org/cl/134940044
      9c504696
  3. 26 Aug, 2014 11 commits
  4. 25 Aug, 2014 12 commits