- 05 Nov, 2019 1 commit
-
-
Cherry Zhang authored
Flip back to the old object files for Go 1.14. Change-Id: I4ad499460fb7156b63fc63e9c6ea4f7099e20af2 Reviewed-on: https://go-review.googlesource.com/c/go/+/204098 Run-TryBot: Cherry Zhang <cherryyz@google.com> Reviewed-by: Than McIntosh <thanm@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
- 03 Nov, 2019 5 commits
-
-
Cherry Zhang authored
Change-Id: I93ad769595fa343400afa342af12e1445abff084 Reviewed-on: https://go-review.googlesource.com/c/go/+/204918 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
-
Cherry Zhang authored
R_ADDRCUOFF refers to the offset from the start of the compilation unit. Now that we could have multiple compilation units per package, we should use the start of the compilation unit, instead of the start of the package. Change-Id: I3d6a3c5a5c47c9ccf88091ed05413ced826f9934 Reviewed-on: https://go-review.googlesource.com/c/go/+/204828 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
-
Cherry Zhang authored
Clean merge. Change-Id: I26a4e3d4c09a928c9fd95e394304ee10319ca7c5
-
Cherry Zhang authored
Currently, at compile time we emit a function DIE with '"".' in the function name, and we expand it at link time, with a really ugly function. We can just expand it at compile time instead. This way, we don't need to modify the symbol content at link time, and also no need to allocate memory for that. Keep the linker expansion, in case the compiler is invoked without the import path. Change-Id: Id53cd2e2d3eb61efceb8d44479c4b6ef890baa43 Reviewed-on: https://go-review.googlesource.com/c/go/+/204826Reviewed-by: Than McIntosh <thanm@google.com>
-
Cherry Zhang authored
Change-Id: I2e52206a95c9463df5661664726a8b3bbf3ad1fc Reviewed-on: https://go-review.googlesource.com/c/go/+/204825Reviewed-by: Than McIntosh <thanm@google.com>
-
- 02 Nov, 2019 10 commits
-
-
Cherry Zhang authored
In the deadcode pass, we use a work queue for the flood algorithm. Currently this is a simple LIFO queue. In this order, there is poor locality in accessing object files. Since the global indices are assigned in package DAG order, edges are mostly either within a package or from a smaller index to a larger one. (With named symbols, there can be backward edges, but shouldn't be too many.) Using a min-heap for the work queue, we access all symbols in one object, then move to next one. It rarely needs to revisit an object that is already visted. This should result in better locality. Benchmark result from Than (thanks!): name old time/op new time/op delta LinkCompiler 1.74s ±11% 1.61s ± 9% -7.80% (p=0.000 n=20+19) LinkWithoutDebugCompiler 1.27s ±11% 1.15s ± 9% -9.02% (p=0.000 n=20+20) Currently this uses the container/heap package, which uses interface elements. If this allocates too much, we may consider to hand-code the min heap. Change-Id: I216d5291c432fe1f40b0b8f4f1b9d388807bf6c5 Reviewed-on: https://go-review.googlesource.com/c/go/+/204438Reviewed-by: Jeremy Faller <jeremy@golang.org>
-
Cherry Zhang authored
Currently in the linker we load internal packges first, then the main package, and then load imported packages following the dependency graph. As a result, packages are loaded mostly in the dependency order, except the internal packages. The global symbol indices are assigned the same way. By loading the internal packages at the end, the packages are loaded in the dependency order, so are the global indices. This way, a relocation edge is mostly either within a packge or a forward edge from a smaller index to a larger one. This allows us to use a min-heap work queue in the deadcode pass, to achieve better spatial locality (in the next CL). Change-Id: I01fa9b3cf0c9e9e66006040f6378a51fd78f0f39 Reviewed-on: https://go-review.googlesource.com/c/go/+/204437Reviewed-by: Jeremy Faller <jeremy@golang.org>
-
Cherry Zhang authored
Cgo internal linking was disabled when switching to new object files. Reeanble the tests, as they get supported. Change-Id: I11d2ac8785cce73f3a42f6935c10d9f067bc90a4 Reviewed-on: https://go-review.googlesource.com/c/go/+/204520Reviewed-by: Than McIntosh <thanm@google.com>
-
Jeremy Faller authored
Change-Id: I0fe88df182f13e7f04c8de0b82e111db441a26e2 Reviewed-on: https://go-review.googlesource.com/c/go/+/204341 Run-TryBot: Cherry Zhang <cherryyz@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
-
Keith Randall authored
Fixes #34778 Change-Id: If8225a7c41cb2af3f67157fb9670eef86272e85e Reviewed-on: https://go-review.googlesource.com/c/go/+/204997 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Katie Hockman authored
Even though bitwise operations may be slightly more performant, the readability improvement of a mod operation is worth the tradeoff. Change-Id: I352c92ad355c6eb6ef99e3da00e1eff2d2ea5812 Reviewed-on: https://go-review.googlesource.com/c/go/+/204739Reviewed-by: Filippo Valsorda <filippo@golang.org> Run-TryBot: Filippo Valsorda <filippo@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Ian Lance Taylor authored
Updates #10958 Updates #24543 Fixes #35294 Change-Id: I60f024d08451565df6d9751dab9832b50cbf637a Reviewed-on: https://go-review.googlesource.com/c/go/+/204957 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
-
Joshua M. Clulow authored
On illumos systems, and at least historically on Solaris systems, it is possible for port_getn(3C) calls to return some number of events and then fail with error ETIME. Generally we expect this to happen if the caller passes an nget value larger than 1 and calls with a timeout; if less than the requested number of events accumulate the system will still return them after timeout failure so the caller must check the updated nget value in the ETIME case. Note that although less likely this can still happen even when requesting just 1 event, especially with a short timeout value or on a busy system. Fixes #35261 Change-Id: I0d83251b69a2fadc64c4e8e280aa596e2e1548ba Reviewed-on: https://go-review.googlesource.com/c/go/+/204801Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Constantin Konstantinidis authored
Goroutines clean up takes longer when using deprecated CloseNotifier. Fixes #35122 Change-Id: Id820a3012b5c781ddfb294b38ee3b009624e398c Reviewed-on: https://go-review.googlesource.com/c/go/+/204661 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Cherry Zhang authored
In newobj mode, cgo attributes are typically set later, as we create sym.Symbols later. But when internal cgo linking, the host object loaders still work with sym.Symbols, and the cgo attributes need to be set for them to work properly. Therefore, set them early. This will cause creating some Symbols eagerly, but they are mostly host object symbols and will need to be created anyway. Now all cgo internal linking tests pass on ELF systems. Change-Id: I023a4df4429acc8ebf5e185f62e6809198497a78 Reviewed-on: https://go-review.googlesource.com/c/go/+/204857Reviewed-by: Than McIntosh <thanm@google.com>
-
- 01 Nov, 2019 24 commits
-
-
Ian Lance Taylor authored
If multiple goroutines call time.(*Timer).Reset then the timer will go from timerWaiting to timerDeleted to timerModifying to timerModifiedLater. The timer can be on a different P, meaning that simultaneously cleantimers could change it from timerDeleted to timerRemoving to timerRemoved. If Reset sees timerRemoved, it was doing an atomic.Store of timerWaiting, meaning that it did not necessarily see the other values set in the timer, so the timer could appear to be in an inconsistent state. Use atomic.Cas to avoid that possibility. Updates #6239 Updates #27707 Fixes #35272 Change-Id: I1d59a13dc4f2ff4af110fc6e032c8c9d59cfc270 Reviewed-on: https://go-review.googlesource.com/c/go/+/204717 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
-
Cuong Manh Le authored
In CL 204617, I intend to make "bound" parameter to have special meaning in typecheckarraylit, so we can distinguish between type-checks array literal and slice literal. But we end up with other solution. The CL was submitted without reverting the "bound" parameter in case of slice literal. Technically, it's not harmful, but causes the code harder to read and maintain. Change-Id: Ia522ccc9a6b8e25d7eaad4aa4957cb4fa18edc60 Reviewed-on: https://go-review.googlesource.com/c/go/+/204618 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
-
Domas Tamašauskas authored
User's program was mutating time.Local variable and crashing itself as a consequence. Instead of documenting that time.Local variable should not be mutated, recommended way of setting the system's time zone has been documented. Fixes #34814 Change-Id: I7781189855c3bf2ea979dfa07f86c283eed27091 Reviewed-on: https://go-review.googlesource.com/c/go/+/200457Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Ian Lance Taylor authored
I was doing some testing with GODEBUG=schedtrace=1,scheddetail=1 and I noticed that the program hung after a throw with "all goroutines are asleep". This is because when doing a throw or fatal panic with schedtrace the panic code does a final schedtrace, which needs to acquire the scheduler lock. The checkdead function is always called with the scheduler lock held. So checkdead would throw with the scheduler lock held, then the panic code would call schedtrace, which would block trying to acquire the scheduler lock. This problem will only happen for people debugging the runtime, but it's easy to avoid by having checkdead unlock the scheduler lock before it throws. I only did this for the throws that can happen for a normal program, not for throws that indicate some corruption in the scheduler data. Change-Id: Ic62277b3ca6bee6f0fca8d5eb516c59cb67855cb Reviewed-on: https://go-review.googlesource.com/c/go/+/204778 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Michael Anthony Knyszek authored
This change turns off the scavenger if there's less than one physical page of work to do. If there's less than one phyiscal page of work today, then the computed time for the work to be done will be zero, resulting in a floating point division by zero. This is bad on two accounts. On the one hand it could cause a fault on some systems. On the other hand, it could cause the pacing computations done by the scavenger to be nonsense. While this is generally harmless in the case where there's a very small amount of work to do anyway (the scavenger might just back off expontentially forever, or do some work and immediately sleep, because there's not much of it to do), it causes problems for the deadlock checker. On platforms with a larger physical page size, such as 64 KiB, we might hit this path in a deadlock scenario, in which case the deadlock checker will never fire and we'll just hang. Specifically, this happens on ppc64 trybot tests, which is where the issue was discovered. Fixes #34575. Change-Id: I8677db539447b2f0e75b8cfcbe33932244e1508c Reviewed-on: https://go-review.googlesource.com/c/go/+/203517 Run-TryBot: Michael Knyszek <mknyszek@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
-
Brad Fitzpatrick authored
For debugging. (The "go1.4" can be misleading since it might actually be go1.4.3 or go1.11 or go1.12 or master) Change-Id: I27520b931a2be018de577a299592d082260aa467 Reviewed-on: https://go-review.googlesource.com/c/go/+/204757 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Bryan C. Mills authored
Suppress “finding” messages unless they are unusually slow, and “extracting” messages always (they almost always occur conjunction with “downloading”, which is already logged). Log “found” messages for module dependencies added to satisfy missing import paths. Log top-level version changes in 'go get' when the selected version is not identical to the version requested on the command line. Updates #26152 Updates #33284 Change-Id: I4d0de60fab58d7cc7df8a2aff05c8b5b2220e626 Reviewed-on: https://go-review.googlesource.com/c/go/+/204777 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
-
Lorenz Bauer authored
A majority of work is spent in dataSize when en/decoding the same struct over and over again. This wastes a lot of work, since the result doesn't change for a given reflect.Value. Cache the result of the function for structs, so that subsequent calls to dataSize can avoid doing work. name old time/op new time/op delta ReadStruct 1.00µs ± 1% 0.37µs ± 1% -62.99% (p=0.029 n=4+4) WriteStruct 1.00µs ± 3% 0.37µs ± 1% -62.69% (p=0.008 n=5+5) name old speed new speed delta ReadStruct 75.1MB/s ± 1% 202.9MB/s ± 1% +170.16% (p=0.029 n=4+4) WriteStruct 74.8MB/s ± 3% 200.4MB/s ± 1% +167.96% (p=0.008 n=5+5) Fixes #34471 Change-Id: Ic5d987ca95f1197415ef93643a0af6fc1224fdf0 Reviewed-on: https://go-review.googlesource.com/c/go/+/199539Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Cherry Zhang authored
Change-Id: Iae1ca888729014b6fec97d7bd7ae082dbceb9fe5 Reviewed-on: https://go-review.googlesource.com/c/go/+/204837 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
-
Bryan C. Mills authored
Updates #30185 Updates #33326 Updates #34822 Change-Id: Ie13651585898d1bbbf4f779b97ee50b6c7e7ad50 Reviewed-on: https://go-review.googlesource.com/c/go/+/204521 Run-TryBot: Bryan C. Mills <bcmills@google.com> Reviewed-by: Jay Conrod <jayconrod@google.com>
-
Than McIntosh authored
Change the loader to do more bulk allocation when making slices of small objects (sym.Reloc, etc) as part of creating and populating sym.Symbols in loader.LoadFull(). This replaces a large number of small allocations with a smaller number of large allocations, improving performace. Compilebench numbers (linker portion) for this change: name old time/op new time/op delta LinkCompiler 1.71s ±11% 1.57s ± 9% -8.35% (p=0.000 n=19+20) LinkWithoutDebugCompiler 1.19s ±14% 1.10s ±13% -7.93% (p=0.000 n=20+19) name old user-time/op new user-time/op delta LinkCompiler 1.86s ±15% 1.34s ±10% -28.02% (p=0.000 n=20+20) LinkWithoutDebugCompiler 1.05s ±14% 0.95s ± 9% -9.17% (p=0.000 n=19+20) Hyperkube from kubernetes doesn't show any significant benefit (which seems a little surprising). Change-Id: Ide97f78532fb60b08bb6e4cfa097e9058f7ea8ab Reviewed-on: https://go-review.googlesource.com/c/go/+/203457 Run-TryBot: Than McIntosh <thanm@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com> Reviewed-by: Jeremy Faller <jeremy@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Tobias Klauser authored
Based on the riscv-go port and the linux/riscv64 files in x/sys/unix. Updates #27532 Change-Id: Ib33a59a61f6b2721b12292c18f1fc9f9d0509cd3 Reviewed-on: https://go-review.googlesource.com/c/go/+/204659 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Jeremy Faller authored
config.go needs to be removed from this CL. Change-Id: I04a267feeae1551bb18f6a03a725adc9db593fdb Reviewed-on: https://go-review.googlesource.com/c/go/+/204099Reviewed-by: Cherry Zhang <cherryyz@google.com>
-
empijei authored
The current implementation performs a plain map lookup, but other header methods canonicalize header keys before using them. Fixes #34918 Change-Id: Id4120488b8b39ecee97fa7a6ad8a34158687ffcd Reviewed-on: https://go-review.googlesource.com/c/go/+/201357Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Than McIntosh authored
Fixed a couple of minor conflicts in lib.go and deadcode.go relating to debug logging. Change-Id: I58335fc42ab1f1f3409fd8354da4f26419e8fb22
-
Tobias Klauser authored
Based on the riscv-go port. Updates #27532 Change-Id: I3a4d86783fbd625e3ade16d08f87d66e4502f3f7 Reviewed-on: https://go-review.googlesource.com/c/go/+/204660 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Than McIntosh authored
Fix up the new dead code pass to include support for populating the ctxt "Reachparent" map, which is needed to support field tracking. Since we don't have sym.Symbols created at the point where new dead code runs, keep track of reachability using global symbol indices, and then once loader.LoadFull is complete we can translate the index mappings into symbol mappings. The fieldtracking output is unfortunately different relative to master, due to differences in the order in which symbols are encountered in deadcode, but I have eyeballed the results to make sure they look reasonable. Change-Id: I48c7a4597f05c00f15af3bfd37fc15ab4d0017c2 Reviewed-on: https://go-review.googlesource.com/c/go/+/204342 Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
-
Cherry Zhang authored
ABI alias references in Go symbols are resolved during loadObjFull. But for external symbols they are not resolved. If there is a reference from an external symbol to a Go ABIInternal symbol, this reference will be invalid as it is not resolved. The old code resolve ABI aliases in the deadcode pass. But the new deadcode pass doesn't do it, as it works with indices instead of Symbols. We do this in LoadFull. This makes all internal cgo linking tests pass on Mach-O. Change-Id: Iac6c084c03f5ddbcc9455527800ce7ed7313f9a7 Reviewed-on: https://go-review.googlesource.com/c/go/+/204698 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
-
Jay Conrod authored
Updates #35290 Change-Id: I09cad17f09e78c2bf6a9de98b01f13ed383ca006 Reviewed-on: https://go-review.googlesource.com/c/go/+/204643 Run-TryBot: Jay Conrod <jayconrod@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
-
Tobias Klauser authored
Change-Id: Ie76303e403f0539bdfe14f6bb5f32896df916bce Reviewed-on: https://go-review.googlesource.com/c/go/+/204657 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Ian Lance Taylor authored
The addAdjustedTimers function was a late addition, and it got some of the state machine wrong, leading to failures like https://storage.googleapis.com/go-build-log/930576b6/windows-amd64-2016_53d0319e.log Updates #6239 Updates #27707 Change-Id: I9e94e563b4698ff3035ce609055ca292b9cab3df Reviewed-on: https://go-review.googlesource.com/c/go/+/204280 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
-
Cherry Zhang authored
In internal linking mode, we need to process cgo_import_static directives before loading host objects, because the directive is to tell the host object loader how to deal with imported symbols. This should fix linking with old object files. I think there needs some similar logic for new object files, but I'll leave that for later. Change-Id: Icaa286de626ea1876086dbdd015047084c92caf9 Reviewed-on: https://go-review.googlesource.com/c/go/+/204697 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
-
Cuong Manh Le authored
Fixes #35291 Change-Id: I11ae367b6e972cd9e7a22bbc2cb23d32f4d72b98 Reviewed-on: https://go-review.googlesource.com/c/go/+/204617 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
-
Audrius Butkevicius authored
Fixes #35222 Change-Id: I8be45092ac4079d21ff54661637a3aa8ec4eb9bc GitHub-Last-Rev: 954a016c9bb749268e97489911ea577a6df9fb4c GitHub-Pull-Request: golang/go#35298 Reviewed-on: https://go-review.googlesource.com/c/go/+/204601 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-