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. 8package godebugs 9 10// An Info describes a single known GODEBUG setting. 11type Info struct { 12 Name string // name of the setting ("panicnil") 13 Package string // package that uses the setting ("runtime") 14 Changed int // minor version when default changed, if any; 21 means Go 1.21 15 Old string // value that restores behavior prior to Changed 16 Opaque bool // setting does not export information to runtime/metrics using [internal/godebug.Setting.IncNonDefault] 17} 18 19// All is the table of known settings, sorted by Name. 20// 21// Note: After adding entries to this table, run 'go generate runtime/metrics' 22// to update the runtime/metrics doc comment. 23// (Otherwise the runtime/metrics test will fail.) 24// 25// Note: After adding entries to this table, update the list in doc/godebug.md as well. 26// (Otherwise the test in this package will fail.) 27var All = []Info{ 28 {Name: "asynctimerchan", Package: "time", Changed: 23, Old: "1"}, 29 {Name: "execerrdot", Package: "os/exec"}, 30 {Name: "gocachehash", Package: "cmd/go"}, 31 {Name: "gocachetest", Package: "cmd/go"}, 32 {Name: "gocacheverify", Package: "cmd/go"}, 33 {Name: "gotypesalias", Package: "go/types", Changed: 23, Old: "0"}, 34 {Name: "http2client", Package: "net/http"}, 35 {Name: "http2debug", Package: "net/http", Opaque: true}, 36 {Name: "http2server", Package: "net/http"}, 37 {Name: "httplaxcontentlength", Package: "net/http", Changed: 22, Old: "1"}, 38 {Name: "httpmuxgo121", Package: "net/http", Changed: 22, Old: "1"}, 39 {Name: "httpservecontentkeepheaders", Package: "net/http", Changed: 23, Old: "1"}, 40 {Name: "installgoroot", Package: "go/build"}, 41 {Name: "jstmpllitinterp", Package: "html/template", Opaque: true}, // bug #66217: remove Opaque 42 //{Name: "multipartfiles", Package: "mime/multipart"}, 43 {Name: "multipartmaxheaders", Package: "mime/multipart"}, 44 {Name: "multipartmaxparts", Package: "mime/multipart"}, 45 {Name: "multipathtcp", Package: "net"}, 46 {Name: "netdns", Package: "net", Opaque: true}, 47 {Name: "netedns0", Package: "net", Changed: 19, Old: "0"}, 48 {Name: "panicnil", Package: "runtime", Changed: 21, Old: "1"}, 49 {Name: "randautoseed", Package: "math/rand"}, 50 {Name: "tarinsecurepath", Package: "archive/tar"}, 51 {Name: "tls10server", Package: "crypto/tls", Changed: 22, Old: "1"}, 52 {Name: "tls3des", Package: "crypto/tls", Changed: 23, Old: "1"}, 53 {Name: "tlskyber", Package: "crypto/tls", Changed: 23, Old: "0", Opaque: true}, 54 {Name: "tlsmaxrsasize", Package: "crypto/tls"}, 55 {Name: "tlsrsakex", Package: "crypto/tls", Changed: 22, Old: "1"}, 56 {Name: "tlsunsafeekm", Package: "crypto/tls", Changed: 22, Old: "1"}, 57 {Name: "winreadlinkvolume", Package: "os", Changed: 22, Old: "0"}, 58 {Name: "winsymlink", Package: "os", Changed: 22, Old: "0"}, 59 {Name: "x509keypairleaf", Package: "crypto/tls", Changed: 23, Old: "0"}, 60 {Name: "x509negativeserial", Package: "crypto/x509", Changed: 23, Old: "1"}, 61 {Name: "x509sha1", Package: "crypto/x509"}, 62 {Name: "x509usefallbackroots", Package: "crypto/x509"}, 63 {Name: "x509usepolicies", Package: "crypto/x509"}, 64 {Name: "zipinsecurepath", Package: "archive/zip"}, 65} 66 67// Lookup returns the Info with the given name. 68func Lookup(name string) *Info { 69 // binary search, avoiding import of sort. 70 lo := 0 71 hi := len(All) 72 for lo < hi { 73 m := int(uint(lo+hi) >> 1) 74 mid := All[m].Name 75 if name == mid { 76 return &All[m] 77 } 78 if name < mid { 79 hi = m 80 } else { 81 lo = m + 1 82 } 83 } 84 return nil 85} 86