2017-03-02 Richard Biener <rguenther@suse.de>
[official-gcc.git] / libgo / go / runtime / extern.go
blob5aa76ac8e2c25d6102b643e299a1c7f30fb86f31
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.
5 /*
6 Package runtime contains operations that interact with Go's runtime system,
7 such as functions to control goroutines. It also includes the low-level type information
8 used by the reflect package; see reflect's documentation for the programmable
9 interface to the run-time type system.
11 Environment Variables
13 The following environment variables ($name or %name%, depending on the host
14 operating system) control the run-time behavior of Go programs. The meanings
15 and use may change from release to release.
17 The GOGC variable sets the initial garbage collection target percentage.
18 A collection is triggered when the ratio of freshly allocated data to live data
19 remaining after the previous collection reaches this percentage. The default
20 is GOGC=100. Setting GOGC=off disables the garbage collector entirely.
21 The runtime/debug package's SetGCPercent function allows changing this
22 percentage at run time. See https://golang.org/pkg/runtime/debug/#SetGCPercent.
24 The GODEBUG variable controls debugging variables within the runtime.
25 It is a comma-separated list of name=val pairs setting these named variables:
27 allocfreetrace: setting allocfreetrace=1 causes every allocation to be
28 profiled and a stack trace printed on each object's allocation and free.
30 cgocheck: setting cgocheck=0 disables all checks for packages
31 using cgo to incorrectly pass Go pointers to non-Go code.
32 Setting cgocheck=1 (the default) enables relatively cheap
33 checks that may miss some errors. Setting cgocheck=2 enables
34 expensive checks that should not miss any errors, but will
35 cause your program to run slower.
37 efence: setting efence=1 causes the allocator to run in a mode
38 where each object is allocated on a unique page and addresses are
39 never recycled.
41 gccheckmark: setting gccheckmark=1 enables verification of the
42 garbage collector's concurrent mark phase by performing a
43 second mark pass while the world is stopped. If the second
44 pass finds a reachable object that was not found by concurrent
45 mark, the garbage collector will panic.
47 gcpacertrace: setting gcpacertrace=1 causes the garbage collector to
48 print information about the internal state of the concurrent pacer.
50 gcshrinkstackoff: setting gcshrinkstackoff=1 disables moving goroutines
51 onto smaller stacks. In this mode, a goroutine's stack can only grow.
53 gcstackbarrieroff: setting gcstackbarrieroff=1 disables the use of stack barriers
54 that allow the garbage collector to avoid repeating a stack scan during the
55 mark termination phase.
57 gcstackbarrierall: setting gcstackbarrierall=1 installs stack barriers
58 in every stack frame, rather than in exponentially-spaced frames.
60 gcrescanstacks: setting gcrescanstacks=1 enables stack
61 re-scanning during the STW mark termination phase. This is
62 helpful for debugging if objects are being prematurely
63 garbage collected.
65 gcstoptheworld: setting gcstoptheworld=1 disables concurrent garbage collection,
66 making every garbage collection a stop-the-world event. Setting gcstoptheworld=2
67 also disables concurrent sweeping after the garbage collection finishes.
69 gctrace: setting gctrace=1 causes the garbage collector to emit a single line to standard
70 error at each collection, summarizing the amount of memory collected and the
71 length of the pause. Setting gctrace=2 emits the same summary but also
72 repeats each collection. The format of this line is subject to change.
73 Currently, it is:
74 gc # @#s #%: #+#+# ms clock, #+#/#/#+# ms cpu, #->#-># MB, # MB goal, # P
75 where the fields are as follows:
76 gc # the GC number, incremented at each GC
77 @#s time in seconds since program start
78 #% percentage of time spent in GC since program start
79 #+...+# wall-clock/CPU times for the phases of the GC
80 #->#-># MB heap size at GC start, at GC end, and live heap
81 # MB goal goal heap size
82 # P number of processors used
83 The phases are stop-the-world (STW) sweep termination, concurrent
84 mark and scan, and STW mark termination. The CPU times
85 for mark/scan are broken down in to assist time (GC performed in
86 line with allocation), background GC time, and idle GC time.
87 If the line ends with "(forced)", this GC was forced by a
88 runtime.GC() call and all phases are STW.
90 Setting gctrace to any value > 0 also causes the garbage collector
91 to emit a summary when memory is released back to the system.
92 This process of returning memory to the system is called scavenging.
93 The format of this summary is subject to change.
94 Currently it is:
95 scvg#: # MB released printed only if non-zero
96 scvg#: inuse: # idle: # sys: # released: # consumed: # (MB)
97 where the fields are as follows:
98 scvg# the scavenge cycle number, incremented at each scavenge
99 inuse: # MB used or partially used spans
100 idle: # MB spans pending scavenging
101 sys: # MB mapped from the system
102 released: # MB released to the system
103 consumed: # MB allocated from the system
105 memprofilerate: setting memprofilerate=X will update the value of runtime.MemProfileRate.
106 When set to 0 memory profiling is disabled. Refer to the description of
107 MemProfileRate for the default value.
109 memprofilerate: setting memprofilerate=X changes the setting for
110 runtime.MemProfileRate. Refer to the description of this variable for how
111 it is used and its default value.
113 sbrk: setting sbrk=1 replaces the memory allocator and garbage collector
114 with a trivial allocator that obtains memory from the operating system and
115 never reclaims any memory.
117 scavenge: scavenge=1 enables debugging mode of heap scavenger.
119 scheddetail: setting schedtrace=X and scheddetail=1 causes the scheduler to emit
120 detailed multiline info every X milliseconds, describing state of the scheduler,
121 processors, threads and goroutines.
123 schedtrace: setting schedtrace=X causes the scheduler to emit a single line to standard
124 error every X milliseconds, summarizing the scheduler state.
126 The net and net/http packages also refer to debugging variables in GODEBUG.
127 See the documentation for those packages for details.
129 The GOMAXPROCS variable limits the number of operating system threads that
130 can execute user-level Go code simultaneously. There is no limit to the number of threads
131 that can be blocked in system calls on behalf of Go code; those do not count against
132 the GOMAXPROCS limit. This package's GOMAXPROCS function queries and changes
133 the limit.
135 The GOTRACEBACK variable controls the amount of output generated when a Go
136 program fails due to an unrecovered panic or an unexpected runtime condition.
137 By default, a failure prints a stack trace for the current goroutine,
138 eliding functions internal to the run-time system, and then exits with exit code 2.
139 The failure prints stack traces for all goroutines if there is no current goroutine
140 or the failure is internal to the run-time.
141 GOTRACEBACK=none omits the goroutine stack traces entirely.
142 GOTRACEBACK=single (the default) behaves as described above.
143 GOTRACEBACK=all adds stack traces for all user-created goroutines.
144 GOTRACEBACK=system is like ``all'' but adds stack frames for run-time functions
145 and shows goroutines created internally by the run-time.
146 GOTRACEBACK=crash is like ``system'' but crashes in an operating system-specific
147 manner instead of exiting. For example, on Unix systems, the crash raises
148 SIGABRT to trigger a core dump.
149 For historical reasons, the GOTRACEBACK settings 0, 1, and 2 are synonyms for
150 none, all, and system, respectively.
151 The runtime/debug package's SetTraceback function allows increasing the
152 amount of output at run time, but it cannot reduce the amount below that
153 specified by the environment variable.
154 See https://golang.org/pkg/runtime/debug/#SetTraceback.
156 The GOARCH, GOOS, GOPATH, and GOROOT environment variables complete
157 the set of Go environment variables. They influence the building of Go programs
158 (see https://golang.org/cmd/go and https://golang.org/pkg/go/build).
159 GOARCH, GOOS, and GOROOT are recorded at compile time and made available by
160 constants or functions in this package, but they do not influence the execution
161 of the run-time system.
163 package runtime
165 import "runtime/internal/sys"
167 // Gosched yields the processor, allowing other goroutines to run. It does not
168 // suspend the current goroutine, so execution resumes automatically.
169 func Gosched()
171 // Caller reports file and line number information about function invocations on
172 // the calling goroutine's stack. The argument skip is the number of stack frames
173 // to ascend, with 0 identifying the caller of Caller. (For historical reasons the
174 // meaning of skip differs between Caller and Callers.) The return values report the
175 // program counter, file name, and line number within the file of the corresponding
176 // call. The boolean ok is false if it was not possible to recover the information.
177 func Caller(skip int) (pc uintptr, file string, line int, ok bool)
179 // Callers fills the slice pc with the return program counters of function invocations
180 // on the calling goroutine's stack. The argument skip is the number of stack frames
181 // to skip before recording in pc, with 0 identifying the frame for Callers itself and
182 // 1 identifying the caller of Callers.
183 // It returns the number of entries written to pc.
184 func Callers(skip int, pc []uintptr) int
186 // SetFinalizer sets the finalizer associated with obj to the provided
187 // finalizer function. When the garbage collector finds an unreachable block
188 // with an associated finalizer, it clears the association and runs
189 // finalizer(obj) in a separate goroutine. This makes obj reachable again,
190 // but now without an associated finalizer. Assuming that SetFinalizer
191 // is not called again, the next time the garbage collector sees
192 // that obj is unreachable, it will free obj.
194 // SetFinalizer(obj, nil) clears any finalizer associated with obj.
196 // The argument obj must be a pointer to an object allocated by
197 // calling new or by taking the address of a composite literal.
198 // The argument finalizer must be a function that takes a single argument
199 // to which obj's type can be assigned, and can have arbitrary ignored return
200 // values. If either of these is not true, SetFinalizer aborts the
201 // program.
203 // Finalizers are run in dependency order: if A points at B, both have
204 // finalizers, and they are otherwise unreachable, only the finalizer
205 // for A runs; once A is freed, the finalizer for B can run.
206 // If a cyclic structure includes a block with a finalizer, that
207 // cycle is not guaranteed to be garbage collected and the finalizer
208 // is not guaranteed to run, because there is no ordering that
209 // respects the dependencies.
211 // The finalizer for obj is scheduled to run at some arbitrary time after
212 // obj becomes unreachable.
213 // There is no guarantee that finalizers will run before a program exits,
214 // so typically they are useful only for releasing non-memory resources
215 // associated with an object during a long-running program.
216 // For example, an os.File object could use a finalizer to close the
217 // associated operating system file descriptor when a program discards
218 // an os.File without calling Close, but it would be a mistake
219 // to depend on a finalizer to flush an in-memory I/O buffer such as a
220 // bufio.Writer, because the buffer would not be flushed at program exit.
222 // It is not guaranteed that a finalizer will run if the size of *obj is
223 // zero bytes.
225 // It is not guaranteed that a finalizer will run for objects allocated
226 // in initializers for package-level variables. Such objects may be
227 // linker-allocated, not heap-allocated.
229 // A finalizer may run as soon as an object becomes unreachable.
230 // In order to use finalizers correctly, the program must ensure that
231 // the object is reachable until it is no longer required.
232 // Objects stored in global variables, or that can be found by tracing
233 // pointers from a global variable, are reachable. For other objects,
234 // pass the object to a call of the KeepAlive function to mark the
235 // last point in the function where the object must be reachable.
237 // For example, if p points to a struct that contains a file descriptor d,
238 // and p has a finalizer that closes that file descriptor, and if the last
239 // use of p in a function is a call to syscall.Write(p.d, buf, size), then
240 // p may be unreachable as soon as the program enters syscall.Write. The
241 // finalizer may run at that moment, closing p.d, causing syscall.Write
242 // to fail because it is writing to a closed file descriptor (or, worse,
243 // to an entirely different file descriptor opened by a different goroutine).
244 // To avoid this problem, call runtime.KeepAlive(p) after the call to
245 // syscall.Write.
247 // A single goroutine runs all finalizers for a program, sequentially.
248 // If a finalizer must run for a long time, it should do so by starting
249 // a new goroutine.
250 func SetFinalizer(obj interface{}, finalizer interface{})
252 // KeepAlive marks its argument as currently reachable.
253 // This ensures that the object is not freed, and its finalizer is not run,
254 // before the point in the program where KeepAlive is called.
256 // A very simplified example showing where KeepAlive is required:
257 // type File struct { d int }
258 // d, err := syscall.Open("/file/path", syscall.O_RDONLY, 0)
259 // // ... do something if err != nil ...
260 // p := &File{d}
261 // runtime.SetFinalizer(p, func(p *File) { syscall.Close(p.d) })
262 // var buf [10]byte
263 // n, err := syscall.Read(p.d, buf[:])
264 // // Ensure p is not finalized until Read returns.
265 // runtime.KeepAlive(p)
266 // // No more uses of p after this point.
268 // Without the KeepAlive call, the finalizer could run at the start of
269 // syscall.Read, closing the file descriptor before syscall.Read makes
270 // the actual system call.
271 func KeepAlive(interface{})
273 // GOROOT returns the root of the Go tree.
274 // It uses the GOROOT environment variable, if set,
275 // or else the root used during the Go build.
276 func GOROOT() string {
277 s := gogetenv("GOROOT")
278 if s != "" {
279 return s
281 return sys.DefaultGoroot
284 // Version returns the Go tree's version string.
285 // It is either the commit hash and date at the time of the build or,
286 // when possible, a release tag like "go1.3".
287 func Version() string {
288 return sys.TheVersion
291 // GOOS is the running program's operating system target:
292 // one of darwin, freebsd, linux, and so on.
293 const GOOS string = sys.GOOS
295 // GOARCH is the running program's architecture target:
296 // 386, amd64, arm, or s390x.
297 const GOARCH string = sys.GOARCH
299 // GCCGOTOOLDIR is the Tool Dir for the gccgo build
300 const GCCGOTOOLDIR string = sys.GccgoToolDir