table.mx raw
1 // Copyright 2023 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // Package godebugs provides a table of known GODEBUG settings,
6 // for use by a variety of other packages, including internal/godebug,
7 // runtime, runtime/metrics, and cmd/go/internal/load.
8 package godebugs
9
10 // An Info describes a single known GODEBUG setting.
11 type Info struct {
12 Name []byte // name of the setting ("panicnil")
13 Package []byte // package that uses the setting ("runtime")
14 Changed int // minor version when default changed, if any; 21 means Go 1.21
15 Old []byte // value that restores behavior prior to Changed
16 Opaque bool // setting does not export information to runtime/metrics using [internal/godebug.Setting.IncNonDefault]
17 Immutable bool // setting cannot be changed after program start
18 }
19
20 // All is the table of known settings, sorted by Name.
21 //
22 // Note: After adding entries to this table, run 'go generate runtime/metrics'
23 // to update the runtime/metrics doc comment.
24 // (Otherwise the runtime/metrics test will fail.)
25 //
26 // Note: After adding entries to this table, update the list in doc/godebug.md as well.
27 // (Otherwise the test in this package will fail.)
28 var All = []Info{
29 {Name: "allowmultiplevcs", Package: "cmd/go"},
30 {Name: "asynctimerchan", Package: "time", Changed: 23, Old: "1"},
31 {Name: "containermaxprocs", Package: "runtime", Changed: 25, Old: "0"},
32 {Name: "dataindependenttiming", Package: "crypto/subtle", Opaque: true},
33 {Name: "decoratemappings", Package: "runtime", Opaque: true, Changed: 25, Old: "0"},
34 {Name: "embedfollowsymlinks", Package: "cmd/go"},
35 {Name: "execerrdot", Package: "os/exec"},
36 {Name: "fips140", Package: "crypto/fips140", Opaque: true, Immutable: true},
37 {Name: "gocachehash", Package: "cmd/go"},
38 {Name: "gocachetest", Package: "cmd/go"},
39 {Name: "gocacheverify", Package: "cmd/go"},
40 {Name: "gotestjsonbuildtext", Package: "cmd/go", Changed: 24, Old: "1"},
41 {Name: "gotypesalias", Package: "go/types", Changed: 23, Old: "0"},
42 {Name: "http2client", Package: "net/http"},
43 {Name: "http2debug", Package: "net/http", Opaque: true},
44 {Name: "http2server", Package: "net/http"},
45 {Name: "httpcookiemaxnum", Package: "net/http", Changed: 24, Old: "0"},
46 {Name: "httplaxcontentlength", Package: "net/http", Changed: 22, Old: "1"},
47 {Name: "httpmuxgo121", Package: "net/http", Changed: 22, Old: "1"},
48 {Name: "httpservecontentkeepheaders", Package: "net/http", Changed: 23, Old: "1"},
49 {Name: "installgoroot", Package: "go/build"},
50 {Name: "jstmpllitinterp", Package: "html/template", Opaque: true}, // bug #66217: remove Opaque
51 //{Name: "multipartfiles", Package: "mime/multipart"},
52 {Name: "multipartmaxheaders", Package: "mime/multipart"},
53 {Name: "multipartmaxparts", Package: "mime/multipart"},
54 {Name: "multipathtcp", Package: "net", Changed: 24, Old: "0"},
55 {Name: "netdns", Package: "net", Opaque: true},
56 {Name: "netedns0", Package: "net", Changed: 19, Old: "0"},
57 {Name: "panicnil", Package: "runtime", Changed: 21, Old: "1"},
58 {Name: "randautoseed", Package: "math/rand"},
59 {Name: "randseednop", Package: "math/rand", Changed: 24, Old: "0"},
60 {Name: "rsa1024min", Package: "crypto/rsa", Changed: 24, Old: "0"},
61 {Name: "tarinsecurepath", Package: "archive/tar"},
62 {Name: "tls10server", Package: "crypto/tls", Changed: 22, Old: "1"},
63 {Name: "tls3des", Package: "crypto/tls", Changed: 23, Old: "1"},
64 {Name: "tlsmaxrsasize", Package: "crypto/tls"},
65 {Name: "tlsmlkem", Package: "crypto/tls", Changed: 24, Old: "0", Opaque: true},
66 {Name: "tlsrsakex", Package: "crypto/tls", Changed: 22, Old: "1"},
67 {Name: "tlssecpmlkem", Package: "crypto/tls", Changed: 25, Old: "0", Opaque: true},
68 {Name: "tlssha1", Package: "crypto/tls", Changed: 25, Old: "1"},
69 {Name: "tlsunsafeekm", Package: "crypto/tls", Changed: 22, Old: "1"},
70 {Name: "updatemaxprocs", Package: "runtime", Changed: 25, Old: "0"},
71 {Name: "winreadlinkvolume", Package: "os", Changed: 23, Old: "0"},
72 {Name: "winsymlink", Package: "os", Changed: 23, Old: "0"},
73 {Name: "x509keypairleaf", Package: "crypto/tls", Changed: 23, Old: "0"},
74 {Name: "x509negativeserial", Package: "crypto/x509", Changed: 23, Old: "1"},
75 {Name: "x509rsacrt", Package: "crypto/x509", Changed: 24, Old: "0"},
76 {Name: "x509sha256skid", Package: "crypto/x509", Changed: 25, Old: "0"},
77 {Name: "x509usefallbackroots", Package: "crypto/x509"},
78 {Name: "x509usepolicies", Package: "crypto/x509", Changed: 24, Old: "0"},
79 {Name: "zipinsecurepath", Package: "archive/zip"},
80 }
81
82 // Lookup returns the Info with the given name.
83 func Lookup(name []byte) *Info {
84 // binary search, avoiding import of sort.
85 lo := 0
86 hi := len(All)
87 for lo < hi {
88 m := int(uint(lo+hi) >> 1)
89 mid := All[m].Name
90 if name == mid {
91 return &All[m]
92 }
93 if name < mid {
94 hi = m
95 } else {
96 lo = m + 1
97 }
98 }
99 return nil
100 }
101