From ba2db584c77feda13f0a6df3ebf5a225bf0a8225 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 6 Dec 2017 16:15:08 +0100 Subject: [PATCH 01/21] doc: fix spelling in editor guide Change-Id: If16f069f410d043fd11864a4c1a7d54b5b4922d2 Reviewed-on: https://go-review.googlesource.com/82200 Reviewed-by: Ian Lance Taylor --- doc/editors.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/editors.html b/doc/editors.html index 84fb068918bfd..8228eb257800d 100644 --- a/doc/editors.html +++ b/doc/editors.html @@ -58,7 +58,7 @@

Options

Yes - Autocompletion of identifers (variable, method, and function names) + Autocompletion of identifiers (variable, method, and function names) Yes Yes Yes From d62809096ae13bd6caf00f5b604188c528376ed5 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 5 Dec 2017 22:20:46 -0500 Subject: [PATCH 02/21] doc/go1.10: update release notes for recent commits Change-Id: Id6ced9a6c76131263041cdaf5ed17479be075fa6 Reviewed-on: https://go-review.googlesource.com/82075 Run-TryBot: Russ Cox TryBot-Result: Gobot Gobot Reviewed-by: Russ Cox --- doc/go1.10.html | 157 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 124 insertions(+), 33 deletions(-) diff --git a/doc/go1.10.html b/doc/go1.10.html index cdc0feee37354..a42c719c8264e 100644 --- a/doc/go1.10.html +++ b/doc/go1.10.html @@ -64,6 +64,19 @@

Ports

and improvements to the code generated by the compilers.

+

+As announced in the Go 1.9 release notes, +Go 1.10 now requires FreeBSD 10.3 or later; +support for FreeBSD 9.3 has been removed. +

+ +

+On 32-bit MIPS systems, the new environment variable settings +GOMIPS=hardfloat (the default) and +GOMIPS=softfloat select whether to use +hardware instructions or software emulation for floating-point computations. +

+

Tools

Default GOROOT & GOTMPDIR

@@ -198,19 +211,25 @@

Test

lines to make clearer when parallel tests pause and continue.

+

+The new go test -failfast flag +disables running additional tests after any test fails. +Note that tests running in parallel with the failing test are allowed to complete. +

+

Finally, the new go test -json flag filters test output through the new command go tool test2json to produce a machine-readable JSON-formatted description of test execution. -This should allow the creation of rich presentations of test execution +This allows the creation of rich presentations of test execution in IDEs and other tools.

For more details about all these changes, -see go help test +see go help test and the test2json documentation.

@@ -224,6 +243,12 @@

Cgo

Go structs and Go arrays are not supported in the type signatures of cgo-exported functions.

+

+TODO: CL 70890 "permit passing string values directly between Go and C." +
+TODO: CL 66332 "special case C ptr types to use uintptr." +

+

During toolchain bootstrap, the environment variables CC and CC_FOR_TARGET specify the default C compiler that the resulting toolchain will use for host and target builds, respectively. @@ -235,6 +260,9 @@

Cgo

to set the defaults used by the resulting toolchain. Later go build commands refer to the CC environment variable or else the built-in default. +

+ +

For more details, see the cgo documentation.

@@ -317,14 +345,13 @@

Diagnostics

Gofmt

-A few minor details of the default formatting of Go source code have changed. -First, some complex three-index slice expressions previously formatted like +Two minor details of the default formatting of Go source code have changed. +First, certain complex three-index slice expressions previously formatted like x[i+1 : j:k] and now format with more consistent spacing: x[i+1 : j : k]. Second, single-method interface literals written on a single line, which are sometimes used in type assertions, are no longer split onto multiple lines. -Third, blank lines following an opening brace are now always elided.

@@ -540,11 +567,6 @@

Minor changes to the library

as well as the major and minor device numbers for device files.

-Errors created by the package now begin with a consistent “tar:” prefix. -(Previously they almost all began with a consistent “archive/tar:” prefix.) -TODO: Why are we changing these? (#22740) -

-

The new Header.Format field of type Format controls which tar header format the Writer uses. @@ -584,13 +606,12 @@

Minor changes to the library

now support the widely-understood Info-Zip extension that encodes the time separately in the 32-bit Unix “seconds since epoch” form. The FileHeader's new Modified field of type time.Time obsoletes the ModifiedTime and ModifiedDate fields, which continue to hold the MS-DOS encoding. -The ModTime and -SetModTime methods -now simply read and write the new Modified field. The Reader and Writer now adopt the common convention that ZIP archive storing the Unix time encoding store the local time in the MS-DOS field, so that the time zone offset can be inferred. -TODO: These last bits are not true but probably should be (#22738) +For compatibility, the ModTime and +SetModTime methods +behave the same as in earlier releases; new code should use Modified directly.

The header for each file in a ZIP archive has a flag bit indicating whether @@ -606,10 +627,8 @@

Minor changes to the library

disables the heuristic entirely for that file.

-The Writer also now support setting the end-of-central-directory record's comment field, -by setting the Writer's new Comment field -before calling the Close method. -TODO: May change (#22737). +The Writer also now supports setting the end-of-central-directory record's comment field, +by calling the Writer's new SetComment method.

@@ -676,9 +695,17 @@

Minor changes to the library

PermittedURIDomains, and ExcludedURIDomains.

+

+The new MarshalPKCS1PublicKey +and ParsePKCS1PublicKey +functions convert an RSA public key to and from PKCS#1-encoded form. +

+

The new MarshalPKCS8PrivateKey -function converts a private key to PKCS#8 encoded form. +function converts a private key to PKCS#8-encoded form. +(ParsePKCS8PrivateKey +has existed since Go 1.)

@@ -701,6 +728,14 @@

Minor changes to the library

passed to sql.Open.

+Drivers that want to parse the configuration string only once per sql.DB +instead of once per sql.Conn, +or that want access to each sql.Conn's underlying context, +can make their Driver +implementations also implement DriverContext's +new OpenConnector method. +

+

Drivers that implement ExecerContext no longer need to implement Execer; similarly, drivers that implement QueryerContext @@ -762,10 +797,19 @@

Minor changes to the library

Marshal also now respects struct tags containing application directives.

+The new MarshalWithParams +function marshals its argument as if the additional params were its associated +struct field tag. +

+

Unmarshal now respects struct field tags using the explicit and tag directives.

+

+Both Marshal and Unmarshal now support a new struct field tag +numeric, indicating an ASN.1 NumericString. +

encoding/csv
@@ -780,11 +824,6 @@

Minor changes to the library

In the case of a syntax error in a CSV record that spans multiple input lines, Reader now reports the line on which the record started in the ParseError's new StartLine field.

-

-Reader also no longer strips carriage return characters -appearing before newline characters in multiline quoted strings. -TODO: Maybe not (#22746). -

encoding/hex
@@ -824,6 +863,17 @@

Minor changes to the library

+
encoding/pem
+
+

+Encode +and +EncodeToMemory +no longer generate partial output when presented with a +block that is impossible to encode as PEM data. +

+
+
encoding/xml

@@ -939,6 +989,19 @@

Minor changes to the library

+
math/cmplx
+
+

+Branch cuts and other boundary cases in +Asin, +Asinh, +Atan, +and +Sqrt +have been corrected to match the definitions used in the C99 standard. +

+
+
math/rand

@@ -946,13 +1009,6 @@

Minor changes to the library

Rand.Shuffle method shuffle an input sequence.

-

-The existing function and corresponding -Rand.Perm method -have been updated to use a more efficient algorithm, with the result -that the specific permutations they return have changed. -TODO: Remove? (#22744) -

math
@@ -1042,6 +1098,32 @@

Minor changes to the library

On the server side, FileServer and its single-file equivalent ServeFile now apply If-Range checks to HEAD requests. FileServer also now reports directory read failures to the Server's ErrorLog. +The content-serving handlers also now omit the Content-Type header when serving zero-length content. +

+

+ResponseWriter's WriteHeader method now panics +if passed an invalid (non-3-digit) status code. +

+

+Redirect now sets the Content-Type header before writing its HTTP response. +

+
+ +
net/http/httputil
+
+

+The ReverseProxy now invokes +the +On the client side, an HTTP proxy (most commonly configured by +ProxyFromEnvironment) +can now be specified as an https:// URL, +meaning that the client connects to the proxy over HTTPS before issuing a standard, proxied HTTP request. +(Previously, HTTP proxy URLs were required to begin with http:// or socks5://.) +

+

+On the server side, FileServer and its single-file equivalent ServeFile +now apply If-Range checks to HEAD requests. +FileServer also now reports directory read failures to the Server's ErrorLog.

Redirect now sets the Content-Type header before writing its HTTP response. @@ -1073,7 +1155,9 @@

Minor changes to the library

ReadMIMEHeader -now discards continuation (indented) header lines that appear before the first actual (unindented) header line. +now rejects any header that begins with a continuation (indented) header line. +Previously a header with an indented first line was treated as if the first line +were not indented.

@@ -1111,6 +1195,12 @@

Minor changes to the library

like http://host/ to a path like /my/api, resulting in a URL with a doubled slash: http://host//my/api.

+ +

+UserInfo's methods +now treat a nil receiver as equivalent to a pointer to a zero UserInfo. +Previously, they panicked. +

os
@@ -1224,7 +1314,8 @@

Minor changes to the library

known installation locations or in $GOROOT/lib/time/zoneinfo.zip.

-TODO: Maybe CL 68890. +The new function LoadLocationFromTZData +allows conversion of IANA time zone file data to a Location.

From 8114a855da66750ebebfe4bcaf3516b688c375c0 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 5 Dec 2017 23:36:53 -0500 Subject: [PATCH 03/21] doc/go1.10: process comments from CL 78131 PS 5 Change-Id: Ie246756452cd872961aeb659b35297c229504a3c Reviewed-on: https://go-review.googlesource.com/81936 Reviewed-by: Russ Cox --- doc/go1.10.html | 113 ++++++++++++++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 43 deletions(-) diff --git a/doc/go1.10.html b/doc/go1.10.html index a42c719c8264e..dcf45cd1883c1 100644 --- a/doc/go1.10.html +++ b/doc/go1.10.html @@ -22,6 +22,16 @@

DRAFT RELEASE NOTES - Introduction to Go 1.10

release notes. Go 1.10 is expected to be released in February 2018.

+ +

The latest Go release, version 1.10, arrives six months after go1.9. Most of its changes are in the implementation of the toolchain, runtime, and libraries. @@ -141,8 +151,8 @@

Build & Install

dependencies had been installed. To force the installation of dependencies, use the new go install -i flag. -Installing dependencies should not be necessary in general, -and the very concept or installed packages may disappear in a future release. +Installing dependency packages should not be necessary in general, +and the very concept of installed packages may disappear in a future release.

@@ -208,7 +218,7 @@

Test

The go test -v output now includes PAUSE and CONT status update -lines to make clearer when parallel tests pause and continue. +lines to mark when parallel tests pause and continue.

@@ -320,13 +330,14 @@

Pprof

The go tool pprof profile visualizer has been updated to -the latest version from github.com/google/pprof. +the latest version from github.com/google/pprof, +which includes an updated web interface.

Vet

-The go vet command now always has access to +The go vet command now always has access to complete, up-to-date type information when checking packages, even for packages using cgo or vendored imports. The reports should be more accurate as a result. Note that only go vet has access to this information; @@ -386,9 +397,10 @@

Compiler Toolchain

-TODO: What to say about DWARF work, if anything? -Global constants (CL 61019), variable decomposition (CL 50878), variable liveness and location lists (CL 41770), more? -What is enabled by default? +The DWARF debug information recorded in binaries has been improved in a few ways: +constant values are now recorded; +line number information is more accurate, making source-level stepping through a program work better; +and each package is now presented as its own DWARF compilation unit.

@@ -493,8 +505,8 @@

Assembler

-For the X86 64-bit port, the assembler now supports 359 new instructions -and is believed to be complete up to and including the Intel AVX-256 extensions. +For the X86 64-bit port, the assembler now supports 359 new instructions, +including the full AVX, AVX2, BMI, BMI2, F16C, FMA3, SSE2, SSE3, SSSE3, SSE4.1, and SSE4.2 extension sets. The assembler also no longer implements MOVL $0, AX as an XORL instruction, to avoid clearing the condition flags unexpectedly. @@ -509,12 +521,35 @@

Gccgo

Runtime

-TODO: Don't start new threads from locked threads or threads that Go did not create. LockOSThread/UnlockOSThread now nest. LockOSThread + return kills the thread +The behavior of nested calls to +LockOSThread and +UnlockOSThread +has changed. +These functions control whether a goroutine is locked to a specific operating system thread, +so that the goroutine only runs on that thread, and the thread only runs that goroutine. +Previously, calling LockOSThread more than once in a row +was equivalent to calling it once, and a single UnlockOSThread +always unlocked the thread. +Now, the calls nest: if LockOSThread is called multiple times, +UnlockOSThread must be called the same number of times +in order to unlock the thread. +Existing code that was careful not to nest these calls will remain correct. +Existing code that incorrectly assumed the calls nested will become correct. +Most uses of these functions in public Go source falls into the second category. +

+ +

+Because one common use of LockOSThread and UnlockOSThread +is to allow Go code to reliably modify thread-local state (for example, Linux or Plan 9 name spaces), +the runtime now treats locked threads as unsuitable for reuse or for creating new threads.

Stack traces no longer include implicit wrapper functions (previously marked <autogenerated>), unless a fault or panic happens in the wrapper itself. +As a result, skip counts passed to functions like Caller +should now always match the structure of the code as written, rather than depending on +optimization decisions and implementation details.

@@ -534,7 +569,7 @@

Performance

Garbage Collector

-TODO: Anything? +Many applications should experience significantly lower allocation latency and overall performance overhead when the garbage collector is active.

Core library

@@ -571,12 +606,13 @@

Minor changes to the library

of type Format controls which tar header format the Writer uses. The default, as before, is to select the most widely-supported header type -that can encoding the fields needed by the header (USTAR if possible, or else PAX if possible, or else GNU). +that can encode the fields needed by the header (USTAR if possible, or else PAX if possible, or else GNU). The Reader sets Header.Format for each header it reads.

-Reader and the Writer now support PAX records, -using the new Header.PAXRecords field. +Reader and the Writer now support arbitrary PAX records, +using the new Header.PAXRecords field, +a generalization of the existing Xattrs field.

The Reader no longer insists that the file name or link name in GNU headers @@ -587,10 +623,6 @@

Minor changes to the library

the Header.AccessTime and Header.ChangeTime fields (if set). When writing PAX-format headers, the times include sub-second precision.

-

-The Writer.Flush method, -which has had no real effect since Go 1.1, is now marked deprecated. -

archive/zip
@@ -607,8 +639,9 @@

Minor changes to the library

The FileHeader's new Modified field of type time.Time obsoletes the ModifiedTime and ModifiedDate fields, which continue to hold the MS-DOS encoding. The Reader and Writer now adopt the common -convention that ZIP archive storing the Unix time encoding store the local time -in the MS-DOS field, so that the time zone offset can be inferred. +convention that a ZIP archive storing a time zone-independent Unix time +also stores the local time in the MS-DOS field, +so that the time zone offset can be inferred. For compatibility, the ModTime and SetModTime methods behave the same as in earlier releases; new code should use Modified directly. @@ -770,7 +803,7 @@

Minor changes to the library

Go 1.10 adds support for reading relocations from Mach-O sections, using the Section struct's new Relocs field -and the newReloc, +and the new Reloc, RelocTypeARM, RelocTypeARM64, RelocTypeGeneric, @@ -846,7 +879,7 @@

Minor changes to the library

and DecodeString encounter malformed input, -they each now return the number of bytes already converted +they now return the number of bytes already converted along with the error. Previously they always returned a count of 0 with any error.

@@ -857,7 +890,7 @@

Minor changes to the library

The Decoder adds a new method -DisallowUnknownFields +DisallowUnknownFields that causes it to report inputs with unknown JSON fields as a decoding error. (The default behavior has always been to discard unknown fields.)

@@ -872,6 +905,10 @@

Minor changes to the library

no longer generate partial output when presented with a block that is impossible to encode as PEM data.

+ +

+TODO: Reflect fallout. +

encoding/xml
@@ -1005,7 +1042,7 @@

Minor changes to the library

math/rand

-The new function and corresponding +The new Shuffle function and corresponding Rand.Shuffle method shuffle an input sequence.

@@ -1018,9 +1055,9 @@

Minor changes to the library

Round and RoundToEven -round their arguments to the nearest integer; +round their arguments to the nearest floating-point integer; Round rounds a half-integer to its larger integer neighbor (away from zero) -while RoundToEven rounds a half-integer its even integer neighbor. +while RoundToEven rounds a half-integer to its even integer neighbor.

@@ -1112,21 +1149,7 @@

Minor changes to the library

net/http/httputil

-The ReverseProxy now invokes -the -On the client side, an HTTP proxy (most commonly configured by -ProxyFromEnvironment) -can now be specified as an https:// URL, -meaning that the client connects to the proxy over HTTPS before issuing a standard, proxied HTTP request. -(Previously, HTTP proxy URLs were required to begin with http:// or socks5://.) -

-

-On the server side, FileServer and its single-file equivalent ServeFile -now apply If-Range checks to HEAD requests. -FileServer also now reports directory read failures to the Server's ErrorLog. -

-

-Redirect now sets the Content-Type header before writing its HTTP response. +TODO: ReverseProxy and back end errors and ModifyResponse.

@@ -1134,7 +1157,7 @@

Minor changes to the library

ParseAddress and -ParseAddressList and +ParseAddressList now support a variety of obsolete address formats.

@@ -1243,6 +1266,10 @@

Minor changes to the library

from a string into a byte array or byte slice, to match the built-in copy function.

+ +

+TODO: New reflect CanSet change for pointers to unexported fields. +

runtime/pprof
From c56fda63a4950a7f7eb2bda02d68b16d0d16387a Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 6 Dec 2017 00:01:26 -0500 Subject: [PATCH 04/21] doc/go1.10: fix many TODOs Change-Id: I97a28379b1a9ca3daa875edbcd5213673ca138d0 Reviewed-on: https://go-review.googlesource.com/82115 Reviewed-by: Russ Cox --- doc/go1.10.html | 55 +++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/doc/go1.10.html b/doc/go1.10.html index dcf45cd1883c1..5c9e7069401fe 100644 --- a/doc/go1.10.html +++ b/doc/go1.10.html @@ -22,16 +22,6 @@

DRAFT RELEASE NOTES - Introduction to Go 1.10

release notes. Go 1.10 is expected to be released in February 2018.

- -

The latest Go release, version 1.10, arrives six months after go1.9. Most of its changes are in the implementation of the toolchain, runtime, and libraries. @@ -127,7 +117,7 @@

Build & Install

For example: go install -ldflags=cmd/gofmt=-X=main.version=1.2.3 cmd/... installs all the commands matching cmd/... but only applies the -X option to the linker flags for cmd/gofmt. -For more details, see go help build. +For more details, see go help build.

@@ -161,7 +151,7 @@

Build & Install

binary-only packages must now declare accurate import blocks in their stub source code, so that those imports can be made available when linking a program using the binary-only package. -For more details, see go help filetype. +For more details, see go help filetype.

Test

@@ -403,11 +393,6 @@

Compiler Toolchain

and each package is now presented as its own DWARF compilation unit.

-

-TODO: What to say about FMA, if anything? -The spec change was mentioned in Go 1.9 but I am not sure whether any new architectures turned it on in Go 1.10. -

-

The various build modes has been ported to more systems. @@ -557,6 +542,10 @@

Runtime

(In Go 1.9 the limit was 1024.)

+

+TODO: Anything about CL 59970: "runtime: separate soft and hard heap limits"? +

+

Performance

@@ -894,6 +883,16 @@

Minor changes to the library

that causes it to report inputs with unknown JSON fields as a decoding error. (The default behavior has always been to discard unknown fields.)

+ +

+As a result of fixing a reflect bug, +Unmarshal +can no longer decode into fields inside +embedded pointers to unexported struct types, +because it cannot initialize the unexported embedded pointer +to point at fresh storage. +Unmarshal now returns an error in this case. +

encoding/pem
@@ -905,10 +904,6 @@

Minor changes to the library

no longer generate partial output when presented with a block that is impossible to encode as PEM data.

- -

-TODO: Reflect fallout. -

encoding/xml
@@ -1268,7 +1263,23 @@

Minor changes to the library

-TODO: New reflect CanSet change for pointers to unexported fields. +In structs, embedded pointers to unexported struct types were +previously incorrectly reported with an empty PkgPath +in the corresponding StructField, +with the result that for those fields, +and Value.CanSet +incorrectly returned true and +and Value.Set +incorrectly succeeded. +The underlying metadata has been corrected; +for those fields, +CanSet now correctly returns false +and Set now correctly panics. +This may affect reflection-based unmarshalers +that could previously unmarshal into such fields +but no longer can. +For example, see the encoding/json notes. +

From dfd6b6efe1908d4e0dccdefed59923e25d2da676 Mon Sep 17 00:00:00 2001 From: Alberto Donizetti Date: Wed, 6 Dec 2017 11:42:42 +0100 Subject: [PATCH 05/21] doc: fix dead link in go_faq Change-Id: I8a9e4d00247fe9bda6e19551850bdec0367df2e1 Reviewed-on: https://go-review.googlesource.com/82157 Reviewed-by: Ian Lance Taylor --- doc/go_faq.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/go_faq.html b/doc/go_faq.html index 62349fe5f7dc3..a3cb8731fa4bb 100644 --- a/doc/go_faq.html +++ b/doc/go_faq.html @@ -1152,7 +1152,7 @@

Work is underway on an experimental package management tool, dep, to learn more about how tooling can help package management. More information can be found in -the dep FAQ. +the dep FAQ.

Pointers and Allocation

From 28736053ad2829dcf576d05412a2def8bc3a1549 Mon Sep 17 00:00:00 2001 From: Alberto Donizetti Date: Wed, 6 Dec 2017 10:59:40 +0100 Subject: [PATCH 06/21] doc: fix two spelling mistakes in contribute.html Change-Id: Ife60468d508f90321733ebdbdb0e6cf443ba1659 Reviewed-on: https://go-review.googlesource.com/82156 Reviewed-by: Ian Lance Taylor --- doc/contribute.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/contribute.html b/doc/contribute.html index b35e9f4b18015..feeaf0864368a 100644 --- a/doc/contribute.html +++ b/doc/contribute.html @@ -187,7 +187,7 @@

Install the git-codereview command

On Windows, when using git-bash you must make sure that git-codereview.exe is in your git exec-path. Run git --exec-path to discover the right location then create a -symbolic link or simply copy the executible from $GOPATH/bin to this directory. +symbolic link or simply copy the executable from $GOPATH/bin to this directory.

@@ -386,7 +386,7 @@

change log and in the CONTRIBUTORS file and perhaps the AUTHORS file. -These files are automatically generated from the commit logs perodically. +These files are automatically generated from the commit logs periodically. The AUTHORS file defines who “The Go Authors”—the copyright holders—are.

From 9b8d604db245e4910ac88a96c529e9798ab58c99 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 6 Dec 2017 13:38:10 -0500 Subject: [PATCH 07/21] doc/go1.10: preannounce removal of OS X 10.8 support in Go 1.11 For #23011. Change-Id: Ibd934f32e41cb8dddbd3d68a324536cf29a97916 Reviewed-on: https://go-review.googlesource.com/82275 Run-TryBot: Russ Cox Reviewed-by: Brad Fitzpatrick --- doc/go1.10.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/go1.10.html b/doc/go1.10.html index 5c9e7069401fe..67a160531484d 100644 --- a/doc/go1.10.html +++ b/doc/go1.10.html @@ -64,6 +64,11 @@

Ports

and improvements to the code generated by the compilers.

+

+Go 1.10 is the last release that will run on OS X 10.8 Mountain Lion. +Go 1.11 will require OS X 10.9 Mavericks or later. +

+

As announced in the Go 1.9 release notes, Go 1.10 now requires FreeBSD 10.3 or later; From 8156e76e44ac0bfffcff331198e904be45808341 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 5 Dec 2017 10:29:27 -0500 Subject: [PATCH 08/21] cmd/go: implement time-based trimming of build cache Fixes #22642. Change-Id: I2ed6305555a0cf753b9cdce061463b1749d5e53e Reviewed-on: https://go-review.googlesource.com/81975 Run-TryBot: Russ Cox TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/cmd/go/internal/cache/cache.go | 95 +++++++++++++++++-- src/cmd/go/internal/cache/cache_test.go | 121 ++++++++++++++++++++++++ src/cmd/go/internal/work/exec.go | 5 + 3 files changed, 215 insertions(+), 6 deletions(-) diff --git a/src/cmd/go/internal/cache/cache.go b/src/cmd/go/internal/cache/cache.go index 311cd89f33d6b..794d63d20b037 100644 --- a/src/cmd/go/internal/cache/cache.go +++ b/src/cmd/go/internal/cache/cache.go @@ -178,9 +178,7 @@ func (c *Cache) get(id ActionID) (Entry, error) { fmt.Fprintf(c.log, "%d get %x\n", c.now().Unix(), id) - // Best-effort attempt to update mtime on file, - // so that mtime reflects cache access time. - os.Chtimes(c.fileName(id, "a"), c.now(), c.now()) + c.used(c.fileName(id, "a")) return Entry{buf, size, time.Unix(0, tm)}, nil } @@ -203,12 +201,95 @@ func (c *Cache) GetBytes(id ActionID) ([]byte, Entry, error) { // OutputFile returns the name of the cache file storing output with the given OutputID. func (c *Cache) OutputFile(out OutputID) string { file := c.fileName(out, "d") + c.used(file) + return file +} - // Best-effort attempt to update mtime on file, - // so that mtime reflects cache access time. +// Time constants for cache expiration. +// +// We set the mtime on a cache file on each use, but at most one per mtimeInterval (1 hour), +// to avoid causing many unnecessary inode updates. The mtimes therefore +// roughly reflect "time of last use" but may in fact be older by at most an hour. +// +// We scan the cache for entries to delete at most once per trimInterval (1 day). +// +// When we do scan the cache, we delete entries that have not been used for +// at least trimLimit (5 days). Statistics gathered from a month of usage by +// Go developers found that essentially all reuse of cached entries happened +// within 5 days of the previous reuse. See golang.org/issue/22990. +const ( + mtimeInterval = 1 * time.Hour + trimInterval = 24 * time.Hour + trimLimit = 5 * 24 * time.Hour +) + +// used makes a best-effort attempt to update mtime on file, +// so that mtime reflects cache access time. +// +// Because the reflection only needs to be approximate, +// and to reduce the amount of disk activity caused by using +// cache entries, used only updates the mtime if the current +// mtime is more than an hour old. This heuristic eliminates +// nearly all of the mtime updates that would otherwise happen, +// while still keeping the mtimes useful for cache trimming. +func (c *Cache) used(file string) { + info, err := os.Stat(file) + if err == nil && c.now().Sub(info.ModTime()) < mtimeInterval { + return + } os.Chtimes(file, c.now(), c.now()) +} - return file +// Trim removes old cache entries that are likely not to be reused. +func (c *Cache) Trim() { + now := c.now() + + // We maintain in dir/trim.txt the time of the last completed cache trim. + // If the cache has been trimmed recently enough, do nothing. + // This is the common case. + data, _ := ioutil.ReadFile(filepath.Join(c.dir, "trim.txt")) + t, err := strconv.ParseInt(strings.TrimSpace(string(data)), 10, 64) + if err == nil && now.Sub(time.Unix(t, 0)) < trimInterval { + return + } + + // Trim each of the 256 subdirectories. + // We subtract an additional mtimeInterval + // to account for the imprecision of our "last used" mtimes. + cutoff := now.Add(-trimLimit - mtimeInterval) + for i := 0; i < 256; i++ { + subdir := filepath.Join(c.dir, fmt.Sprintf("%02x", i)) + c.trimSubdir(subdir, cutoff) + } + + ioutil.WriteFile(filepath.Join(c.dir, "trim.txt"), []byte(fmt.Sprintf("%d", now.Unix())), 0666) +} + +// trimSubdir trims a single cache subdirectory. +func (c *Cache) trimSubdir(subdir string, cutoff time.Time) { + // Read all directory entries from subdir before removing + // any files, in case removing files invalidates the file offset + // in the directory scan. Also, ignore error from f.Readdirnames, + // because we don't care about reporting the error and we still + // want to process any entries found before the error. + f, err := os.Open(subdir) + if err != nil { + return + } + names, _ := f.Readdirnames(-1) + f.Close() + + for _, name := range names { + // Remove only cache entries (xxxx-a and xxxx-d). + if !strings.HasSuffix(name, "-a") && !strings.HasSuffix(name, "-d") { + continue + } + entry := filepath.Join(subdir, name) + info, err := os.Stat(entry) + if err == nil && info.ModTime().Before(cutoff) { + os.Remove(entry) + } + } } // putIndexEntry adds an entry to the cache recording that executing the action @@ -239,6 +320,7 @@ func (c *Cache) putIndexEntry(id ActionID, out OutputID, size int64, allowVerify os.Remove(file) return err } + os.Chtimes(file, c.now(), c.now()) // mainly for tests fmt.Fprintf(c.log, "%d put %x %x %d\n", c.now().Unix(), id, out, size) return nil @@ -365,6 +447,7 @@ func (c *Cache) copyFile(file io.ReadSeeker, out OutputID, size int64) error { os.Remove(name) return err } + os.Chtimes(name, c.now(), c.now()) // mainly for tests return nil } diff --git a/src/cmd/go/internal/cache/cache_test.go b/src/cmd/go/internal/cache/cache_test.go index 84749a6965cf3..d3dafccd137f2 100644 --- a/src/cmd/go/internal/cache/cache_test.go +++ b/src/cmd/go/internal/cache/cache_test.go @@ -5,7 +5,9 @@ package cache import ( + "bytes" "encoding/binary" + "fmt" "io/ioutil" "os" "path/filepath" @@ -196,3 +198,122 @@ func dummyID(x int) [HashSize]byte { binary.LittleEndian.PutUint64(out[:], uint64(x)) return out } + +func TestCacheTrim(t *testing.T) { + dir, err := ioutil.TempDir("", "cachetest-") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + c, err := Open(dir) + if err != nil { + t.Fatalf("Open: %v", err) + } + const start = 1000000000 + now := int64(start) + c.now = func() time.Time { return time.Unix(now, 0) } + + checkTime := func(name string, mtime int64) { + t.Helper() + file := filepath.Join(c.dir, name[:2], name) + info, err := os.Stat(file) + if err != nil { + t.Fatal(err) + } + if info.ModTime().Unix() != mtime { + t.Fatalf("%s mtime = %d, want %d", name, info.ModTime().Unix(), mtime) + } + } + + id := ActionID(dummyID(1)) + c.PutBytes(id, []byte("abc")) + entry, _ := c.Get(id) + c.PutBytes(ActionID(dummyID(2)), []byte("def")) + mtime := now + checkTime(fmt.Sprintf("%x-a", id), mtime) + checkTime(fmt.Sprintf("%x-d", entry.OutputID), mtime) + + // Get should not change recent mtimes. + now = start + 10 + c.Get(id) + checkTime(fmt.Sprintf("%x-a", id), mtime) + checkTime(fmt.Sprintf("%x-d", entry.OutputID), mtime) + + // Get should change distant mtimes. + now = start + 5000 + mtime2 := now + if _, err := c.Get(id); err != nil { + t.Fatal(err) + } + c.OutputFile(entry.OutputID) + checkTime(fmt.Sprintf("%x-a", id), mtime2) + checkTime(fmt.Sprintf("%x-d", entry.OutputID), mtime2) + + // Trim should leave everything alone: it's all too new. + c.Trim() + if _, err := c.Get(id); err != nil { + t.Fatal(err) + } + c.OutputFile(entry.OutputID) + data, err := ioutil.ReadFile(filepath.Join(dir, "trim.txt")) + if err != nil { + t.Fatal(err) + } + checkTime(fmt.Sprintf("%x-a", dummyID(2)), start) + + // Trim less than a day later should not do any work at all. + now = start + 80000 + c.Trim() + if _, err := c.Get(id); err != nil { + t.Fatal(err) + } + c.OutputFile(entry.OutputID) + data2, err := ioutil.ReadFile(filepath.Join(dir, "trim.txt")) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(data, data2) { + t.Fatalf("second trim did work: %q -> %q", data, data2) + } + + // Fast forward and do another trim just before the 5 day cutoff. + // Note that because of usedQuantum the cutoff is actually 5 days + 1 hour. + // We used c.Get(id) just now, so 5 days later it should still be kept. + // On the other hand almost a full day has gone by since we wrote dummyID(2) + // and we haven't looked at it since, so 5 days later it should be gone. + now += 5 * 86400 + checkTime(fmt.Sprintf("%x-a", dummyID(2)), start) + c.Trim() + if _, err := c.Get(id); err != nil { + t.Fatal(err) + } + c.OutputFile(entry.OutputID) + mtime3 := now + if _, err := c.Get(dummyID(2)); err == nil { // haven't done a Get for this since original write above + t.Fatalf("Trim did not remove dummyID(2)") + } + + // The c.Get(id) refreshed id's mtime again. + // Check that another 5 days later it is still not gone, + // but check by using checkTime, which doesn't bring mtime forward. + now += 5 * 86400 + c.Trim() + checkTime(fmt.Sprintf("%x-a", id), mtime3) + checkTime(fmt.Sprintf("%x-d", entry.OutputID), mtime3) + + // Half a day later Trim should still be a no-op, because there was a Trim recently. + // Even though the entry for id is now old enough to be trimmed, + // it gets a reprieve until the time comes for a new Trim scan. + now += 86400 / 2 + c.Trim() + checkTime(fmt.Sprintf("%x-a", id), mtime3) + checkTime(fmt.Sprintf("%x-d", entry.OutputID), mtime3) + + // Another half a day later, Trim should actually run, and it should remove id. + now += 86400/2 + 1 + c.Trim() + if _, err := c.Get(dummyID(1)); err == nil { + t.Fatal("Trim did not remove dummyID(1)") + } +} diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go index 43409de764fba..fc4a36ddf4f6a 100644 --- a/src/cmd/go/internal/work/exec.go +++ b/src/cmd/go/internal/work/exec.go @@ -53,6 +53,11 @@ func actionList(root *Action) []*Action { // do runs the action graph rooted at root. func (b *Builder) Do(root *Action) { + if c := cache.Default(); c != nil && !b.ComputeStaleOnly { + // If we're doing real work, take time at the end to trim the cache. + defer c.Trim() + } + // Build list of all actions, assigning depth-first post-order priority. // The original implementation here was a true queue // (using a channel) but it had the effect of getting From fe2869cbfe2028c69d1fb2a24a0406748f528b2a Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 7 Nov 2017 09:56:11 -0500 Subject: [PATCH 09/21] misc/cgo/testplugin: unskip test Fixed by CL 76025 yesterday, without realizing it: the testshared and testplugin builds of separate iface_i packages were colliding incorrectly in the cache. Including the build directory fixes that. Fixes #22571. Change-Id: Id8193781c67c3150823dc1f48eae781dfe3702fb Reviewed-on: https://go-review.googlesource.com/76371 Run-TryBot: Russ Cox Reviewed-by: David Crawshaw --- misc/cgo/testplugin/test.bash | 3 --- 1 file changed, 3 deletions(-) diff --git a/misc/cgo/testplugin/test.bash b/misc/cgo/testplugin/test.bash index 5ef87625f1a65..18e3803bf42ae 100755 --- a/misc/cgo/testplugin/test.bash +++ b/misc/cgo/testplugin/test.bash @@ -14,9 +14,6 @@ fi goos=$(go env GOOS) goarch=$(go env GOARCH) -echo SKIP: golang.org/issue/22571. -exit 0 - function cleanup() { rm -f plugin*.so unnamed*.so iface*.so issue* rm -rf host pkg sub iface From 0e76143ef1208db7eeb06e939401666065d41337 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sat, 28 Oct 2017 20:07:51 +0200 Subject: [PATCH 10/21] lib/time: update tzdata to 2017c Update the tzdata database to version 2017c (released 2017-10-20). Updates #22487 Change-Id: If58ff89173ef1f1044075505f42ff132b57795f0 Reviewed-on: https://go-review.googlesource.com/74230 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- lib/time/update.bash | 4 ++-- lib/time/zoneinfo.zip | Bin 366776 -> 364985 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/time/update.bash b/lib/time/update.bash index 6261f81dcd9d0..16552fb6f916d 100755 --- a/lib/time/update.bash +++ b/lib/time/update.bash @@ -8,8 +8,8 @@ # Consult http://www.iana.org/time-zones for the latest versions. # Versions to use. -CODE=2017b -DATA=2017b +CODE=2017c +DATA=2017c set -e rm -rf work diff --git a/lib/time/zoneinfo.zip b/lib/time/zoneinfo.zip index b60ae7f98e7562e1243d6171a52deb1ea68e7dea..0703e08e36e5250ef40c98fd327fd2d1333f7b05 100644 GIT binary patch delta 69549 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 HHJbkiT@uyJ From 70f441bc49afa4e9d10c27d7ed5733c4df7bddd3 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Tue, 5 Dec 2017 22:38:36 -0800 Subject: [PATCH 11/21] encoding/json: error when trying to set an embedded pointer to unexported struct types This CL reverts CL 76851 and takes a different approach to #21357. The changes in encode.go and encode_test.go are reverts that rolls back the changed behavior in CL 76851 where embedded pointers to unexported struct types were unilaterally ignored in both marshal and unmarshal. Instead, these fields are handled as before with the exception that it returns an error when Unmarshal is unable to set an unexported field. The behavior of Marshal is now unchanged with regards to #21357. This policy maintains the greatest degree of backwards compatibility and avoids silently discarding data the user may have expected to be present. Fixes #21357 Change-Id: I7dc753280c99f786ac51acf7e6c0246618c8b2b1 Reviewed-on: https://go-review.googlesource.com/82135 Run-TryBot: Joe Tsai TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/encoding/json/decode.go | 13 +++++ src/encoding/json/decode_test.go | 97 +++++++++++++++++++++++++------- src/encoding/json/encode.go | 13 +---- src/encoding/json/encode_test.go | 7 +-- 4 files changed, 97 insertions(+), 33 deletions(-) diff --git a/src/encoding/json/decode.go b/src/encoding/json/decode.go index 4f98916105b9d..536f25dc7c5ee 100644 --- a/src/encoding/json/decode.go +++ b/src/encoding/json/decode.go @@ -707,6 +707,19 @@ func (d *decodeState) object(v reflect.Value) { for _, i := range f.index { if subv.Kind() == reflect.Ptr { if subv.IsNil() { + // If a struct embeds a pointer to an unexported type, + // it is not possible to set a newly allocated value + // since the field is unexported. + // + // See https://golang.org/issue/21357 + if !subv.CanSet() { + d.saveError(fmt.Errorf("json: cannot set embedded pointer to unexported struct: %v", subv.Type().Elem())) + // Invalidate subv to ensure d.value(subv) skips over + // the JSON value without assigning it to subv. + subv = reflect.Value{} + destring = false + break + } subv.Set(reflect.New(subv.Type().Elem())) } subv = subv.Elem() diff --git a/src/encoding/json/decode_test.go b/src/encoding/json/decode_test.go index 27ceee471aec5..34b7ec6d97abc 100644 --- a/src/encoding/json/decode_test.go +++ b/src/encoding/json/decode_test.go @@ -195,11 +195,6 @@ type embed struct { Q int } -type Issue21357 struct { - *embed - R int -} - type Loop struct { Loop1 int `json:",omitempty"` Loop2 int `json:",omitempty"` @@ -871,20 +866,6 @@ var unmarshalTests = []unmarshalTest{ err: fmt.Errorf("json: unknown field \"extra\""), disallowUnknownFields: true, }, - - // Issue 21357. - // Ignore any embedded fields that are pointers to unexported structs. - { - in: `{"Q":1,"R":2}`, - ptr: new(Issue21357), - out: Issue21357{R: 2}, - }, - { - in: `{"Q":1,"R":2}`, - ptr: new(Issue21357), - err: fmt.Errorf("json: unknown field \"Q\""), - disallowUnknownFields: true, - }, } func TestMarshal(t *testing.T) { @@ -2107,3 +2088,81 @@ func TestInvalidStringOption(t *testing.T) { t.Fatalf("Unmarshal: %v", err) } } + +// Test unmarshal behavior with regards to embedded pointers to unexported structs. +// If unallocated, this returns an error because unmarshal cannot set the field. +// Issue 21357. +func TestUnmarshalEmbeddedPointerUnexported(t *testing.T) { + type ( + embed1 struct{ Q int } + embed2 struct{ Q int } + embed3 struct { + Q int64 `json:",string"` + } + S1 struct { + *embed1 + R int + } + S2 struct { + *embed1 + Q int + } + S3 struct { + embed1 + R int + } + S4 struct { + *embed1 + embed2 + } + S5 struct { + *embed3 + R int + } + ) + + tests := []struct { + in string + ptr interface{} + out interface{} + err error + }{{ + // Error since we cannot set S1.embed1, but still able to set S1.R. + in: `{"R":2,"Q":1}`, + ptr: new(S1), + out: &S1{R: 2}, + err: fmt.Errorf("json: cannot set embedded pointer to unexported struct: json.embed1"), + }, { + // The top level Q field takes precedence. + in: `{"Q":1}`, + ptr: new(S2), + out: &S2{Q: 1}, + }, { + // No issue with non-pointer variant. + in: `{"R":2,"Q":1}`, + ptr: new(S3), + out: &S3{embed1: embed1{Q: 1}, R: 2}, + }, { + // No error since both embedded structs have field R, which annihilate each other. + // Thus, no attempt is made at setting S4.embed1. + in: `{"R":2}`, + ptr: new(S4), + out: new(S4), + }, { + // Error since we cannot set S5.embed1, but still able to set S5.R. + in: `{"R":2,"Q":1}`, + ptr: new(S5), + out: &S5{R: 2}, + err: fmt.Errorf("json: cannot set embedded pointer to unexported struct: json.embed3"), + }} + + for i, tt := range tests { + err := Unmarshal([]byte(tt.in), tt.ptr) + if !reflect.DeepEqual(err, tt.err) { + t.Errorf("#%d: %v, want %v", i, err, tt.err) + } + if !reflect.DeepEqual(tt.ptr, tt.out) { + t.Errorf("#%d: mismatch\ngot: %#+v\nwant: %#+v", i, tt.ptr, tt.out) + } + } +} diff --git a/src/encoding/json/encode.go b/src/encoding/json/encode.go index 0522c43495eb3..1e45e445d9216 100644 --- a/src/encoding/json/encode.go +++ b/src/encoding/json/encode.go @@ -1094,18 +1094,11 @@ func typeFields(t reflect.Type) []field { isUnexported := sf.PkgPath != "" if sf.Anonymous { t := sf.Type - isPointer := t.Kind() == reflect.Ptr - if isPointer { + if t.Kind() == reflect.Ptr { t = t.Elem() } - isStruct := t.Kind() == reflect.Struct - if isUnexported && (!isStruct || isPointer) { - // Ignore embedded fields of unexported non-struct types - // or pointers to unexported struct types. - // - // The latter is forbidden because unmarshal is unable - // to assign a new struct to the unexported field. - // See https://golang.org/issue/21357 + if isUnexported && t.Kind() != reflect.Struct { + // Ignore embedded fields of unexported non-struct types. continue } // Do not ignore embedded fields of unexported struct types diff --git a/src/encoding/json/encode_test.go b/src/encoding/json/encode_test.go index df7338c98d159..0f194e13d2681 100644 --- a/src/encoding/json/encode_test.go +++ b/src/encoding/json/encode_test.go @@ -364,9 +364,8 @@ func TestAnonymousFields(t *testing.T) { want: `{"X":2,"Y":4}`, }, { // Exported fields of pointers to embedded structs should have their - // exported fields be serialized only for exported struct types. - // Pointers to unexported structs are not allowed since the decoder - // is unable to allocate a struct for that field + // exported fields be serialized regardless of whether the struct types + // themselves are exported. label: "EmbeddedStructPointer", makeInput: func() interface{} { type ( @@ -379,7 +378,7 @@ func TestAnonymousFields(t *testing.T) { ) return S{&s1{1, 2}, &S2{3, 4}} }, - want: `{"Y":4}`, + want: `{"X":2,"Y":4}`, }, { // Exported fields on embedded unexported structs at multiple levels // of nesting should still be serialized. From 0ec59e4c087e8d23715abe896a8c409c99bb989a Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 6 Dec 2017 16:24:10 -0800 Subject: [PATCH 12/21] runtime: sleep longer in dieFromSignal on Darwin Fixes #20315 Change-Id: I5d5c82f10902b59168fc0cca0af50286843df55d Reviewed-on: https://go-review.googlesource.com/82375 Run-TryBot: Ian Lance Taylor Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/runtime/signal_unix.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go index 2cd3d7180049c..ac191f302fac4 100644 --- a/src/runtime/signal_unix.go +++ b/src/runtime/signal_unix.go @@ -432,6 +432,14 @@ func dieFromSignal(sig uint32) { osyield() osyield() + // On Darwin we may still fail to die, because raise sends the + // signal to the whole process rather than just the current thread, + // and osyield just sleeps briefly rather than letting all other + // threads run. See issue 20315. Sleep longer. + if GOOS == "darwin" { + usleep(100) + } + // If we are still somehow running, just exit with the wrong status. exit(2) } From 617fc0ffd3dabd24a43a713af0a05a7f93516d36 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Wed, 6 Dec 2017 18:44:13 +0000 Subject: [PATCH 13/21] doc/go1.10: add NetBSD and OpenBSD to Go 1.10 release notes Fixes #22911 Change-Id: I61de85323e290b64917a09bc512935e835ff7cf0 Reviewed-on: https://go-review.googlesource.com/82276 Reviewed-by: Ian Lance Taylor --- doc/go1.10.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/go1.10.html b/doc/go1.10.html index 67a160531484d..c744fa511fc60 100644 --- a/doc/go1.10.html +++ b/doc/go1.10.html @@ -75,6 +75,18 @@

Ports

support for FreeBSD 9.3 has been removed.

+

+Go now runs on NetBSD again, but requires the unreleased NetBSD 8. +Only GOARCH=amd64 running on NetBSD amd64 and GOARCH=386 +running on NetBSD i386 are known to work. 64-bit Go binaries are known to +fail on 32-bit NetBSD kernels. GOARCH=arm is untested. +

+ +

+Go 1.10 is the last release that will run on OpenBSD 6.0. +Go 1.11 will require OpenBSD 6.2. +

+

On 32-bit MIPS systems, the new environment variable settings GOMIPS=hardfloat (the default) and From 89d7a2fbda06976858cd00451d6eee81fffd9aea Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 6 Dec 2017 18:02:02 -0800 Subject: [PATCH 14/21] encoding/xml: don't crash on invalid XMLName tag Fixes #20953 Change-Id: Ia30a6e0e335c1f738e1359500e09057b5981f1c7 Reviewed-on: https://go-review.googlesource.com/82397 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/encoding/xml/marshal_test.go | 19 +++++++++++++++++++ src/encoding/xml/typeinfo.go | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/encoding/xml/marshal_test.go b/src/encoding/xml/marshal_test.go index 11f451270a9f5..5c79a48e7adb1 100644 --- a/src/encoding/xml/marshal_test.go +++ b/src/encoding/xml/marshal_test.go @@ -2441,3 +2441,22 @@ func TestIssue16158(t *testing.T) { t.Errorf("Unmarshal: expected error, got nil") } } + +// Issue 20953. Crash on invalid XMLName attribute. + +type InvalidXMLName struct { + XMLName Name `xml:"error"` + Type struct { + XMLName Name `xml:"type,attr"` + } +} + +func TestInvalidXMLName(t *testing.T) { + var buf bytes.Buffer + enc := NewEncoder(&buf) + if err := enc.Encode(InvalidXMLName{}); err == nil { + t.Error("unexpected success") + } else if want := "invalid tag"; !strings.Contains(err.Error(), want) { + t.Errorf("error %q does not contain %q", err, want) + } +} diff --git a/src/encoding/xml/typeinfo.go b/src/encoding/xml/typeinfo.go index 2e7ae935a8bb9..48de3d7e9e9cd 100644 --- a/src/encoding/xml/typeinfo.go +++ b/src/encoding/xml/typeinfo.go @@ -241,7 +241,7 @@ func lookupXMLName(typ reflect.Type) (xmlname *fieldInfo) { continue } finfo, err := structFieldInfo(typ, &f) - if finfo.name != "" && err == nil { + if err == nil && finfo.name != "" { return finfo } // Also consider errors as a non-existent field tag From 3d3b8cc47716b9ce3df37b8babe48cfd074cd121 Mon Sep 17 00:00:00 2001 From: Mikio Hara Date: Thu, 7 Dec 2017 13:29:26 +0900 Subject: [PATCH 15/21] cmd/vendor/golang.org/x/arch/arm64: update from upstream Updates x/arch/arm64 to git rev. 530ae47 for CL 82437. Change-Id: I0131f7ac783462fcaeddf5625c59784fe30bbd5a Reviewed-on: https://go-review.googlesource.com/82435 Reviewed-by: Brad Fitzpatrick --- src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/condition.go | 0 src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/condition_util.go | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/condition.go mode change 100755 => 100644 src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/condition_util.go diff --git a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/condition.go b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/condition.go old mode 100755 new mode 100644 diff --git a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/condition_util.go b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/condition_util.go old mode 100755 new mode 100644 From 44f241be8b905c7f479d2d058a45957220707f28 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 6 Dec 2017 18:09:11 -0800 Subject: [PATCH 16/21] cmd/dist: only test SWIG if we have a new enough version Fixes #22858 Change-Id: I0478d5609e381f01c7345e7f53c24af05d7f78ad Reviewed-on: https://go-review.googlesource.com/82415 Run-TryBot: Ian Lance Taylor Reviewed-by: Brad Fitzpatrick Reviewed-by: Alberto Donizetti Reviewed-by: Lynn Boger TryBot-Result: Gobot Gobot --- src/cmd/dist/test.go | 59 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go index f35fbd4cb5f5c..808439439b521 100644 --- a/src/cmd/dist/test.go +++ b/src/cmd/dist/test.go @@ -583,7 +583,7 @@ func (t *tester) registerTests() { }, }) } - if swig, _ := exec.LookPath("swig"); swig != "" && goos != "android" { + if t.hasSwig() && goos != "android" { t.tests = append(t.tests, distTest{ name: "swig_stdio", heading: "../misc/swig/stdio", @@ -1197,6 +1197,63 @@ func (t *tester) hasBash() bool { return true } +func (t *tester) hasSwig() bool { + swig, err := exec.LookPath("swig") + if err != nil { + return false + } + out, err := exec.Command(swig, "-version").CombinedOutput() + if err != nil { + return false + } + + re := regexp.MustCompile(`[vV]ersion +([\d]+)([.][\d]+)?([.][\d]+)?`) + matches := re.FindSubmatch(out) + if matches == nil { + // Can't find version number; hope for the best. + return true + } + + major, err := strconv.Atoi(string(matches[1])) + if err != nil { + // Can't find version number; hope for the best. + return true + } + if major < 3 { + return false + } + if major > 3 { + // 4.0 or later + return true + } + + // We have SWIG version 3.x. + if len(matches[2]) > 0 { + minor, err := strconv.Atoi(string(matches[2][1:])) + if err != nil { + return true + } + if minor > 0 { + // 3.1 or later + return true + } + } + + // We have SWIG version 3.0.x. + if len(matches[3]) > 0 { + patch, err := strconv.Atoi(string(matches[3][1:])) + if err != nil { + return true + } + if patch < 6 { + // Before 3.0.6. + return false + } + } + + return true +} + func (t *tester) raceDetectorSupported() bool { switch gohostos { case "linux", "darwin", "freebsd", "windows": From 31f8ca51fcaa961254ecb580a2fd63c11b43fc2e Mon Sep 17 00:00:00 2001 From: Artyom Pervukhin Date: Thu, 7 Dec 2017 14:05:08 +0300 Subject: [PATCH 17/21] net/http: use correct method name in Server.ServeTLS docs Closes #23028 Change-Id: I469f1ab2dee9151334b38e0d3a22eb9840c8807b Reviewed-on: https://go-review.googlesource.com/82495 Reviewed-by: Brad Fitzpatrick --- src/net/http/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net/http/server.go b/src/net/http/server.go index a46823c70421b..3fa6660164905 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -2778,7 +2778,7 @@ func (srv *Server) Serve(l net.Listener) error { // server's certificate, any intermediates, and the CA's certificate. // // For HTTP/2 support, srv.TLSConfig should be initialized to the -// provided listener's TLS Config before calling Serve. If +// provided listener's TLS Config before calling ServeTLS. If // srv.TLSConfig is non-nil and doesn't include the string "h2" in // Config.NextProtos, HTTP/2 support is not enabled. // From 8b13988e40e468995360802a2dc7de9b32a34fea Mon Sep 17 00:00:00 2001 From: Andrew Bonventre Date: Wed, 6 Dec 2017 16:47:52 -0500 Subject: [PATCH 18/21] api: promote next to go1.10 Change-Id: I2a4347540ecb94a9f124a228dc31452620ab0645 Reviewed-on: https://go-review.googlesource.com/82335 Reviewed-by: Brad Fitzpatrick Reviewed-by: Chris Broadfoot Run-TryBot: Brad Fitzpatrick Run-TryBot: Andrew Bonventre TryBot-Result: Gobot Gobot --- api/go1.10.txt | 645 +++++++++++++++++++++++++++++++++++++++++++++ api/next.txt | 641 -------------------------------------------- src/cmd/api/run.go | 2 +- 3 files changed, 646 insertions(+), 642 deletions(-) create mode 100644 api/go1.10.txt diff --git a/api/go1.10.txt b/api/go1.10.txt new file mode 100644 index 0000000000000..c8e504c992731 --- /dev/null +++ b/api/go1.10.txt @@ -0,0 +1,645 @@ +pkg archive/tar, const FormatGNU = 8 +pkg archive/tar, const FormatGNU Format +pkg archive/tar, const FormatPAX = 4 +pkg archive/tar, const FormatPAX Format +pkg archive/tar, const FormatUSTAR = 2 +pkg archive/tar, const FormatUSTAR Format +pkg archive/tar, const FormatUnknown = 0 +pkg archive/tar, const FormatUnknown Format +pkg archive/tar, method (Format) String() string +pkg archive/tar, type Format int +pkg archive/tar, type Header struct, Format Format +pkg archive/tar, type Header struct, PAXRecords map[string]string +pkg archive/zip, method (*Writer) SetComment(string) error +pkg archive/zip, type FileHeader struct, Modified time.Time +pkg archive/zip, type FileHeader struct, NonUTF8 bool +pkg bufio, method (*Reader) Size() int +pkg bufio, method (*Writer) Size() int +pkg crypto/tls, const ECDSAWithSHA1 = 515 +pkg crypto/tls, const ECDSAWithSHA1 SignatureScheme +pkg crypto/x509, const CANotAuthorizedForExtKeyUsage = 9 +pkg crypto/x509, const CANotAuthorizedForExtKeyUsage InvalidReason +pkg crypto/x509, const ExtKeyUsageMicrosoftCommercialCodeSigning = 12 +pkg crypto/x509, const ExtKeyUsageMicrosoftCommercialCodeSigning ExtKeyUsage +pkg crypto/x509, const ExtKeyUsageMicrosoftKernelCodeSigning = 13 +pkg crypto/x509, const ExtKeyUsageMicrosoftKernelCodeSigning ExtKeyUsage +pkg crypto/x509, const NameConstraintsWithoutSANs = 6 +pkg crypto/x509, const NameConstraintsWithoutSANs InvalidReason +pkg crypto/x509, const TooManyConstraints = 8 +pkg crypto/x509, const TooManyConstraints InvalidReason +pkg crypto/x509, const UnconstrainedName = 7 +pkg crypto/x509, const UnconstrainedName InvalidReason +pkg crypto/x509, func MarshalPKCS1PublicKey(*rsa.PublicKey) []uint8 +pkg crypto/x509, func MarshalPKCS8PrivateKey(interface{}) ([]uint8, error) +pkg crypto/x509, func ParsePKCS1PublicKey([]uint8) (*rsa.PublicKey, error) +pkg crypto/x509, method (PublicKeyAlgorithm) String() string +pkg crypto/x509, type Certificate struct, ExcludedEmailAddresses []string +pkg crypto/x509, type Certificate struct, ExcludedIPRanges []*net.IPNet +pkg crypto/x509, type Certificate struct, ExcludedURIDomains []string +pkg crypto/x509, type Certificate struct, PermittedEmailAddresses []string +pkg crypto/x509, type Certificate struct, PermittedIPRanges []*net.IPNet +pkg crypto/x509, type Certificate struct, PermittedURIDomains []string +pkg crypto/x509, type Certificate struct, URIs []*url.URL +pkg crypto/x509, type CertificateInvalidError struct, Detail string +pkg crypto/x509, type CertificateRequest struct, URIs []*url.URL +pkg crypto/x509, type VerifyOptions struct, MaxConstraintComparisions int +pkg crypto/x509/pkix, method (Name) String() string +pkg crypto/x509/pkix, method (RDNSequence) String() string +pkg database/sql, func OpenDB(driver.Connector) *DB +pkg database/sql/driver, type Connector interface { Connect, Driver } +pkg database/sql/driver, type Connector interface, Connect(context.Context) (Conn, error) +pkg database/sql/driver, type Connector interface, Driver() Driver +pkg database/sql/driver, type DriverContext interface { OpenConnector } +pkg database/sql/driver, type DriverContext interface, OpenConnector(string) (Connector, error) +pkg database/sql/driver, type SessionResetter interface { ResetSession } +pkg database/sql/driver, type SessionResetter interface, ResetSession(context.Context) error +pkg debug/elf, const R_386_16 = 20 +pkg debug/elf, const R_386_16 R_386 +pkg debug/elf, const R_386_32PLT = 11 +pkg debug/elf, const R_386_32PLT R_386 +pkg debug/elf, const R_386_8 = 22 +pkg debug/elf, const R_386_8 R_386 +pkg debug/elf, const R_386_GOT32X = 43 +pkg debug/elf, const R_386_GOT32X R_386 +pkg debug/elf, const R_386_IRELATIVE = 42 +pkg debug/elf, const R_386_IRELATIVE R_386 +pkg debug/elf, const R_386_PC16 = 21 +pkg debug/elf, const R_386_PC16 R_386 +pkg debug/elf, const R_386_PC8 = 23 +pkg debug/elf, const R_386_PC8 R_386 +pkg debug/elf, const R_386_SIZE32 = 38 +pkg debug/elf, const R_386_SIZE32 R_386 +pkg debug/elf, const R_386_TLS_DESC = 41 +pkg debug/elf, const R_386_TLS_DESC R_386 +pkg debug/elf, const R_386_TLS_DESC_CALL = 40 +pkg debug/elf, const R_386_TLS_DESC_CALL R_386 +pkg debug/elf, const R_386_TLS_GOTDESC = 39 +pkg debug/elf, const R_386_TLS_GOTDESC R_386 +pkg debug/elf, const R_AARCH64_LD64_GOTOFF_LO15 = 310 +pkg debug/elf, const R_AARCH64_LD64_GOTOFF_LO15 R_AARCH64 +pkg debug/elf, const R_AARCH64_LD64_GOTPAGE_LO15 = 313 +pkg debug/elf, const R_AARCH64_LD64_GOTPAGE_LO15 R_AARCH64 +pkg debug/elf, const R_AARCH64_TLSGD_ADR_PREL21 = 512 +pkg debug/elf, const R_AARCH64_TLSGD_ADR_PREL21 R_AARCH64 +pkg debug/elf, const R_AARCH64_TLSGD_MOVW_G0_NC = 516 +pkg debug/elf, const R_AARCH64_TLSGD_MOVW_G0_NC R_AARCH64 +pkg debug/elf, const R_AARCH64_TLSGD_MOVW_G1 = 515 +pkg debug/elf, const R_AARCH64_TLSGD_MOVW_G1 R_AARCH64 +pkg debug/elf, const R_AARCH64_TLSLD_ADR_PAGE21 = 518 +pkg debug/elf, const R_AARCH64_TLSLD_ADR_PAGE21 R_AARCH64 +pkg debug/elf, const R_AARCH64_TLSLD_ADR_PREL21 = 517 +pkg debug/elf, const R_AARCH64_TLSLD_ADR_PREL21 R_AARCH64 +pkg debug/elf, const R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 572 +pkg debug/elf, const R_AARCH64_TLSLD_LDST128_DTPREL_LO12 R_AARCH64 +pkg debug/elf, const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 573 +pkg debug/elf, const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC R_AARCH64 +pkg debug/elf, const R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 570 +pkg debug/elf, const R_AARCH64_TLSLE_LDST128_TPREL_LO12 R_AARCH64 +pkg debug/elf, const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 571 +pkg debug/elf, const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC R_AARCH64 +pkg debug/elf, const R_ARM_ABS32_NOI = 55 +pkg debug/elf, const R_ARM_ABS32_NOI R_ARM +pkg debug/elf, const R_ARM_ALU_PCREL_15_8 = 33 +pkg debug/elf, const R_ARM_ALU_PCREL_15_8 R_ARM +pkg debug/elf, const R_ARM_ALU_PCREL_23_15 = 34 +pkg debug/elf, const R_ARM_ALU_PCREL_23_15 R_ARM +pkg debug/elf, const R_ARM_ALU_PCREL_7_0 = 32 +pkg debug/elf, const R_ARM_ALU_PCREL_7_0 R_ARM +pkg debug/elf, const R_ARM_ALU_PC_G0 = 58 +pkg debug/elf, const R_ARM_ALU_PC_G0 R_ARM +pkg debug/elf, const R_ARM_ALU_PC_G0_NC = 57 +pkg debug/elf, const R_ARM_ALU_PC_G0_NC R_ARM +pkg debug/elf, const R_ARM_ALU_PC_G1 = 60 +pkg debug/elf, const R_ARM_ALU_PC_G1 R_ARM +pkg debug/elf, const R_ARM_ALU_PC_G1_NC = 59 +pkg debug/elf, const R_ARM_ALU_PC_G1_NC R_ARM +pkg debug/elf, const R_ARM_ALU_PC_G2 = 61 +pkg debug/elf, const R_ARM_ALU_PC_G2 R_ARM +pkg debug/elf, const R_ARM_ALU_SBREL_19_12_NC = 36 +pkg debug/elf, const R_ARM_ALU_SBREL_19_12_NC R_ARM +pkg debug/elf, const R_ARM_ALU_SBREL_27_20_CK = 37 +pkg debug/elf, const R_ARM_ALU_SBREL_27_20_CK R_ARM +pkg debug/elf, const R_ARM_ALU_SB_G0 = 71 +pkg debug/elf, const R_ARM_ALU_SB_G0 R_ARM +pkg debug/elf, const R_ARM_ALU_SB_G0_NC = 70 +pkg debug/elf, const R_ARM_ALU_SB_G0_NC R_ARM +pkg debug/elf, const R_ARM_ALU_SB_G1 = 73 +pkg debug/elf, const R_ARM_ALU_SB_G1 R_ARM +pkg debug/elf, const R_ARM_ALU_SB_G1_NC = 72 +pkg debug/elf, const R_ARM_ALU_SB_G1_NC R_ARM +pkg debug/elf, const R_ARM_ALU_SB_G2 = 74 +pkg debug/elf, const R_ARM_ALU_SB_G2 R_ARM +pkg debug/elf, const R_ARM_BASE_ABS = 31 +pkg debug/elf, const R_ARM_BASE_ABS R_ARM +pkg debug/elf, const R_ARM_CALL = 28 +pkg debug/elf, const R_ARM_CALL R_ARM +pkg debug/elf, const R_ARM_GOTOFF12 = 98 +pkg debug/elf, const R_ARM_GOTOFF12 R_ARM +pkg debug/elf, const R_ARM_GOTRELAX = 99 +pkg debug/elf, const R_ARM_GOTRELAX R_ARM +pkg debug/elf, const R_ARM_GOT_ABS = 95 +pkg debug/elf, const R_ARM_GOT_ABS R_ARM +pkg debug/elf, const R_ARM_GOT_BREL12 = 97 +pkg debug/elf, const R_ARM_GOT_BREL12 R_ARM +pkg debug/elf, const R_ARM_GOT_PREL = 96 +pkg debug/elf, const R_ARM_GOT_PREL R_ARM +pkg debug/elf, const R_ARM_IRELATIVE = 160 +pkg debug/elf, const R_ARM_IRELATIVE R_ARM +pkg debug/elf, const R_ARM_JUMP24 = 29 +pkg debug/elf, const R_ARM_JUMP24 R_ARM +pkg debug/elf, const R_ARM_LDC_PC_G0 = 67 +pkg debug/elf, const R_ARM_LDC_PC_G0 R_ARM +pkg debug/elf, const R_ARM_LDC_PC_G1 = 68 +pkg debug/elf, const R_ARM_LDC_PC_G1 R_ARM +pkg debug/elf, const R_ARM_LDC_PC_G2 = 69 +pkg debug/elf, const R_ARM_LDC_PC_G2 R_ARM +pkg debug/elf, const R_ARM_LDC_SB_G0 = 81 +pkg debug/elf, const R_ARM_LDC_SB_G0 R_ARM +pkg debug/elf, const R_ARM_LDC_SB_G1 = 82 +pkg debug/elf, const R_ARM_LDC_SB_G1 R_ARM +pkg debug/elf, const R_ARM_LDC_SB_G2 = 83 +pkg debug/elf, const R_ARM_LDC_SB_G2 R_ARM +pkg debug/elf, const R_ARM_LDRS_PC_G0 = 64 +pkg debug/elf, const R_ARM_LDRS_PC_G0 R_ARM +pkg debug/elf, const R_ARM_LDRS_PC_G1 = 65 +pkg debug/elf, const R_ARM_LDRS_PC_G1 R_ARM +pkg debug/elf, const R_ARM_LDRS_PC_G2 = 66 +pkg debug/elf, const R_ARM_LDRS_PC_G2 R_ARM +pkg debug/elf, const R_ARM_LDRS_SB_G0 = 78 +pkg debug/elf, const R_ARM_LDRS_SB_G0 R_ARM +pkg debug/elf, const R_ARM_LDRS_SB_G1 = 79 +pkg debug/elf, const R_ARM_LDRS_SB_G1 R_ARM +pkg debug/elf, const R_ARM_LDRS_SB_G2 = 80 +pkg debug/elf, const R_ARM_LDRS_SB_G2 R_ARM +pkg debug/elf, const R_ARM_LDR_PC_G1 = 62 +pkg debug/elf, const R_ARM_LDR_PC_G1 R_ARM +pkg debug/elf, const R_ARM_LDR_PC_G2 = 63 +pkg debug/elf, const R_ARM_LDR_PC_G2 R_ARM +pkg debug/elf, const R_ARM_LDR_SBREL_11_10_NC = 35 +pkg debug/elf, const R_ARM_LDR_SBREL_11_10_NC R_ARM +pkg debug/elf, const R_ARM_LDR_SB_G0 = 75 +pkg debug/elf, const R_ARM_LDR_SB_G0 R_ARM +pkg debug/elf, const R_ARM_LDR_SB_G1 = 76 +pkg debug/elf, const R_ARM_LDR_SB_G1 R_ARM +pkg debug/elf, const R_ARM_LDR_SB_G2 = 77 +pkg debug/elf, const R_ARM_LDR_SB_G2 R_ARM +pkg debug/elf, const R_ARM_ME_TOO = 128 +pkg debug/elf, const R_ARM_ME_TOO R_ARM +pkg debug/elf, const R_ARM_MOVT_ABS = 44 +pkg debug/elf, const R_ARM_MOVT_ABS R_ARM +pkg debug/elf, const R_ARM_MOVT_BREL = 85 +pkg debug/elf, const R_ARM_MOVT_BREL R_ARM +pkg debug/elf, const R_ARM_MOVT_PREL = 46 +pkg debug/elf, const R_ARM_MOVT_PREL R_ARM +pkg debug/elf, const R_ARM_MOVW_ABS_NC = 43 +pkg debug/elf, const R_ARM_MOVW_ABS_NC R_ARM +pkg debug/elf, const R_ARM_MOVW_BREL = 86 +pkg debug/elf, const R_ARM_MOVW_BREL R_ARM +pkg debug/elf, const R_ARM_MOVW_BREL_NC = 84 +pkg debug/elf, const R_ARM_MOVW_BREL_NC R_ARM +pkg debug/elf, const R_ARM_MOVW_PREL_NC = 45 +pkg debug/elf, const R_ARM_MOVW_PREL_NC R_ARM +pkg debug/elf, const R_ARM_PLT32_ABS = 94 +pkg debug/elf, const R_ARM_PLT32_ABS R_ARM +pkg debug/elf, const R_ARM_PREL31 = 42 +pkg debug/elf, const R_ARM_PREL31 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_0 = 112 +pkg debug/elf, const R_ARM_PRIVATE_0 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_1 = 113 +pkg debug/elf, const R_ARM_PRIVATE_1 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_10 = 122 +pkg debug/elf, const R_ARM_PRIVATE_10 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_11 = 123 +pkg debug/elf, const R_ARM_PRIVATE_11 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_12 = 124 +pkg debug/elf, const R_ARM_PRIVATE_12 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_13 = 125 +pkg debug/elf, const R_ARM_PRIVATE_13 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_14 = 126 +pkg debug/elf, const R_ARM_PRIVATE_14 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_15 = 127 +pkg debug/elf, const R_ARM_PRIVATE_15 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_2 = 114 +pkg debug/elf, const R_ARM_PRIVATE_2 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_3 = 115 +pkg debug/elf, const R_ARM_PRIVATE_3 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_4 = 116 +pkg debug/elf, const R_ARM_PRIVATE_4 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_5 = 117 +pkg debug/elf, const R_ARM_PRIVATE_5 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_6 = 118 +pkg debug/elf, const R_ARM_PRIVATE_6 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_7 = 119 +pkg debug/elf, const R_ARM_PRIVATE_7 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_8 = 120 +pkg debug/elf, const R_ARM_PRIVATE_8 R_ARM +pkg debug/elf, const R_ARM_PRIVATE_9 = 121 +pkg debug/elf, const R_ARM_PRIVATE_9 R_ARM +pkg debug/elf, const R_ARM_REL32_NOI = 56 +pkg debug/elf, const R_ARM_REL32_NOI R_ARM +pkg debug/elf, const R_ARM_RXPC25 = 249 +pkg debug/elf, const R_ARM_RXPC25 R_ARM +pkg debug/elf, const R_ARM_SBREL31 = 39 +pkg debug/elf, const R_ARM_SBREL31 R_ARM +pkg debug/elf, const R_ARM_TARGET1 = 38 +pkg debug/elf, const R_ARM_TARGET1 R_ARM +pkg debug/elf, const R_ARM_TARGET2 = 41 +pkg debug/elf, const R_ARM_TARGET2 R_ARM +pkg debug/elf, const R_ARM_THM_ALU_ABS_G0_NC = 132 +pkg debug/elf, const R_ARM_THM_ALU_ABS_G0_NC R_ARM +pkg debug/elf, const R_ARM_THM_ALU_ABS_G1_NC = 133 +pkg debug/elf, const R_ARM_THM_ALU_ABS_G1_NC R_ARM +pkg debug/elf, const R_ARM_THM_ALU_ABS_G2_NC = 134 +pkg debug/elf, const R_ARM_THM_ALU_ABS_G2_NC R_ARM +pkg debug/elf, const R_ARM_THM_ALU_ABS_G3 = 135 +pkg debug/elf, const R_ARM_THM_ALU_ABS_G3 R_ARM +pkg debug/elf, const R_ARM_THM_ALU_PREL_11_0 = 53 +pkg debug/elf, const R_ARM_THM_ALU_PREL_11_0 R_ARM +pkg debug/elf, const R_ARM_THM_GOT_BREL12 = 131 +pkg debug/elf, const R_ARM_THM_GOT_BREL12 R_ARM +pkg debug/elf, const R_ARM_THM_JUMP11 = 102 +pkg debug/elf, const R_ARM_THM_JUMP11 R_ARM +pkg debug/elf, const R_ARM_THM_JUMP19 = 51 +pkg debug/elf, const R_ARM_THM_JUMP19 R_ARM +pkg debug/elf, const R_ARM_THM_JUMP24 = 30 +pkg debug/elf, const R_ARM_THM_JUMP24 R_ARM +pkg debug/elf, const R_ARM_THM_JUMP6 = 52 +pkg debug/elf, const R_ARM_THM_JUMP6 R_ARM +pkg debug/elf, const R_ARM_THM_JUMP8 = 103 +pkg debug/elf, const R_ARM_THM_JUMP8 R_ARM +pkg debug/elf, const R_ARM_THM_MOVT_ABS = 48 +pkg debug/elf, const R_ARM_THM_MOVT_ABS R_ARM +pkg debug/elf, const R_ARM_THM_MOVT_BREL = 88 +pkg debug/elf, const R_ARM_THM_MOVT_BREL R_ARM +pkg debug/elf, const R_ARM_THM_MOVT_PREL = 50 +pkg debug/elf, const R_ARM_THM_MOVT_PREL R_ARM +pkg debug/elf, const R_ARM_THM_MOVW_ABS_NC = 47 +pkg debug/elf, const R_ARM_THM_MOVW_ABS_NC R_ARM +pkg debug/elf, const R_ARM_THM_MOVW_BREL = 89 +pkg debug/elf, const R_ARM_THM_MOVW_BREL R_ARM +pkg debug/elf, const R_ARM_THM_MOVW_BREL_NC = 87 +pkg debug/elf, const R_ARM_THM_MOVW_BREL_NC R_ARM +pkg debug/elf, const R_ARM_THM_MOVW_PREL_NC = 49 +pkg debug/elf, const R_ARM_THM_MOVW_PREL_NC R_ARM +pkg debug/elf, const R_ARM_THM_PC12 = 54 +pkg debug/elf, const R_ARM_THM_PC12 R_ARM +pkg debug/elf, const R_ARM_THM_TLS_CALL = 93 +pkg debug/elf, const R_ARM_THM_TLS_CALL R_ARM +pkg debug/elf, const R_ARM_THM_TLS_DESCSEQ16 = 129 +pkg debug/elf, const R_ARM_THM_TLS_DESCSEQ16 R_ARM +pkg debug/elf, const R_ARM_THM_TLS_DESCSEQ32 = 130 +pkg debug/elf, const R_ARM_THM_TLS_DESCSEQ32 R_ARM +pkg debug/elf, const R_ARM_TLS_CALL = 91 +pkg debug/elf, const R_ARM_TLS_CALL R_ARM +pkg debug/elf, const R_ARM_TLS_DESCSEQ = 92 +pkg debug/elf, const R_ARM_TLS_DESCSEQ R_ARM +pkg debug/elf, const R_ARM_TLS_DTPMOD32 = 17 +pkg debug/elf, const R_ARM_TLS_DTPMOD32 R_ARM +pkg debug/elf, const R_ARM_TLS_DTPOFF32 = 18 +pkg debug/elf, const R_ARM_TLS_DTPOFF32 R_ARM +pkg debug/elf, const R_ARM_TLS_GD32 = 104 +pkg debug/elf, const R_ARM_TLS_GD32 R_ARM +pkg debug/elf, const R_ARM_TLS_GOTDESC = 90 +pkg debug/elf, const R_ARM_TLS_GOTDESC R_ARM +pkg debug/elf, const R_ARM_TLS_IE12GP = 111 +pkg debug/elf, const R_ARM_TLS_IE12GP R_ARM +pkg debug/elf, const R_ARM_TLS_IE32 = 107 +pkg debug/elf, const R_ARM_TLS_IE32 R_ARM +pkg debug/elf, const R_ARM_TLS_LDM32 = 105 +pkg debug/elf, const R_ARM_TLS_LDM32 R_ARM +pkg debug/elf, const R_ARM_TLS_LDO12 = 109 +pkg debug/elf, const R_ARM_TLS_LDO12 R_ARM +pkg debug/elf, const R_ARM_TLS_LDO32 = 106 +pkg debug/elf, const R_ARM_TLS_LDO32 R_ARM +pkg debug/elf, const R_ARM_TLS_LE12 = 110 +pkg debug/elf, const R_ARM_TLS_LE12 R_ARM +pkg debug/elf, const R_ARM_TLS_LE32 = 108 +pkg debug/elf, const R_ARM_TLS_LE32 R_ARM +pkg debug/elf, const R_ARM_TLS_TPOFF32 = 19 +pkg debug/elf, const R_ARM_TLS_TPOFF32 R_ARM +pkg debug/elf, const R_ARM_V4BX = 40 +pkg debug/elf, const R_ARM_V4BX R_ARM +pkg debug/elf, const R_PPC64_ADDR16_HIGH = 110 +pkg debug/elf, const R_PPC64_ADDR16_HIGH R_PPC64 +pkg debug/elf, const R_PPC64_ADDR16_HIGHA = 111 +pkg debug/elf, const R_PPC64_ADDR16_HIGHA R_PPC64 +pkg debug/elf, const R_PPC64_ADDR64_LOCAL = 117 +pkg debug/elf, const R_PPC64_ADDR64_LOCAL R_PPC64 +pkg debug/elf, const R_PPC64_DTPREL16_HIGH = 114 +pkg debug/elf, const R_PPC64_DTPREL16_HIGH R_PPC64 +pkg debug/elf, const R_PPC64_DTPREL16_HIGHA = 115 +pkg debug/elf, const R_PPC64_DTPREL16_HIGHA R_PPC64 +pkg debug/elf, const R_PPC64_ENTRY = 118 +pkg debug/elf, const R_PPC64_ENTRY R_PPC64 +pkg debug/elf, const R_PPC64_IRELATIVE = 248 +pkg debug/elf, const R_PPC64_IRELATIVE R_PPC64 +pkg debug/elf, const R_PPC64_JMP_IREL = 247 +pkg debug/elf, const R_PPC64_JMP_IREL R_PPC64 +pkg debug/elf, const R_PPC64_PLT16_LO_DS = 60 +pkg debug/elf, const R_PPC64_PLT16_LO_DS R_PPC64 +pkg debug/elf, const R_PPC64_PLTGOT16 = 52 +pkg debug/elf, const R_PPC64_PLTGOT16 R_PPC64 +pkg debug/elf, const R_PPC64_PLTGOT16_DS = 65 +pkg debug/elf, const R_PPC64_PLTGOT16_DS R_PPC64 +pkg debug/elf, const R_PPC64_PLTGOT16_HA = 55 +pkg debug/elf, const R_PPC64_PLTGOT16_HA R_PPC64 +pkg debug/elf, const R_PPC64_PLTGOT16_HI = 54 +pkg debug/elf, const R_PPC64_PLTGOT16_HI R_PPC64 +pkg debug/elf, const R_PPC64_PLTGOT16_LO = 53 +pkg debug/elf, const R_PPC64_PLTGOT16_LO R_PPC64 +pkg debug/elf, const R_PPC64_PLTGOT_LO_DS = 66 +pkg debug/elf, const R_PPC64_PLTGOT_LO_DS R_PPC64 +pkg debug/elf, const R_PPC64_REL16DX_HA = 246 +pkg debug/elf, const R_PPC64_REL16DX_HA R_PPC64 +pkg debug/elf, const R_PPC64_REL24_NOTOC = 116 +pkg debug/elf, const R_PPC64_REL24_NOTOC R_PPC64 +pkg debug/elf, const R_PPC64_SECTOFF_DS = 61 +pkg debug/elf, const R_PPC64_SECTOFF_DS R_PPC64 +pkg debug/elf, const R_PPC64_SECTOFF_LO_DS = 61 +pkg debug/elf, const R_PPC64_SECTOFF_LO_DS R_PPC64 +pkg debug/elf, const R_PPC64_TOCSAVE = 109 +pkg debug/elf, const R_PPC64_TOCSAVE R_PPC64 +pkg debug/elf, const R_PPC64_TPREL16_HIGH = 112 +pkg debug/elf, const R_PPC64_TPREL16_HIGH R_PPC64 +pkg debug/elf, const R_PPC64_TPREL16_HIGHA = 113 +pkg debug/elf, const R_PPC64_TPREL16_HIGHA R_PPC64 +pkg debug/elf, const R_X86_64_GOT64 = 27 +pkg debug/elf, const R_X86_64_GOT64 R_X86_64 +pkg debug/elf, const R_X86_64_GOTOFF64 = 25 +pkg debug/elf, const R_X86_64_GOTOFF64 R_X86_64 +pkg debug/elf, const R_X86_64_GOTPC32 = 26 +pkg debug/elf, const R_X86_64_GOTPC32 R_X86_64 +pkg debug/elf, const R_X86_64_GOTPC32_TLSDESC = 34 +pkg debug/elf, const R_X86_64_GOTPC32_TLSDESC R_X86_64 +pkg debug/elf, const R_X86_64_GOTPC64 = 29 +pkg debug/elf, const R_X86_64_GOTPC64 R_X86_64 +pkg debug/elf, const R_X86_64_GOTPCREL64 = 28 +pkg debug/elf, const R_X86_64_GOTPCREL64 R_X86_64 +pkg debug/elf, const R_X86_64_GOTPCRELX = 41 +pkg debug/elf, const R_X86_64_GOTPCRELX R_X86_64 +pkg debug/elf, const R_X86_64_GOTPLT64 = 30 +pkg debug/elf, const R_X86_64_GOTPLT64 R_X86_64 +pkg debug/elf, const R_X86_64_IRELATIVE = 37 +pkg debug/elf, const R_X86_64_IRELATIVE R_X86_64 +pkg debug/elf, const R_X86_64_PC32_BND = 39 +pkg debug/elf, const R_X86_64_PC32_BND R_X86_64 +pkg debug/elf, const R_X86_64_PC64 = 24 +pkg debug/elf, const R_X86_64_PC64 R_X86_64 +pkg debug/elf, const R_X86_64_PLT32_BND = 40 +pkg debug/elf, const R_X86_64_PLT32_BND R_X86_64 +pkg debug/elf, const R_X86_64_PLTOFF64 = 31 +pkg debug/elf, const R_X86_64_PLTOFF64 R_X86_64 +pkg debug/elf, const R_X86_64_RELATIVE64 = 38 +pkg debug/elf, const R_X86_64_RELATIVE64 R_X86_64 +pkg debug/elf, const R_X86_64_REX_GOTPCRELX = 42 +pkg debug/elf, const R_X86_64_REX_GOTPCRELX R_X86_64 +pkg debug/elf, const R_X86_64_SIZE32 = 32 +pkg debug/elf, const R_X86_64_SIZE32 R_X86_64 +pkg debug/elf, const R_X86_64_SIZE64 = 33 +pkg debug/elf, const R_X86_64_SIZE64 R_X86_64 +pkg debug/elf, const R_X86_64_TLSDESC = 36 +pkg debug/elf, const R_X86_64_TLSDESC R_X86_64 +pkg debug/elf, const R_X86_64_TLSDESC_CALL = 35 +pkg debug/elf, const R_X86_64_TLSDESC_CALL R_X86_64 +pkg debug/macho, const ARM64_RELOC_ADDEND = 10 +pkg debug/macho, const ARM64_RELOC_ADDEND RelocTypeARM64 +pkg debug/macho, const ARM64_RELOC_BRANCH26 = 2 +pkg debug/macho, const ARM64_RELOC_BRANCH26 RelocTypeARM64 +pkg debug/macho, const ARM64_RELOC_GOT_LOAD_PAGE21 = 5 +pkg debug/macho, const ARM64_RELOC_GOT_LOAD_PAGE21 RelocTypeARM64 +pkg debug/macho, const ARM64_RELOC_GOT_LOAD_PAGEOFF12 = 6 +pkg debug/macho, const ARM64_RELOC_GOT_LOAD_PAGEOFF12 RelocTypeARM64 +pkg debug/macho, const ARM64_RELOC_PAGE21 = 3 +pkg debug/macho, const ARM64_RELOC_PAGE21 RelocTypeARM64 +pkg debug/macho, const ARM64_RELOC_PAGEOFF12 = 4 +pkg debug/macho, const ARM64_RELOC_PAGEOFF12 RelocTypeARM64 +pkg debug/macho, const ARM64_RELOC_POINTER_TO_GOT = 7 +pkg debug/macho, const ARM64_RELOC_POINTER_TO_GOT RelocTypeARM64 +pkg debug/macho, const ARM64_RELOC_SUBTRACTOR = 1 +pkg debug/macho, const ARM64_RELOC_SUBTRACTOR RelocTypeARM64 +pkg debug/macho, const ARM64_RELOC_TLVP_LOAD_PAGE21 = 8 +pkg debug/macho, const ARM64_RELOC_TLVP_LOAD_PAGE21 RelocTypeARM64 +pkg debug/macho, const ARM64_RELOC_TLVP_LOAD_PAGEOFF12 = 9 +pkg debug/macho, const ARM64_RELOC_TLVP_LOAD_PAGEOFF12 RelocTypeARM64 +pkg debug/macho, const ARM64_RELOC_UNSIGNED = 0 +pkg debug/macho, const ARM64_RELOC_UNSIGNED RelocTypeARM64 +pkg debug/macho, const ARM_RELOC_BR24 = 5 +pkg debug/macho, const ARM_RELOC_BR24 RelocTypeARM +pkg debug/macho, const ARM_RELOC_HALF = 8 +pkg debug/macho, const ARM_RELOC_HALF RelocTypeARM +pkg debug/macho, const ARM_RELOC_HALF_SECTDIFF = 9 +pkg debug/macho, const ARM_RELOC_HALF_SECTDIFF RelocTypeARM +pkg debug/macho, const ARM_RELOC_LOCAL_SECTDIFF = 3 +pkg debug/macho, const ARM_RELOC_LOCAL_SECTDIFF RelocTypeARM +pkg debug/macho, const ARM_RELOC_PAIR = 1 +pkg debug/macho, const ARM_RELOC_PAIR RelocTypeARM +pkg debug/macho, const ARM_RELOC_PB_LA_PTR = 4 +pkg debug/macho, const ARM_RELOC_PB_LA_PTR RelocTypeARM +pkg debug/macho, const ARM_RELOC_SECTDIFF = 2 +pkg debug/macho, const ARM_RELOC_SECTDIFF RelocTypeARM +pkg debug/macho, const ARM_RELOC_VANILLA = 0 +pkg debug/macho, const ARM_RELOC_VANILLA RelocTypeARM +pkg debug/macho, const ARM_THUMB_32BIT_BRANCH = 7 +pkg debug/macho, const ARM_THUMB_32BIT_BRANCH RelocTypeARM +pkg debug/macho, const ARM_THUMB_RELOC_BR22 = 6 +pkg debug/macho, const ARM_THUMB_RELOC_BR22 RelocTypeARM +pkg debug/macho, const FlagAllModsBound = 4096 +pkg debug/macho, const FlagAllModsBound uint32 +pkg debug/macho, const FlagAllowStackExecution = 131072 +pkg debug/macho, const FlagAllowStackExecution uint32 +pkg debug/macho, const FlagAppExtensionSafe = 33554432 +pkg debug/macho, const FlagAppExtensionSafe uint32 +pkg debug/macho, const FlagBindAtLoad = 8 +pkg debug/macho, const FlagBindAtLoad uint32 +pkg debug/macho, const FlagBindsToWeak = 65536 +pkg debug/macho, const FlagBindsToWeak uint32 +pkg debug/macho, const FlagCanonical = 16384 +pkg debug/macho, const FlagCanonical uint32 +pkg debug/macho, const FlagDeadStrippableDylib = 4194304 +pkg debug/macho, const FlagDeadStrippableDylib uint32 +pkg debug/macho, const FlagDyldLink = 4 +pkg debug/macho, const FlagDyldLink uint32 +pkg debug/macho, const FlagForceFlat = 256 +pkg debug/macho, const FlagForceFlat uint32 +pkg debug/macho, const FlagHasTLVDescriptors = 8388608 +pkg debug/macho, const FlagHasTLVDescriptors uint32 +pkg debug/macho, const FlagIncrLink = 2 +pkg debug/macho, const FlagIncrLink uint32 +pkg debug/macho, const FlagLazyInit = 64 +pkg debug/macho, const FlagLazyInit uint32 +pkg debug/macho, const FlagNoFixPrebinding = 1024 +pkg debug/macho, const FlagNoFixPrebinding uint32 +pkg debug/macho, const FlagNoHeapExecution = 16777216 +pkg debug/macho, const FlagNoHeapExecution uint32 +pkg debug/macho, const FlagNoMultiDefs = 512 +pkg debug/macho, const FlagNoMultiDefs uint32 +pkg debug/macho, const FlagNoReexportedDylibs = 1048576 +pkg debug/macho, const FlagNoReexportedDylibs uint32 +pkg debug/macho, const FlagNoUndefs = 1 +pkg debug/macho, const FlagNoUndefs uint32 +pkg debug/macho, const FlagPIE = 2097152 +pkg debug/macho, const FlagPIE uint32 +pkg debug/macho, const FlagPrebindable = 2048 +pkg debug/macho, const FlagPrebindable uint32 +pkg debug/macho, const FlagPrebound = 16 +pkg debug/macho, const FlagPrebound uint32 +pkg debug/macho, const FlagRootSafe = 262144 +pkg debug/macho, const FlagRootSafe uint32 +pkg debug/macho, const FlagSetuidSafe = 524288 +pkg debug/macho, const FlagSetuidSafe uint32 +pkg debug/macho, const FlagSplitSegs = 32 +pkg debug/macho, const FlagSplitSegs uint32 +pkg debug/macho, const FlagSubsectionsViaSymbols = 8192 +pkg debug/macho, const FlagSubsectionsViaSymbols uint32 +pkg debug/macho, const FlagTwoLevel = 128 +pkg debug/macho, const FlagTwoLevel uint32 +pkg debug/macho, const FlagWeakDefines = 32768 +pkg debug/macho, const FlagWeakDefines uint32 +pkg debug/macho, const GENERIC_RELOC_LOCAL_SECTDIFF = 4 +pkg debug/macho, const GENERIC_RELOC_LOCAL_SECTDIFF RelocTypeGeneric +pkg debug/macho, const GENERIC_RELOC_PAIR = 1 +pkg debug/macho, const GENERIC_RELOC_PAIR RelocTypeGeneric +pkg debug/macho, const GENERIC_RELOC_PB_LA_PTR = 3 +pkg debug/macho, const GENERIC_RELOC_PB_LA_PTR RelocTypeGeneric +pkg debug/macho, const GENERIC_RELOC_SECTDIFF = 2 +pkg debug/macho, const GENERIC_RELOC_SECTDIFF RelocTypeGeneric +pkg debug/macho, const GENERIC_RELOC_TLV = 5 +pkg debug/macho, const GENERIC_RELOC_TLV RelocTypeGeneric +pkg debug/macho, const GENERIC_RELOC_VANILLA = 0 +pkg debug/macho, const GENERIC_RELOC_VANILLA RelocTypeGeneric +pkg debug/macho, const LoadCmdRpath = 2147483676 +pkg debug/macho, const LoadCmdRpath LoadCmd +pkg debug/macho, const X86_64_RELOC_BRANCH = 2 +pkg debug/macho, const X86_64_RELOC_BRANCH RelocTypeX86_64 +pkg debug/macho, const X86_64_RELOC_GOT = 4 +pkg debug/macho, const X86_64_RELOC_GOT RelocTypeX86_64 +pkg debug/macho, const X86_64_RELOC_GOT_LOAD = 3 +pkg debug/macho, const X86_64_RELOC_GOT_LOAD RelocTypeX86_64 +pkg debug/macho, const X86_64_RELOC_SIGNED = 1 +pkg debug/macho, const X86_64_RELOC_SIGNED RelocTypeX86_64 +pkg debug/macho, const X86_64_RELOC_SIGNED_1 = 6 +pkg debug/macho, const X86_64_RELOC_SIGNED_1 RelocTypeX86_64 +pkg debug/macho, const X86_64_RELOC_SIGNED_2 = 7 +pkg debug/macho, const X86_64_RELOC_SIGNED_2 RelocTypeX86_64 +pkg debug/macho, const X86_64_RELOC_SIGNED_4 = 8 +pkg debug/macho, const X86_64_RELOC_SIGNED_4 RelocTypeX86_64 +pkg debug/macho, const X86_64_RELOC_SUBTRACTOR = 5 +pkg debug/macho, const X86_64_RELOC_SUBTRACTOR RelocTypeX86_64 +pkg debug/macho, const X86_64_RELOC_TLV = 9 +pkg debug/macho, const X86_64_RELOC_TLV RelocTypeX86_64 +pkg debug/macho, const X86_64_RELOC_UNSIGNED = 0 +pkg debug/macho, const X86_64_RELOC_UNSIGNED RelocTypeX86_64 +pkg debug/macho, method (RelocTypeARM) GoString() string +pkg debug/macho, method (RelocTypeARM) String() string +pkg debug/macho, method (RelocTypeARM64) GoString() string +pkg debug/macho, method (RelocTypeARM64) String() string +pkg debug/macho, method (RelocTypeGeneric) GoString() string +pkg debug/macho, method (RelocTypeGeneric) String() string +pkg debug/macho, method (RelocTypeX86_64) GoString() string +pkg debug/macho, method (RelocTypeX86_64) String() string +pkg debug/macho, method (Rpath) Raw() []uint8 +pkg debug/macho, method (Type) GoString() string +pkg debug/macho, method (Type) String() string +pkg debug/macho, type Reloc struct +pkg debug/macho, type Reloc struct, Addr uint32 +pkg debug/macho, type Reloc struct, Extern bool +pkg debug/macho, type Reloc struct, Len uint8 +pkg debug/macho, type Reloc struct, Pcrel bool +pkg debug/macho, type Reloc struct, Scattered bool +pkg debug/macho, type Reloc struct, Type uint8 +pkg debug/macho, type Reloc struct, Value uint32 +pkg debug/macho, type RelocTypeARM int +pkg debug/macho, type RelocTypeARM64 int +pkg debug/macho, type RelocTypeGeneric int +pkg debug/macho, type RelocTypeX86_64 int +pkg debug/macho, type Rpath struct +pkg debug/macho, type Rpath struct, Path string +pkg debug/macho, type Rpath struct, embedded LoadBytes +pkg debug/macho, type RpathCmd struct +pkg debug/macho, type RpathCmd struct, Cmd LoadCmd +pkg debug/macho, type RpathCmd struct, Len uint32 +pkg debug/macho, type RpathCmd struct, Path uint32 +pkg debug/macho, type Section struct, Relocs []Reloc +pkg encoding/asn1, const TagNumericString = 18 +pkg encoding/asn1, const TagNumericString ideal-int +pkg encoding/asn1, func MarshalWithParams(interface{}, string) ([]uint8, error) +pkg encoding/csv, type ParseError struct, StartLine int +pkg encoding/hex, func NewDecoder(io.Reader) io.Reader +pkg encoding/hex, func NewEncoder(io.Writer) io.Writer +pkg encoding/json, method (*Decoder) DisallowUnknownFields() +pkg encoding/xml, func NewTokenDecoder(TokenReader) *Decoder +pkg encoding/xml, type TokenReader interface { Token } +pkg encoding/xml, type TokenReader interface, Token() (Token, error) +pkg flag, method (*FlagSet) ErrorHandling() ErrorHandling +pkg flag, method (*FlagSet) Name() string +pkg flag, method (*FlagSet) Output() io.Writer +pkg math, func Erfcinv(float64) float64 +pkg math, func Erfinv(float64) float64 +pkg math, func Round(float64) float64 +pkg math, func RoundToEven(float64) float64 +pkg math/big, const MaxBase = 62 +pkg math/big, method (*Float) Sqrt(*Float) *Float +pkg math/big, method (*Int) CmpAbs(*Int) int +pkg math/rand, func Shuffle(int, func(int, int)) +pkg math/rand, method (*Rand) Shuffle(int, func(int, int)) +pkg net, method (*TCPListener) SyscallConn() (syscall.RawConn, error) +pkg net, method (*UnixListener) SyscallConn() (syscall.RawConn, error) +pkg net/smtp, method (*Client) Noop() error +pkg os, func IsTimeout(error) bool +pkg os, method (*File) SetDeadline(time.Time) error +pkg os, method (*File) SetReadDeadline(time.Time) error +pkg os, method (*File) SetWriteDeadline(time.Time) error +pkg os, method (*PathError) Timeout() bool +pkg os, method (*SyscallError) Timeout() bool +pkg os, var ErrNoDeadline error +pkg strings, method (*Builder) Grow(int) +pkg strings, method (*Builder) Len() int +pkg strings, method (*Builder) ReadFrom(io.Reader) (int64, error) +pkg strings, method (*Builder) Reset() +pkg strings, method (*Builder) String() string +pkg strings, method (*Builder) Write([]uint8) (int, error) +pkg strings, method (*Builder) WriteByte(uint8) error +pkg strings, method (*Builder) WriteRune(int32) (int, error) +pkg strings, method (*Builder) WriteString(string) (int, error) +pkg strings, type Builder struct +pkg syscall (freebsd-386), const SYS_UTIMENSAT = 547 +pkg syscall (freebsd-386), const SYS_UTIMENSAT ideal-int +pkg syscall (freebsd-386-cgo), const SYS_UTIMENSAT = 547 +pkg syscall (freebsd-386-cgo), const SYS_UTIMENSAT ideal-int +pkg syscall (freebsd-amd64), const SYS_UTIMENSAT = 547 +pkg syscall (freebsd-amd64), const SYS_UTIMENSAT ideal-int +pkg syscall (freebsd-amd64-cgo), const SYS_UTIMENSAT = 547 +pkg syscall (freebsd-amd64-cgo), const SYS_UTIMENSAT ideal-int +pkg syscall (freebsd-arm), const SYS_UTIMENSAT = 547 +pkg syscall (freebsd-arm), const SYS_UTIMENSAT ideal-int +pkg syscall (freebsd-arm-cgo), const SYS_UTIMENSAT = 547 +pkg syscall (freebsd-arm-cgo), const SYS_UTIMENSAT ideal-int +pkg syscall (windows-386), func CreateProcessAsUser(Token, *uint16, *uint16, *SecurityAttributes, *SecurityAttributes, bool, uint32, *uint16, *uint16, *StartupInfo, *ProcessInformation) error +pkg syscall (windows-386), type SysProcAttr struct, Token Token +pkg syscall (windows-amd64), func CreateProcessAsUser(Token, *uint16, *uint16, *SecurityAttributes, *SecurityAttributes, bool, uint32, *uint16, *uint16, *StartupInfo, *ProcessInformation) error +pkg syscall (windows-amd64), type SysProcAttr struct, Token Token +pkg text/template/parse, const NodeBreak = 20 +pkg text/template/parse, const NodeBreak NodeType +pkg text/template/parse, const NodeContinue = 21 +pkg text/template/parse, const NodeContinue NodeType +pkg text/template/parse, method (*BreakNode) Copy() Node +pkg text/template/parse, method (*BreakNode) Position() Pos +pkg text/template/parse, method (*BreakNode) String() string +pkg text/template/parse, method (*BreakNode) Type() NodeType +pkg text/template/parse, method (*ContinueNode) Copy() Node +pkg text/template/parse, method (*ContinueNode) Position() Pos +pkg text/template/parse, method (*ContinueNode) String() string +pkg text/template/parse, method (*ContinueNode) Type() NodeType +pkg text/template/parse, type BreakNode struct +pkg text/template/parse, type BreakNode struct, embedded NodeType +pkg text/template/parse, type BreakNode struct, embedded Pos +pkg text/template/parse, type ContinueNode struct +pkg text/template/parse, type ContinueNode struct, embedded NodeType +pkg text/template/parse, type ContinueNode struct, embedded Pos +pkg time, func LoadLocationFromTZData(string, []uint8) (*Location, error) +pkg unicode, const Version = "10.0.0" +pkg unicode, var Masaram_Gondi *RangeTable +pkg unicode, var Nushu *RangeTable +pkg unicode, var Regional_Indicator *RangeTable +pkg unicode, var Soyombo *RangeTable +pkg unicode, var Zanabazar_Square *RangeTable diff --git a/api/next.txt b/api/next.txt index 1394a0d491a72..e69de29bb2d1d 100644 --- a/api/next.txt +++ b/api/next.txt @@ -1,641 +0,0 @@ -pkg archive/tar, const FormatGNU = 8 -pkg archive/tar, const FormatGNU Format -pkg archive/tar, const FormatPAX = 4 -pkg archive/tar, const FormatPAX Format -pkg archive/tar, const FormatUSTAR = 2 -pkg archive/tar, const FormatUSTAR Format -pkg archive/tar, const FormatUnknown = 0 -pkg archive/tar, const FormatUnknown Format -pkg archive/tar, method (*Header) DetectSparseHoles(*os.File) error -pkg archive/tar, method (*Header) PunchSparseHoles(*os.File) error -pkg archive/tar, method (*Reader) WriteTo(io.Writer) (int64, error) -pkg archive/tar, method (*Writer) ReadFrom(io.Reader) (int64, error) -pkg archive/tar, method (Format) String() string -pkg archive/tar, type Format int -pkg archive/tar, type Header struct, Format Format -pkg archive/tar, type Header struct, PAXRecords map[string]string -pkg archive/tar, type Header struct, SparseHoles []SparseEntry -pkg archive/tar, type SparseEntry struct -pkg archive/tar, type SparseEntry struct, Length int64 -pkg archive/tar, type SparseEntry struct, Offset int64 -pkg archive/zip, type FileHeader struct, Modified time.Time -pkg archive/zip, type FileHeader struct, NonUTF8 bool -pkg archive/zip, type Writer struct, Comment string -pkg bufio, method (*Reader) Size() int -pkg bufio, method (*Writer) Size() int -pkg crypto/tls, const ECDSAWithSHA1 = 515 -pkg crypto/tls, const ECDSAWithSHA1 SignatureScheme -pkg crypto/x509, const CANotAuthorizedForExtKeyUsage = 9 -pkg crypto/x509, const CANotAuthorizedForExtKeyUsage InvalidReason -pkg crypto/x509, const NameConstraintsWithoutSANs = 6 -pkg crypto/x509, const NameConstraintsWithoutSANs InvalidReason -pkg crypto/x509, const TooManyConstraints = 8 -pkg crypto/x509, const TooManyConstraints InvalidReason -pkg crypto/x509, const UnconstrainedName = 7 -pkg crypto/x509, const UnconstrainedName InvalidReason -pkg crypto/x509, func MarshalPKCS8PrivateKey(interface{}) ([]uint8, error) -pkg crypto/x509, method (PublicKeyAlgorithm) String() string -pkg crypto/x509, type Certificate struct, ExcludedEmailAddresses []string -pkg crypto/x509, type Certificate struct, ExcludedIPRanges []*net.IPNet -pkg crypto/x509, type Certificate struct, ExcludedURIDomains []string -pkg crypto/x509, type Certificate struct, PermittedEmailAddresses []string -pkg crypto/x509, type Certificate struct, PermittedIPRanges []*net.IPNet -pkg crypto/x509, type Certificate struct, PermittedURIDomains []string -pkg crypto/x509, type Certificate struct, URIs []*url.URL -pkg crypto/x509, type CertificateInvalidError struct, Detail string -pkg crypto/x509, type CertificateRequest struct, URIs []*url.URL -pkg crypto/x509, type VerifyOptions struct, MaxConstraintComparisions int -pkg crypto/x509/pkix, method (Name) String() string -pkg crypto/x509/pkix, method (RDNSequence) String() string -pkg database/sql, func OpenDB(driver.Connector) *DB -pkg database/sql/driver, type Connector interface { Connect, Driver } -pkg database/sql/driver, type Connector interface, Connect(context.Context) (Conn, error) -pkg database/sql/driver, type Connector interface, Driver() Driver -pkg database/sql/driver, type SessionResetter interface { ResetSession } -pkg database/sql/driver, type SessionResetter interface, ResetSession(context.Context) error -pkg debug/elf, const R_386_16 = 20 -pkg debug/elf, const R_386_16 R_386 -pkg debug/elf, const R_386_32PLT = 11 -pkg debug/elf, const R_386_32PLT R_386 -pkg debug/elf, const R_386_8 = 22 -pkg debug/elf, const R_386_8 R_386 -pkg debug/elf, const R_386_GOT32X = 43 -pkg debug/elf, const R_386_GOT32X R_386 -pkg debug/elf, const R_386_IRELATIVE = 42 -pkg debug/elf, const R_386_IRELATIVE R_386 -pkg debug/elf, const R_386_PC16 = 21 -pkg debug/elf, const R_386_PC16 R_386 -pkg debug/elf, const R_386_PC8 = 23 -pkg debug/elf, const R_386_PC8 R_386 -pkg debug/elf, const R_386_SIZE32 = 38 -pkg debug/elf, const R_386_SIZE32 R_386 -pkg debug/elf, const R_386_TLS_DESC = 41 -pkg debug/elf, const R_386_TLS_DESC R_386 -pkg debug/elf, const R_386_TLS_DESC_CALL = 40 -pkg debug/elf, const R_386_TLS_DESC_CALL R_386 -pkg debug/elf, const R_386_TLS_GOTDESC = 39 -pkg debug/elf, const R_386_TLS_GOTDESC R_386 -pkg debug/elf, const R_AARCH64_LD64_GOTOFF_LO15 = 310 -pkg debug/elf, const R_AARCH64_LD64_GOTOFF_LO15 R_AARCH64 -pkg debug/elf, const R_AARCH64_LD64_GOTPAGE_LO15 = 313 -pkg debug/elf, const R_AARCH64_LD64_GOTPAGE_LO15 R_AARCH64 -pkg debug/elf, const R_AARCH64_TLSGD_ADR_PREL21 = 512 -pkg debug/elf, const R_AARCH64_TLSGD_ADR_PREL21 R_AARCH64 -pkg debug/elf, const R_AARCH64_TLSGD_MOVW_G0_NC = 516 -pkg debug/elf, const R_AARCH64_TLSGD_MOVW_G0_NC R_AARCH64 -pkg debug/elf, const R_AARCH64_TLSGD_MOVW_G1 = 515 -pkg debug/elf, const R_AARCH64_TLSGD_MOVW_G1 R_AARCH64 -pkg debug/elf, const R_AARCH64_TLSLD_ADR_PAGE21 = 518 -pkg debug/elf, const R_AARCH64_TLSLD_ADR_PAGE21 R_AARCH64 -pkg debug/elf, const R_AARCH64_TLSLD_ADR_PREL21 = 517 -pkg debug/elf, const R_AARCH64_TLSLD_ADR_PREL21 R_AARCH64 -pkg debug/elf, const R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 572 -pkg debug/elf, const R_AARCH64_TLSLD_LDST128_DTPREL_LO12 R_AARCH64 -pkg debug/elf, const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 573 -pkg debug/elf, const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC R_AARCH64 -pkg debug/elf, const R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 570 -pkg debug/elf, const R_AARCH64_TLSLE_LDST128_TPREL_LO12 R_AARCH64 -pkg debug/elf, const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 571 -pkg debug/elf, const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC R_AARCH64 -pkg debug/elf, const R_ARM_ABS32_NOI = 55 -pkg debug/elf, const R_ARM_ABS32_NOI R_ARM -pkg debug/elf, const R_ARM_ALU_PCREL_15_8 = 33 -pkg debug/elf, const R_ARM_ALU_PCREL_15_8 R_ARM -pkg debug/elf, const R_ARM_ALU_PCREL_23_15 = 34 -pkg debug/elf, const R_ARM_ALU_PCREL_23_15 R_ARM -pkg debug/elf, const R_ARM_ALU_PCREL_7_0 = 32 -pkg debug/elf, const R_ARM_ALU_PCREL_7_0 R_ARM -pkg debug/elf, const R_ARM_ALU_PC_G0 = 58 -pkg debug/elf, const R_ARM_ALU_PC_G0 R_ARM -pkg debug/elf, const R_ARM_ALU_PC_G0_NC = 57 -pkg debug/elf, const R_ARM_ALU_PC_G0_NC R_ARM -pkg debug/elf, const R_ARM_ALU_PC_G1 = 60 -pkg debug/elf, const R_ARM_ALU_PC_G1 R_ARM -pkg debug/elf, const R_ARM_ALU_PC_G1_NC = 59 -pkg debug/elf, const R_ARM_ALU_PC_G1_NC R_ARM -pkg debug/elf, const R_ARM_ALU_PC_G2 = 61 -pkg debug/elf, const R_ARM_ALU_PC_G2 R_ARM -pkg debug/elf, const R_ARM_ALU_SBREL_19_12_NC = 36 -pkg debug/elf, const R_ARM_ALU_SBREL_19_12_NC R_ARM -pkg debug/elf, const R_ARM_ALU_SBREL_27_20_CK = 37 -pkg debug/elf, const R_ARM_ALU_SBREL_27_20_CK R_ARM -pkg debug/elf, const R_ARM_ALU_SB_G0 = 71 -pkg debug/elf, const R_ARM_ALU_SB_G0 R_ARM -pkg debug/elf, const R_ARM_ALU_SB_G0_NC = 70 -pkg debug/elf, const R_ARM_ALU_SB_G0_NC R_ARM -pkg debug/elf, const R_ARM_ALU_SB_G1 = 73 -pkg debug/elf, const R_ARM_ALU_SB_G1 R_ARM -pkg debug/elf, const R_ARM_ALU_SB_G1_NC = 72 -pkg debug/elf, const R_ARM_ALU_SB_G1_NC R_ARM -pkg debug/elf, const R_ARM_ALU_SB_G2 = 74 -pkg debug/elf, const R_ARM_ALU_SB_G2 R_ARM -pkg debug/elf, const R_ARM_BASE_ABS = 31 -pkg debug/elf, const R_ARM_BASE_ABS R_ARM -pkg debug/elf, const R_ARM_CALL = 28 -pkg debug/elf, const R_ARM_CALL R_ARM -pkg debug/elf, const R_ARM_GOTOFF12 = 98 -pkg debug/elf, const R_ARM_GOTOFF12 R_ARM -pkg debug/elf, const R_ARM_GOTRELAX = 99 -pkg debug/elf, const R_ARM_GOTRELAX R_ARM -pkg debug/elf, const R_ARM_GOT_ABS = 95 -pkg debug/elf, const R_ARM_GOT_ABS R_ARM -pkg debug/elf, const R_ARM_GOT_BREL12 = 97 -pkg debug/elf, const R_ARM_GOT_BREL12 R_ARM -pkg debug/elf, const R_ARM_GOT_PREL = 96 -pkg debug/elf, const R_ARM_GOT_PREL R_ARM -pkg debug/elf, const R_ARM_IRELATIVE = 160 -pkg debug/elf, const R_ARM_IRELATIVE R_ARM -pkg debug/elf, const R_ARM_JUMP24 = 29 -pkg debug/elf, const R_ARM_JUMP24 R_ARM -pkg debug/elf, const R_ARM_LDC_PC_G0 = 67 -pkg debug/elf, const R_ARM_LDC_PC_G0 R_ARM -pkg debug/elf, const R_ARM_LDC_PC_G1 = 68 -pkg debug/elf, const R_ARM_LDC_PC_G1 R_ARM -pkg debug/elf, const R_ARM_LDC_PC_G2 = 69 -pkg debug/elf, const R_ARM_LDC_PC_G2 R_ARM -pkg debug/elf, const R_ARM_LDC_SB_G0 = 81 -pkg debug/elf, const R_ARM_LDC_SB_G0 R_ARM -pkg debug/elf, const R_ARM_LDC_SB_G1 = 82 -pkg debug/elf, const R_ARM_LDC_SB_G1 R_ARM -pkg debug/elf, const R_ARM_LDC_SB_G2 = 83 -pkg debug/elf, const R_ARM_LDC_SB_G2 R_ARM -pkg debug/elf, const R_ARM_LDRS_PC_G0 = 64 -pkg debug/elf, const R_ARM_LDRS_PC_G0 R_ARM -pkg debug/elf, const R_ARM_LDRS_PC_G1 = 65 -pkg debug/elf, const R_ARM_LDRS_PC_G1 R_ARM -pkg debug/elf, const R_ARM_LDRS_PC_G2 = 66 -pkg debug/elf, const R_ARM_LDRS_PC_G2 R_ARM -pkg debug/elf, const R_ARM_LDRS_SB_G0 = 78 -pkg debug/elf, const R_ARM_LDRS_SB_G0 R_ARM -pkg debug/elf, const R_ARM_LDRS_SB_G1 = 79 -pkg debug/elf, const R_ARM_LDRS_SB_G1 R_ARM -pkg debug/elf, const R_ARM_LDRS_SB_G2 = 80 -pkg debug/elf, const R_ARM_LDRS_SB_G2 R_ARM -pkg debug/elf, const R_ARM_LDR_PC_G1 = 62 -pkg debug/elf, const R_ARM_LDR_PC_G1 R_ARM -pkg debug/elf, const R_ARM_LDR_PC_G2 = 63 -pkg debug/elf, const R_ARM_LDR_PC_G2 R_ARM -pkg debug/elf, const R_ARM_LDR_SBREL_11_10_NC = 35 -pkg debug/elf, const R_ARM_LDR_SBREL_11_10_NC R_ARM -pkg debug/elf, const R_ARM_LDR_SB_G0 = 75 -pkg debug/elf, const R_ARM_LDR_SB_G0 R_ARM -pkg debug/elf, const R_ARM_LDR_SB_G1 = 76 -pkg debug/elf, const R_ARM_LDR_SB_G1 R_ARM -pkg debug/elf, const R_ARM_LDR_SB_G2 = 77 -pkg debug/elf, const R_ARM_LDR_SB_G2 R_ARM -pkg debug/elf, const R_ARM_ME_TOO = 128 -pkg debug/elf, const R_ARM_ME_TOO R_ARM -pkg debug/elf, const R_ARM_MOVT_ABS = 44 -pkg debug/elf, const R_ARM_MOVT_ABS R_ARM -pkg debug/elf, const R_ARM_MOVT_BREL = 85 -pkg debug/elf, const R_ARM_MOVT_BREL R_ARM -pkg debug/elf, const R_ARM_MOVT_PREL = 46 -pkg debug/elf, const R_ARM_MOVT_PREL R_ARM -pkg debug/elf, const R_ARM_MOVW_ABS_NC = 43 -pkg debug/elf, const R_ARM_MOVW_ABS_NC R_ARM -pkg debug/elf, const R_ARM_MOVW_BREL = 86 -pkg debug/elf, const R_ARM_MOVW_BREL R_ARM -pkg debug/elf, const R_ARM_MOVW_BREL_NC = 84 -pkg debug/elf, const R_ARM_MOVW_BREL_NC R_ARM -pkg debug/elf, const R_ARM_MOVW_PREL_NC = 45 -pkg debug/elf, const R_ARM_MOVW_PREL_NC R_ARM -pkg debug/elf, const R_ARM_PLT32_ABS = 94 -pkg debug/elf, const R_ARM_PLT32_ABS R_ARM -pkg debug/elf, const R_ARM_PREL31 = 42 -pkg debug/elf, const R_ARM_PREL31 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_0 = 112 -pkg debug/elf, const R_ARM_PRIVATE_0 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_1 = 113 -pkg debug/elf, const R_ARM_PRIVATE_1 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_10 = 122 -pkg debug/elf, const R_ARM_PRIVATE_10 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_11 = 123 -pkg debug/elf, const R_ARM_PRIVATE_11 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_12 = 124 -pkg debug/elf, const R_ARM_PRIVATE_12 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_13 = 125 -pkg debug/elf, const R_ARM_PRIVATE_13 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_14 = 126 -pkg debug/elf, const R_ARM_PRIVATE_14 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_15 = 127 -pkg debug/elf, const R_ARM_PRIVATE_15 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_2 = 114 -pkg debug/elf, const R_ARM_PRIVATE_2 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_3 = 115 -pkg debug/elf, const R_ARM_PRIVATE_3 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_4 = 116 -pkg debug/elf, const R_ARM_PRIVATE_4 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_5 = 117 -pkg debug/elf, const R_ARM_PRIVATE_5 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_6 = 118 -pkg debug/elf, const R_ARM_PRIVATE_6 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_7 = 119 -pkg debug/elf, const R_ARM_PRIVATE_7 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_8 = 120 -pkg debug/elf, const R_ARM_PRIVATE_8 R_ARM -pkg debug/elf, const R_ARM_PRIVATE_9 = 121 -pkg debug/elf, const R_ARM_PRIVATE_9 R_ARM -pkg debug/elf, const R_ARM_REL32_NOI = 56 -pkg debug/elf, const R_ARM_REL32_NOI R_ARM -pkg debug/elf, const R_ARM_RXPC25 = 249 -pkg debug/elf, const R_ARM_RXPC25 R_ARM -pkg debug/elf, const R_ARM_SBREL31 = 39 -pkg debug/elf, const R_ARM_SBREL31 R_ARM -pkg debug/elf, const R_ARM_TARGET1 = 38 -pkg debug/elf, const R_ARM_TARGET1 R_ARM -pkg debug/elf, const R_ARM_TARGET2 = 41 -pkg debug/elf, const R_ARM_TARGET2 R_ARM -pkg debug/elf, const R_ARM_THM_ALU_ABS_G0_NC = 132 -pkg debug/elf, const R_ARM_THM_ALU_ABS_G0_NC R_ARM -pkg debug/elf, const R_ARM_THM_ALU_ABS_G1_NC = 133 -pkg debug/elf, const R_ARM_THM_ALU_ABS_G1_NC R_ARM -pkg debug/elf, const R_ARM_THM_ALU_ABS_G2_NC = 134 -pkg debug/elf, const R_ARM_THM_ALU_ABS_G2_NC R_ARM -pkg debug/elf, const R_ARM_THM_ALU_ABS_G3 = 135 -pkg debug/elf, const R_ARM_THM_ALU_ABS_G3 R_ARM -pkg debug/elf, const R_ARM_THM_ALU_PREL_11_0 = 53 -pkg debug/elf, const R_ARM_THM_ALU_PREL_11_0 R_ARM -pkg debug/elf, const R_ARM_THM_GOT_BREL12 = 131 -pkg debug/elf, const R_ARM_THM_GOT_BREL12 R_ARM -pkg debug/elf, const R_ARM_THM_JUMP11 = 102 -pkg debug/elf, const R_ARM_THM_JUMP11 R_ARM -pkg debug/elf, const R_ARM_THM_JUMP19 = 51 -pkg debug/elf, const R_ARM_THM_JUMP19 R_ARM -pkg debug/elf, const R_ARM_THM_JUMP24 = 30 -pkg debug/elf, const R_ARM_THM_JUMP24 R_ARM -pkg debug/elf, const R_ARM_THM_JUMP6 = 52 -pkg debug/elf, const R_ARM_THM_JUMP6 R_ARM -pkg debug/elf, const R_ARM_THM_JUMP8 = 103 -pkg debug/elf, const R_ARM_THM_JUMP8 R_ARM -pkg debug/elf, const R_ARM_THM_MOVT_ABS = 48 -pkg debug/elf, const R_ARM_THM_MOVT_ABS R_ARM -pkg debug/elf, const R_ARM_THM_MOVT_BREL = 88 -pkg debug/elf, const R_ARM_THM_MOVT_BREL R_ARM -pkg debug/elf, const R_ARM_THM_MOVT_PREL = 50 -pkg debug/elf, const R_ARM_THM_MOVT_PREL R_ARM -pkg debug/elf, const R_ARM_THM_MOVW_ABS_NC = 47 -pkg debug/elf, const R_ARM_THM_MOVW_ABS_NC R_ARM -pkg debug/elf, const R_ARM_THM_MOVW_BREL = 89 -pkg debug/elf, const R_ARM_THM_MOVW_BREL R_ARM -pkg debug/elf, const R_ARM_THM_MOVW_BREL_NC = 87 -pkg debug/elf, const R_ARM_THM_MOVW_BREL_NC R_ARM -pkg debug/elf, const R_ARM_THM_MOVW_PREL_NC = 49 -pkg debug/elf, const R_ARM_THM_MOVW_PREL_NC R_ARM -pkg debug/elf, const R_ARM_THM_PC12 = 54 -pkg debug/elf, const R_ARM_THM_PC12 R_ARM -pkg debug/elf, const R_ARM_THM_TLS_CALL = 93 -pkg debug/elf, const R_ARM_THM_TLS_CALL R_ARM -pkg debug/elf, const R_ARM_THM_TLS_DESCSEQ16 = 129 -pkg debug/elf, const R_ARM_THM_TLS_DESCSEQ16 R_ARM -pkg debug/elf, const R_ARM_THM_TLS_DESCSEQ32 = 130 -pkg debug/elf, const R_ARM_THM_TLS_DESCSEQ32 R_ARM -pkg debug/elf, const R_ARM_TLS_CALL = 91 -pkg debug/elf, const R_ARM_TLS_CALL R_ARM -pkg debug/elf, const R_ARM_TLS_DESCSEQ = 92 -pkg debug/elf, const R_ARM_TLS_DESCSEQ R_ARM -pkg debug/elf, const R_ARM_TLS_DTPMOD32 = 17 -pkg debug/elf, const R_ARM_TLS_DTPMOD32 R_ARM -pkg debug/elf, const R_ARM_TLS_DTPOFF32 = 18 -pkg debug/elf, const R_ARM_TLS_DTPOFF32 R_ARM -pkg debug/elf, const R_ARM_TLS_GD32 = 104 -pkg debug/elf, const R_ARM_TLS_GD32 R_ARM -pkg debug/elf, const R_ARM_TLS_GOTDESC = 90 -pkg debug/elf, const R_ARM_TLS_GOTDESC R_ARM -pkg debug/elf, const R_ARM_TLS_IE12GP = 111 -pkg debug/elf, const R_ARM_TLS_IE12GP R_ARM -pkg debug/elf, const R_ARM_TLS_IE32 = 107 -pkg debug/elf, const R_ARM_TLS_IE32 R_ARM -pkg debug/elf, const R_ARM_TLS_LDM32 = 105 -pkg debug/elf, const R_ARM_TLS_LDM32 R_ARM -pkg debug/elf, const R_ARM_TLS_LDO12 = 109 -pkg debug/elf, const R_ARM_TLS_LDO12 R_ARM -pkg debug/elf, const R_ARM_TLS_LDO32 = 106 -pkg debug/elf, const R_ARM_TLS_LDO32 R_ARM -pkg debug/elf, const R_ARM_TLS_LE12 = 110 -pkg debug/elf, const R_ARM_TLS_LE12 R_ARM -pkg debug/elf, const R_ARM_TLS_LE32 = 108 -pkg debug/elf, const R_ARM_TLS_LE32 R_ARM -pkg debug/elf, const R_ARM_TLS_TPOFF32 = 19 -pkg debug/elf, const R_ARM_TLS_TPOFF32 R_ARM -pkg debug/elf, const R_ARM_V4BX = 40 -pkg debug/elf, const R_ARM_V4BX R_ARM -pkg debug/elf, const R_PPC64_ADDR16_HIGH = 110 -pkg debug/elf, const R_PPC64_ADDR16_HIGH R_PPC64 -pkg debug/elf, const R_PPC64_ADDR16_HIGHA = 111 -pkg debug/elf, const R_PPC64_ADDR16_HIGHA R_PPC64 -pkg debug/elf, const R_PPC64_ADDR64_LOCAL = 117 -pkg debug/elf, const R_PPC64_ADDR64_LOCAL R_PPC64 -pkg debug/elf, const R_PPC64_DTPREL16_HIGH = 114 -pkg debug/elf, const R_PPC64_DTPREL16_HIGH R_PPC64 -pkg debug/elf, const R_PPC64_DTPREL16_HIGHA = 115 -pkg debug/elf, const R_PPC64_DTPREL16_HIGHA R_PPC64 -pkg debug/elf, const R_PPC64_ENTRY = 118 -pkg debug/elf, const R_PPC64_ENTRY R_PPC64 -pkg debug/elf, const R_PPC64_IRELATIVE = 248 -pkg debug/elf, const R_PPC64_IRELATIVE R_PPC64 -pkg debug/elf, const R_PPC64_JMP_IREL = 247 -pkg debug/elf, const R_PPC64_JMP_IREL R_PPC64 -pkg debug/elf, const R_PPC64_PLT16_LO_DS = 60 -pkg debug/elf, const R_PPC64_PLT16_LO_DS R_PPC64 -pkg debug/elf, const R_PPC64_PLTGOT16 = 52 -pkg debug/elf, const R_PPC64_PLTGOT16 R_PPC64 -pkg debug/elf, const R_PPC64_PLTGOT16_DS = 65 -pkg debug/elf, const R_PPC64_PLTGOT16_DS R_PPC64 -pkg debug/elf, const R_PPC64_PLTGOT16_HA = 55 -pkg debug/elf, const R_PPC64_PLTGOT16_HA R_PPC64 -pkg debug/elf, const R_PPC64_PLTGOT16_HI = 54 -pkg debug/elf, const R_PPC64_PLTGOT16_HI R_PPC64 -pkg debug/elf, const R_PPC64_PLTGOT16_LO = 53 -pkg debug/elf, const R_PPC64_PLTGOT16_LO R_PPC64 -pkg debug/elf, const R_PPC64_PLTGOT_LO_DS = 66 -pkg debug/elf, const R_PPC64_PLTGOT_LO_DS R_PPC64 -pkg debug/elf, const R_PPC64_REL16DX_HA = 246 -pkg debug/elf, const R_PPC64_REL16DX_HA R_PPC64 -pkg debug/elf, const R_PPC64_REL24_NOTOC = 116 -pkg debug/elf, const R_PPC64_REL24_NOTOC R_PPC64 -pkg debug/elf, const R_PPC64_SECTOFF_DS = 61 -pkg debug/elf, const R_PPC64_SECTOFF_DS R_PPC64 -pkg debug/elf, const R_PPC64_SECTOFF_LO_DS = 61 -pkg debug/elf, const R_PPC64_SECTOFF_LO_DS R_PPC64 -pkg debug/elf, const R_PPC64_TOCSAVE = 109 -pkg debug/elf, const R_PPC64_TOCSAVE R_PPC64 -pkg debug/elf, const R_PPC64_TPREL16_HIGH = 112 -pkg debug/elf, const R_PPC64_TPREL16_HIGH R_PPC64 -pkg debug/elf, const R_PPC64_TPREL16_HIGHA = 113 -pkg debug/elf, const R_PPC64_TPREL16_HIGHA R_PPC64 -pkg debug/elf, const R_X86_64_GOT64 = 27 -pkg debug/elf, const R_X86_64_GOT64 R_X86_64 -pkg debug/elf, const R_X86_64_GOTOFF64 = 25 -pkg debug/elf, const R_X86_64_GOTOFF64 R_X86_64 -pkg debug/elf, const R_X86_64_GOTPC32 = 26 -pkg debug/elf, const R_X86_64_GOTPC32 R_X86_64 -pkg debug/elf, const R_X86_64_GOTPC32_TLSDESC = 34 -pkg debug/elf, const R_X86_64_GOTPC32_TLSDESC R_X86_64 -pkg debug/elf, const R_X86_64_GOTPC64 = 29 -pkg debug/elf, const R_X86_64_GOTPC64 R_X86_64 -pkg debug/elf, const R_X86_64_GOTPCREL64 = 28 -pkg debug/elf, const R_X86_64_GOTPCREL64 R_X86_64 -pkg debug/elf, const R_X86_64_GOTPCRELX = 41 -pkg debug/elf, const R_X86_64_GOTPCRELX R_X86_64 -pkg debug/elf, const R_X86_64_GOTPLT64 = 30 -pkg debug/elf, const R_X86_64_GOTPLT64 R_X86_64 -pkg debug/elf, const R_X86_64_IRELATIVE = 37 -pkg debug/elf, const R_X86_64_IRELATIVE R_X86_64 -pkg debug/elf, const R_X86_64_PC32_BND = 39 -pkg debug/elf, const R_X86_64_PC32_BND R_X86_64 -pkg debug/elf, const R_X86_64_PC64 = 24 -pkg debug/elf, const R_X86_64_PC64 R_X86_64 -pkg debug/elf, const R_X86_64_PLT32_BND = 40 -pkg debug/elf, const R_X86_64_PLT32_BND R_X86_64 -pkg debug/elf, const R_X86_64_PLTOFF64 = 31 -pkg debug/elf, const R_X86_64_PLTOFF64 R_X86_64 -pkg debug/elf, const R_X86_64_RELATIVE64 = 38 -pkg debug/elf, const R_X86_64_RELATIVE64 R_X86_64 -pkg debug/elf, const R_X86_64_REX_GOTPCRELX = 42 -pkg debug/elf, const R_X86_64_REX_GOTPCRELX R_X86_64 -pkg debug/elf, const R_X86_64_SIZE32 = 32 -pkg debug/elf, const R_X86_64_SIZE32 R_X86_64 -pkg debug/elf, const R_X86_64_SIZE64 = 33 -pkg debug/elf, const R_X86_64_SIZE64 R_X86_64 -pkg debug/elf, const R_X86_64_TLSDESC = 36 -pkg debug/elf, const R_X86_64_TLSDESC R_X86_64 -pkg debug/elf, const R_X86_64_TLSDESC_CALL = 35 -pkg debug/elf, const R_X86_64_TLSDESC_CALL R_X86_64 -pkg debug/macho, const ARM64_RELOC_ADDEND = 10 -pkg debug/macho, const ARM64_RELOC_ADDEND RelocTypeARM64 -pkg debug/macho, const ARM64_RELOC_BRANCH26 = 2 -pkg debug/macho, const ARM64_RELOC_BRANCH26 RelocTypeARM64 -pkg debug/macho, const ARM64_RELOC_GOT_LOAD_PAGE21 = 5 -pkg debug/macho, const ARM64_RELOC_GOT_LOAD_PAGE21 RelocTypeARM64 -pkg debug/macho, const ARM64_RELOC_GOT_LOAD_PAGEOFF12 = 6 -pkg debug/macho, const ARM64_RELOC_GOT_LOAD_PAGEOFF12 RelocTypeARM64 -pkg debug/macho, const ARM64_RELOC_PAGE21 = 3 -pkg debug/macho, const ARM64_RELOC_PAGE21 RelocTypeARM64 -pkg debug/macho, const ARM64_RELOC_PAGEOFF12 = 4 -pkg debug/macho, const ARM64_RELOC_PAGEOFF12 RelocTypeARM64 -pkg debug/macho, const ARM64_RELOC_POINTER_TO_GOT = 7 -pkg debug/macho, const ARM64_RELOC_POINTER_TO_GOT RelocTypeARM64 -pkg debug/macho, const ARM64_RELOC_SUBTRACTOR = 1 -pkg debug/macho, const ARM64_RELOC_SUBTRACTOR RelocTypeARM64 -pkg debug/macho, const ARM64_RELOC_TLVP_LOAD_PAGE21 = 8 -pkg debug/macho, const ARM64_RELOC_TLVP_LOAD_PAGE21 RelocTypeARM64 -pkg debug/macho, const ARM64_RELOC_TLVP_LOAD_PAGEOFF12 = 9 -pkg debug/macho, const ARM64_RELOC_TLVP_LOAD_PAGEOFF12 RelocTypeARM64 -pkg debug/macho, const ARM64_RELOC_UNSIGNED = 0 -pkg debug/macho, const ARM64_RELOC_UNSIGNED RelocTypeARM64 -pkg debug/macho, const ARM_RELOC_BR24 = 5 -pkg debug/macho, const ARM_RELOC_BR24 RelocTypeARM -pkg debug/macho, const ARM_RELOC_HALF = 8 -pkg debug/macho, const ARM_RELOC_HALF RelocTypeARM -pkg debug/macho, const ARM_RELOC_HALF_SECTDIFF = 9 -pkg debug/macho, const ARM_RELOC_HALF_SECTDIFF RelocTypeARM -pkg debug/macho, const ARM_RELOC_LOCAL_SECTDIFF = 3 -pkg debug/macho, const ARM_RELOC_LOCAL_SECTDIFF RelocTypeARM -pkg debug/macho, const ARM_RELOC_PAIR = 1 -pkg debug/macho, const ARM_RELOC_PAIR RelocTypeARM -pkg debug/macho, const ARM_RELOC_PB_LA_PTR = 4 -pkg debug/macho, const ARM_RELOC_PB_LA_PTR RelocTypeARM -pkg debug/macho, const ARM_RELOC_SECTDIFF = 2 -pkg debug/macho, const ARM_RELOC_SECTDIFF RelocTypeARM -pkg debug/macho, const ARM_RELOC_VANILLA = 0 -pkg debug/macho, const ARM_RELOC_VANILLA RelocTypeARM -pkg debug/macho, const ARM_THUMB_32BIT_BRANCH = 7 -pkg debug/macho, const ARM_THUMB_32BIT_BRANCH RelocTypeARM -pkg debug/macho, const ARM_THUMB_RELOC_BR22 = 6 -pkg debug/macho, const ARM_THUMB_RELOC_BR22 RelocTypeARM -pkg debug/macho, const FlagAllModsBound = 4096 -pkg debug/macho, const FlagAllModsBound uint32 -pkg debug/macho, const FlagAllowStackExecution = 131072 -pkg debug/macho, const FlagAllowStackExecution uint32 -pkg debug/macho, const FlagAppExtensionSafe = 33554432 -pkg debug/macho, const FlagAppExtensionSafe uint32 -pkg debug/macho, const FlagBindAtLoad = 8 -pkg debug/macho, const FlagBindAtLoad uint32 -pkg debug/macho, const FlagBindsToWeak = 65536 -pkg debug/macho, const FlagBindsToWeak uint32 -pkg debug/macho, const FlagCanonical = 16384 -pkg debug/macho, const FlagCanonical uint32 -pkg debug/macho, const FlagDeadStrippableDylib = 4194304 -pkg debug/macho, const FlagDeadStrippableDylib uint32 -pkg debug/macho, const FlagDyldLink = 4 -pkg debug/macho, const FlagDyldLink uint32 -pkg debug/macho, const FlagForceFlat = 256 -pkg debug/macho, const FlagForceFlat uint32 -pkg debug/macho, const FlagHasTLVDescriptors = 8388608 -pkg debug/macho, const FlagHasTLVDescriptors uint32 -pkg debug/macho, const FlagIncrLink = 2 -pkg debug/macho, const FlagIncrLink uint32 -pkg debug/macho, const FlagLazyInit = 64 -pkg debug/macho, const FlagLazyInit uint32 -pkg debug/macho, const FlagNoFixPrebinding = 1024 -pkg debug/macho, const FlagNoFixPrebinding uint32 -pkg debug/macho, const FlagNoHeapExecution = 16777216 -pkg debug/macho, const FlagNoHeapExecution uint32 -pkg debug/macho, const FlagNoMultiDefs = 512 -pkg debug/macho, const FlagNoMultiDefs uint32 -pkg debug/macho, const FlagNoReexportedDylibs = 1048576 -pkg debug/macho, const FlagNoReexportedDylibs uint32 -pkg debug/macho, const FlagNoUndefs = 1 -pkg debug/macho, const FlagNoUndefs uint32 -pkg debug/macho, const FlagPIE = 2097152 -pkg debug/macho, const FlagPIE uint32 -pkg debug/macho, const FlagPrebindable = 2048 -pkg debug/macho, const FlagPrebindable uint32 -pkg debug/macho, const FlagPrebound = 16 -pkg debug/macho, const FlagPrebound uint32 -pkg debug/macho, const FlagRootSafe = 262144 -pkg debug/macho, const FlagRootSafe uint32 -pkg debug/macho, const FlagSetuidSafe = 524288 -pkg debug/macho, const FlagSetuidSafe uint32 -pkg debug/macho, const FlagSplitSegs = 32 -pkg debug/macho, const FlagSplitSegs uint32 -pkg debug/macho, const FlagSubsectionsViaSymbols = 8192 -pkg debug/macho, const FlagSubsectionsViaSymbols uint32 -pkg debug/macho, const FlagTwoLevel = 128 -pkg debug/macho, const FlagTwoLevel uint32 -pkg debug/macho, const FlagWeakDefines = 32768 -pkg debug/macho, const FlagWeakDefines uint32 -pkg debug/macho, const GENERIC_RELOC_LOCAL_SECTDIFF = 4 -pkg debug/macho, const GENERIC_RELOC_LOCAL_SECTDIFF RelocTypeGeneric -pkg debug/macho, const GENERIC_RELOC_PAIR = 1 -pkg debug/macho, const GENERIC_RELOC_PAIR RelocTypeGeneric -pkg debug/macho, const GENERIC_RELOC_PB_LA_PTR = 3 -pkg debug/macho, const GENERIC_RELOC_PB_LA_PTR RelocTypeGeneric -pkg debug/macho, const GENERIC_RELOC_SECTDIFF = 2 -pkg debug/macho, const GENERIC_RELOC_SECTDIFF RelocTypeGeneric -pkg debug/macho, const GENERIC_RELOC_TLV = 5 -pkg debug/macho, const GENERIC_RELOC_TLV RelocTypeGeneric -pkg debug/macho, const GENERIC_RELOC_VANILLA = 0 -pkg debug/macho, const GENERIC_RELOC_VANILLA RelocTypeGeneric -pkg debug/macho, const LoadCmdRpath = 2147483676 -pkg debug/macho, const LoadCmdRpath LoadCmd -pkg debug/macho, const X86_64_RELOC_BRANCH = 2 -pkg debug/macho, const X86_64_RELOC_BRANCH RelocTypeX86_64 -pkg debug/macho, const X86_64_RELOC_GOT = 4 -pkg debug/macho, const X86_64_RELOC_GOT RelocTypeX86_64 -pkg debug/macho, const X86_64_RELOC_GOT_LOAD = 3 -pkg debug/macho, const X86_64_RELOC_GOT_LOAD RelocTypeX86_64 -pkg debug/macho, const X86_64_RELOC_SIGNED = 1 -pkg debug/macho, const X86_64_RELOC_SIGNED RelocTypeX86_64 -pkg debug/macho, const X86_64_RELOC_SIGNED_1 = 6 -pkg debug/macho, const X86_64_RELOC_SIGNED_1 RelocTypeX86_64 -pkg debug/macho, const X86_64_RELOC_SIGNED_2 = 7 -pkg debug/macho, const X86_64_RELOC_SIGNED_2 RelocTypeX86_64 -pkg debug/macho, const X86_64_RELOC_SIGNED_4 = 8 -pkg debug/macho, const X86_64_RELOC_SIGNED_4 RelocTypeX86_64 -pkg debug/macho, const X86_64_RELOC_SUBTRACTOR = 5 -pkg debug/macho, const X86_64_RELOC_SUBTRACTOR RelocTypeX86_64 -pkg debug/macho, const X86_64_RELOC_TLV = 9 -pkg debug/macho, const X86_64_RELOC_TLV RelocTypeX86_64 -pkg debug/macho, const X86_64_RELOC_UNSIGNED = 0 -pkg debug/macho, const X86_64_RELOC_UNSIGNED RelocTypeX86_64 -pkg debug/macho, method (RelocTypeARM) GoString() string -pkg debug/macho, method (RelocTypeARM) String() string -pkg debug/macho, method (RelocTypeARM64) GoString() string -pkg debug/macho, method (RelocTypeARM64) String() string -pkg debug/macho, method (RelocTypeGeneric) GoString() string -pkg debug/macho, method (RelocTypeGeneric) String() string -pkg debug/macho, method (RelocTypeX86_64) GoString() string -pkg debug/macho, method (RelocTypeX86_64) String() string -pkg debug/macho, method (Rpath) Raw() []uint8 -pkg debug/macho, method (Type) GoString() string -pkg debug/macho, method (Type) String() string -pkg debug/macho, type Reloc struct -pkg debug/macho, type Reloc struct, Addr uint32 -pkg debug/macho, type Reloc struct, Extern bool -pkg debug/macho, type Reloc struct, Len uint8 -pkg debug/macho, type Reloc struct, Pcrel bool -pkg debug/macho, type Reloc struct, Scattered bool -pkg debug/macho, type Reloc struct, Type uint8 -pkg debug/macho, type Reloc struct, Value uint32 -pkg debug/macho, type RelocTypeARM int -pkg debug/macho, type RelocTypeARM64 int -pkg debug/macho, type RelocTypeGeneric int -pkg debug/macho, type RelocTypeX86_64 int -pkg debug/macho, type Rpath struct -pkg debug/macho, type Rpath struct, Path string -pkg debug/macho, type Rpath struct, embedded LoadBytes -pkg debug/macho, type RpathCmd struct -pkg debug/macho, type RpathCmd struct, Cmd LoadCmd -pkg debug/macho, type RpathCmd struct, Len uint32 -pkg debug/macho, type RpathCmd struct, Path uint32 -pkg debug/macho, type Section struct, Relocs []Reloc -pkg encoding/csv, type ParseError struct, StartLine int -pkg encoding/hex, func NewDecoder(io.Reader) io.Reader -pkg encoding/hex, func NewEncoder(io.Writer) io.Writer -pkg encoding/json, method (*Decoder) DisallowUnknownFields() -pkg encoding/xml, func NewTokenDecoder(TokenReader) *Decoder -pkg encoding/xml, type TokenReader interface { Token } -pkg encoding/xml, type TokenReader interface, Token() (Token, error) -pkg flag, method (*FlagSet) ErrorHandling() ErrorHandling -pkg flag, method (*FlagSet) Name() string -pkg flag, method (*FlagSet) Output() io.Writer -pkg math, func Erfcinv(float64) float64 -pkg math, func Erfinv(float64) float64 -pkg math, func Round(float64) float64 -pkg math, func RoundToEven(float64) float64 -pkg math/big, const MaxBase = 62 -pkg math/big, method (*Float) Sqrt(*Float) *Float -pkg math/big, method (*Int) CmpAbs(*Int) int -pkg math/rand, func Shuffle(int, func(int, int)) -pkg math/rand, method (*Rand) Shuffle(int, func(int, int)) -pkg net, method (*TCPListener) SyscallConn() (syscall.RawConn, error) -pkg net, method (*UnixListener) SyscallConn() (syscall.RawConn, error) -pkg net/smtp, method (*Client) Noop() error -pkg os, func IsTimeout(error) bool -pkg os, method (*File) SetDeadline(time.Time) error -pkg os, method (*File) SetReadDeadline(time.Time) error -pkg os, method (*File) SetWriteDeadline(time.Time) error -pkg os, method (*PathError) Timeout() bool -pkg os, method (*SyscallError) Timeout() bool -pkg os, var ErrNoDeadline error -pkg strings, method (*Builder) Grow(int) -pkg strings, method (*Builder) Len() int -pkg strings, method (*Builder) ReadFrom(io.Reader) (int64, error) -pkg strings, method (*Builder) Reset() -pkg strings, method (*Builder) String() string -pkg strings, method (*Builder) Write([]uint8) (int, error) -pkg strings, method (*Builder) WriteByte(uint8) error -pkg strings, method (*Builder) WriteRune(int32) (int, error) -pkg strings, method (*Builder) WriteString(string) (int, error) -pkg strings, type Builder struct -pkg syscall (freebsd-386), const SYS_UTIMENSAT = 547 -pkg syscall (freebsd-386), const SYS_UTIMENSAT ideal-int -pkg syscall (freebsd-386-cgo), const SYS_UTIMENSAT = 547 -pkg syscall (freebsd-386-cgo), const SYS_UTIMENSAT ideal-int -pkg syscall (freebsd-amd64), const SYS_UTIMENSAT = 547 -pkg syscall (freebsd-amd64), const SYS_UTIMENSAT ideal-int -pkg syscall (freebsd-amd64-cgo), const SYS_UTIMENSAT = 547 -pkg syscall (freebsd-amd64-cgo), const SYS_UTIMENSAT ideal-int -pkg syscall (freebsd-arm), const SYS_UTIMENSAT = 547 -pkg syscall (freebsd-arm), const SYS_UTIMENSAT ideal-int -pkg syscall (freebsd-arm-cgo), const SYS_UTIMENSAT = 547 -pkg syscall (freebsd-arm-cgo), const SYS_UTIMENSAT ideal-int -pkg syscall (windows-386), func CreateProcessAsUser(Token, *uint16, *uint16, *SecurityAttributes, *SecurityAttributes, bool, uint32, *uint16, *uint16, *StartupInfo, *ProcessInformation) error -pkg syscall (windows-386), type SysProcAttr struct, Token Token -pkg syscall (windows-amd64), func CreateProcessAsUser(Token, *uint16, *uint16, *SecurityAttributes, *SecurityAttributes, bool, uint32, *uint16, *uint16, *StartupInfo, *ProcessInformation) error -pkg syscall (windows-amd64), type SysProcAttr struct, Token Token -pkg text/template/parse, const NodeBreak = 20 -pkg text/template/parse, const NodeBreak NodeType -pkg text/template/parse, const NodeContinue = 21 -pkg text/template/parse, const NodeContinue NodeType -pkg text/template/parse, method (*BreakNode) Copy() Node -pkg text/template/parse, method (*BreakNode) Position() Pos -pkg text/template/parse, method (*BreakNode) String() string -pkg text/template/parse, method (*BreakNode) Type() NodeType -pkg text/template/parse, method (*ContinueNode) Copy() Node -pkg text/template/parse, method (*ContinueNode) Position() Pos -pkg text/template/parse, method (*ContinueNode) String() string -pkg text/template/parse, method (*ContinueNode) Type() NodeType -pkg text/template/parse, type BreakNode struct -pkg text/template/parse, type BreakNode struct, embedded NodeType -pkg text/template/parse, type BreakNode struct, embedded Pos -pkg text/template/parse, type ContinueNode struct -pkg text/template/parse, type ContinueNode struct, embedded NodeType -pkg text/template/parse, type ContinueNode struct, embedded Pos -pkg unicode, const Version = "10.0.0" -pkg unicode, var Masaram_Gondi *RangeTable -pkg unicode, var Nushu *RangeTable -pkg unicode, var Regional_Indicator *RangeTable -pkg unicode, var Soyombo *RangeTable -pkg unicode, var Zanabazar_Square *RangeTable diff --git a/src/cmd/api/run.go b/src/cmd/api/run.go index 219776cae4076..eebd7b432c1f2 100644 --- a/src/cmd/api/run.go +++ b/src/cmd/api/run.go @@ -39,7 +39,7 @@ func main() { } out, err := exec.Command(goCmd(), "tool", "api", - "-c", file("go1", "go1.1", "go1.2", "go1.3", "go1.4", "go1.5", "go1.6", "go1.7", "go1.8", "go1.9"), + "-c", file("go1", "go1.1", "go1.2", "go1.3", "go1.4", "go1.5", "go1.6", "go1.7", "go1.8", "go1.9", "go1.10"), "-next", file("next"), "-except", file("except")).CombinedOutput() if err != nil { From 692f2e9c44e629e84b315f10c8538c9461fd6d61 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Wed, 6 Dec 2017 20:10:51 -0500 Subject: [PATCH 19/21] cmd/compile: fix bug in logic for computing var abstract origins The DWARF inline info generation code was using file/line/column (from src.Pos) as a means of matching up pre- and post-optimization variable nodes. This turns out to be problematic since it looks as though distinct formals on the same line can be assigned the same column number. Work around this issue by adding variable names to the disambiguation code. Added a testpoint to the linker DWARF test that checks to make sure each abstract origin offset of distinct within a given DWARF DW_AT_inlined_routine body. Fixes #23020. Change-Id: Ie09bbe01dc60822d84d4085547b138e644036fb3 Reviewed-on: https://go-review.googlesource.com/82396 Reviewed-by: David Chase Reviewed-by: Cherry Zhang --- src/cmd/compile/internal/gc/dwinl.go | 6 ++++++ src/cmd/link/internal/ld/dwarf_test.go | 25 ++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/gc/dwinl.go b/src/cmd/compile/internal/gc/dwinl.go index f76bacc5b911d..dd91b6c0fc3b8 100644 --- a/src/cmd/compile/internal/gc/dwinl.go +++ b/src/cmd/compile/internal/gc/dwinl.go @@ -14,6 +14,7 @@ import ( // To identify variables by original source position. type varPos struct { + DeclName string DeclFile string DeclLine uint DeclCol uint @@ -96,14 +97,19 @@ func assembleInlines(fnsym *obj.LSym, fn *Node, dwVars []*dwarf.Var) dwarf.InlCa n := dcl[i] pos := Ctxt.InnermostPos(n.Pos) vp := varPos{ + DeclName: n.Sym.Name, DeclFile: pos.Base().SymFilename(), DeclLine: pos.Line(), DeclCol: pos.Col(), } + if _, found := m[vp]; found { + Fatalf("child dcl collision on symbol %s within %v\n", n.Sym.Name, fnsym.Name) + } m[vp] = i } for j := 0; j < len(sl); j++ { vp := varPos{ + DeclName: sl[j].Name, DeclFile: sl[j].DeclFile, DeclLine: sl[j].DeclLine, DeclCol: sl[j].DeclCol, diff --git a/src/cmd/link/internal/ld/dwarf_test.go b/src/cmd/link/internal/ld/dwarf_test.go index 0bd5133f483d4..4332a3dfba4dd 100644 --- a/src/cmd/link/internal/ld/dwarf_test.go +++ b/src/cmd/link/internal/ld/dwarf_test.go @@ -522,8 +522,13 @@ package main var G int +func noinline(x int) int { + defer func() { G += x }() + return x +} + func cand(x, y int) int { - return (x + y) ^ (y - x) + return noinline(x+y) ^ (y - x) } func main() { @@ -599,6 +604,24 @@ func main() { } } exCount++ + + omap := make(map[dwarf.Offset]bool) + + // Walk the child variables of the inlined routine. Each + // of them should have a distinct abstract origin-- if two + // vars point to the same origin things are definitely broken. + inlIdx := ex.idxFromOffset(child.Offset) + inlChildDies := ex.Children(inlIdx) + for _, k := range inlChildDies { + ooff, originOK := k.Val(dwarf.AttrAbstractOrigin).(dwarf.Offset) + if !originOK { + t.Fatalf("no abstract origin attr for child of inlined subroutine at offset %v", k.Offset) + } + if _, found := omap[ooff]; found { + t.Fatalf("duplicate abstract origin at child of inlined subroutine at offset %v", k.Offset) + } + omap[ooff] = true + } } } if exCount != len(expectedInl) { From 99f4cf9714825d024bc56cd92920dc9fc2c6d9c2 Mon Sep 17 00:00:00 2001 From: Alberto Donizetti Date: Thu, 7 Dec 2017 18:07:57 +0100 Subject: [PATCH 20/21] doc: fix bad html tags in editors.html Change-Id: Ib8ef626ae6bc66571ecf4569e37feb75b4b90d10 Reviewed-on: https://go-review.googlesource.com/82555 Reviewed-by: Brad Fitzpatrick --- doc/editors.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/editors.html b/doc/editors.html index 8228eb257800d..4a8c7eab6bd9b 100644 --- a/doc/editors.html +++ b/doc/editors.html @@ -178,9 +178,9 @@

Options

-
Install - Install - Install + Install + Install + Install Install From 9ce6b5c2ed5d3d5251b9a6a0c548d5fb2c8567e8 Mon Sep 17 00:00:00 2001 From: Joe Kyo Date: Thu, 7 Dec 2017 16:34:14 +0000 Subject: [PATCH 21/21] net/http/httputil: remove redundant call of setBody in test Change-Id: I5a38200b9e050b484ec39f47c637e651e237390d Reviewed-on: https://go-review.googlesource.com/82536 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/net/http/httputil/dump_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/net/http/httputil/dump_test.go b/src/net/http/httputil/dump_test.go index f881020fef7e5..5703a7fb866a0 100644 --- a/src/net/http/httputil/dump_test.go +++ b/src/net/http/httputil/dump_test.go @@ -27,7 +27,6 @@ type dumpTest struct { } var dumpTests = []dumpTest{ - // HTTP/1.1 => chunked coding; body; empty trailer { Req: http.Request{ @@ -214,7 +213,6 @@ func TestDumpRequest(t *testing.T) { t.Fatalf("Test %d: unsupported Body of %T", i, tt.Body) } } - setBody() if tt.Req.Header == nil { tt.Req.Header = make(http.Header) }