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