1// Copyright 2009 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// Debug arguments, set by -d flag.
6
7package base
8
9// Debug holds the parsed debugging configuration values.
10var Debug DebugFlags
11
12// DebugFlags defines the debugging configuration values (see var Debug).
13// Each struct field is a different value, named for the lower-case of the field name.
14// Each field must be an int or string and must have a `help` struct tag.
15//
16// The -d option takes a comma-separated list of settings.
17// Each setting is name=value; for ints, name is short for name=1.
18type DebugFlags struct {
19	AlignHot              int    `help:"enable hot block alignment (currently requires -pgo)" concurrent:"ok"`
20	Append                int    `help:"print information about append compilation"`
21	Checkptr              int    `help:"instrument unsafe pointer conversions\n0: instrumentation disabled\n1: conversions involving unsafe.Pointer are instrumented\n2: conversions to unsafe.Pointer force heap allocation" concurrent:"ok"`
22	Closure               int    `help:"print information about closure compilation"`
23	Defer                 int    `help:"print information about defer compilation"`
24	DisableNil            int    `help:"disable nil checks" concurrent:"ok"`
25	DumpInlFuncProps      string `help:"dump function properties from inl heuristics to specified file"`
26	DumpInlCallSiteScores int    `help:"dump scored callsites during inlining"`
27	InlScoreAdj           string `help:"set inliner score adjustments (ex: -d=inlscoreadj=panicPathAdj:10/passConstToNestedIfAdj:-90)"`
28	InlBudgetSlack        int    `help:"amount to expand the initial inline budget when new inliner enabled. Defaults to 80 if option not set." concurrent:"ok"`
29	DumpPtrs              int    `help:"show Node pointers values in dump output"`
30	DwarfInl              int    `help:"print information about DWARF inlined function creation"`
31	EscapeMutationsCalls  int    `help:"print extra escape analysis diagnostics about mutations and calls" concurrent:"ok"`
32	Export                int    `help:"print export data"`
33	Fmahash               string `help:"hash value for use in debugging platform-dependent multiply-add use" concurrent:"ok"`
34	GCAdjust              int    `help:"log adjustments to GOGC" concurrent:"ok"`
35	GCCheck               int    `help:"check heap/gc use by compiler" concurrent:"ok"`
36	GCProg                int    `help:"print dump of GC programs"`
37	Gossahash             string `help:"hash value for use in debugging the compiler"`
38	InlFuncsWithClosures  int    `help:"allow functions with closures to be inlined" concurrent:"ok"`
39	InlStaticInit         int    `help:"allow static initialization of inlined calls" concurrent:"ok"`
40	Libfuzzer             int    `help:"enable coverage instrumentation for libfuzzer"`
41	LoopVar               int    `help:"shared (0, default), 1 (private loop variables), 2, private + log"`
42	LoopVarHash           string `help:"for debugging changes in loop behavior. Overrides experiment and loopvar flag."`
43	LocationLists         int    `help:"print information about DWARF location list creation"`
44	MaxShapeLen           int    `help:"hash shape names longer than this threshold (default 500)" concurrent:"ok"`
45	MergeLocals           int    `help:"merge together non-interfering local stack slots" concurrent:"ok"`
46	MergeLocalsDumpFunc   string `help:"dump specified func in merge locals"`
47	MergeLocalsHash       string `help:"hash value for debugging stack slot merging of local variables" concurrent:"ok"`
48	MergeLocalsTrace      int    `help:"trace debug output for locals merging"`
49	MergeLocalsHTrace     int    `help:"hash-selected trace debug output for locals merging"`
50	Nil                   int    `help:"print information about nil checks"`
51	NoOpenDefer           int    `help:"disable open-coded defers" concurrent:"ok"`
52	NoRefName             int    `help:"do not include referenced symbol names in object file" concurrent:"ok"`
53	PCTab                 string `help:"print named pc-value table\nOne of: pctospadj, pctofile, pctoline, pctoinline, pctopcdata"`
54	Panic                 int    `help:"show all compiler panics"`
55	Reshape               int    `help:"print information about expression reshaping"`
56	Shapify               int    `help:"print information about shaping recursive types"`
57	Slice                 int    `help:"print information about slice compilation"`
58	SoftFloat             int    `help:"force compiler to emit soft-float code" concurrent:"ok"`
59	StaticCopy            int    `help:"print information about missed static copies" concurrent:"ok"`
60	SyncFrames            int    `help:"how many writer stack frames to include at sync points in unified export data"`
61	TypeAssert            int    `help:"print information about type assertion inlining"`
62	WB                    int    `help:"print information about write barriers"`
63	ABIWrap               int    `help:"print information about ABI wrapper generation"`
64	MayMoreStack          string `help:"call named function before all stack growth checks" concurrent:"ok"`
65	PGODebug              int    `help:"debug profile-guided optimizations"`
66	PGOHash               string `help:"hash value for debugging profile-guided optimizations" concurrent:"ok"`
67	PGOInline             int    `help:"enable profile-guided inlining" concurrent:"ok"`
68	PGOInlineCDFThreshold string `help:"cumulative threshold percentage for determining call sites as hot candidates for inlining" concurrent:"ok"`
69	PGOInlineBudget       int    `help:"inline budget for hot functions" concurrent:"ok"`
70	PGODevirtualize       int    `help:"enable profile-guided devirtualization; 0 to disable, 1 to enable interface devirtualization, 2 to enable function devirtualization" concurrent:"ok"`
71	RangeFuncCheck        int    `help:"insert code to check behavior of range iterator functions" concurrent:"ok"`
72	WrapGlobalMapDbg      int    `help:"debug trace output for global map init wrapping"`
73	WrapGlobalMapCtl      int    `help:"global map init wrap control (0 => default, 1 => off, 2 => stress mode, no size cutoff)"`
74	ZeroCopy              int    `help:"enable zero-copy string->[]byte conversions" concurrent:"ok"`
75
76	ConcurrentOk bool // true if only concurrentOk flags seen
77}
78
79// DebugSSA is called to set a -d ssa/... option.
80// If nil, those options are reported as invalid options.
81// If DebugSSA returns a non-empty string, that text is reported as a compiler error.
82var DebugSSA func(phase, flag string, val int, valString string) string
83