diff options
author | Russ Cox <rsc@golang.org> | 2015-05-21 14:11:33 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2015-06-05 04:42:35 +0000 |
commit | 630930c35ef7b5e22e28a6424425b887bb12c9b6 (patch) | |
tree | 4352ba6c21da3c22a7356edc324911caecfef83a /src/cmd/compile/doc.go | |
parent | a7f258e76c1073ca70a7a2216e923608e521fb66 (diff) | |
download | go-630930c35ef7b5e22e28a6424425b887bb12c9b6.tar.gz go-630930c35ef7b5e22e28a6424425b887bb12c9b6.zip |
cmd/compile, cmd/link: add docs
These are the Go 1.4 docs but refreshed for Go 1.5.
The most sigificant change is that all references to the Plan 9 toolchain are gone.
The tools no longer bear any meaningful resemblance.
Change-Id: I44f5cadb832a982323d7fee0b77673e55d761b35
Reviewed-on: https://go-review.googlesource.com/10298
Reviewed-by: Rob Pike <r@golang.org>
Diffstat (limited to 'src/cmd/compile/doc.go')
-rw-r--r-- | src/cmd/compile/doc.go | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/src/cmd/compile/doc.go b/src/cmd/compile/doc.go new file mode 100644 index 0000000000..ca7c03bb79 --- /dev/null +++ b/src/cmd/compile/doc.go @@ -0,0 +1,124 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Compile, typically invoked as ``go tool compile,'' compiles a single Go package +comprising the files named on the command line. It then writes a single +object file named for the basename of the first source file with a .o suffix. +The object file can then be combined with other objects into a package archive +or passed directly to the linker (``go tool link''). If invoked with -pack, the compiler +writes an archive directly, bypassing the intermediate object file. + +The generated files contain type information about the symbols exported by +the package and about types used by symbols imported by the package from +other packages. It is therefore not necessary when compiling client C of +package P to read the files of P's dependencies, only the compiled output of P. + +Command Line + +Usage: + + go tool compile [flags] file... + +The specified files must be Go source files and all part of the same package. +The same compiler is used for all target operating systems and architectures. +The GOOS and GOARCH environment variables set the desired target. + +Flags: + + -D path + Set relative path for local imports. + -I dir1 -I dir2 + Search for imported packages in dir1, dir2, etc, + after consulting $GOROOT/pkg/$GOOS_$GOARCH. + -L + Show complete file path in error messages. + -N + Disable optimizations. + -S + Print assembly listing to standard output (code only). + -S -S + Print assembly listing to standard output (code and data). + -V + Print compiler version and exit. + -asmhdr file + Write assembly header to file. + -complete + Assume package has no non-Go components. + -cpuprofile file + Write a CPU profile for the compilation to file. + -dynlink + Allow references to Go symbols in shared libraries (experimental). + -e + Remove the limit on the number of errors reported (default limit is 10). + -h + Halt with a stack trace at the first error detected. + -installsuffix suffix + Look for packages in $GOROOT/pkg/$GOOS_$GOARCH_suffix + instead of $GOROOT/pkg/$GOOS_$GOARCH. + -largemodel + Generated code that assumes a large memory model. + -memprofile file + Write memory profile for the compilation to file. + -memprofilerate rate + Set runtime.MemProfileRate for the compilation to rate. + -nolocalimports + Disallow local (relative) imports. + -o file + Write object to file (default file.o or, with -pack, file.a). + -p path + Set expected package import path for the code being compiled, + and diagnose imports that would cause a circular dependency. + -pack + Write a package (archive) file rather than an object file + -race + Compile with race detector enabled. + -u + Disallow importing packages not marked as safe; implies -nolocalimports. + +There are also a number of debugging flags; run the command with no arguments +for a usage message. + +Compiler Directives + +The compiler accepts compiler directives in the form of // comments at the +beginning of a line. To distinguish them from non-directive comments, the directives +require no space between the slashes and the name of the directive. However, since +they are comments, tools unaware of the directive convention or of a particular +directive can skip over a directive like any other comment. + + //line path/to/file:linenumber + +The //line directive specifies that the source line that follows should be recorded +as having come from the given file path and line number. Successive lines are +recorded using increasing line numbers, until the next directive. This directive +typically appears in machine-generated code, so that compilers and debuggers +will show lines in the original input to the generator. + +The //line directive is an historical special case; all other directives are of the form +//go:name, indicating that the directive is defined by the Go toolchain. + + //go:noescape + +The //go:noescape directive specifies that the next declaration in the file, which +must be a func without a body (meaning that it has an implementation not written +in Go) does not allow any of the pointers passed as arguments to escape into the +heap or into the values returned from the function. This information can be used as +during the compiler's escape analysis of Go code calling the function. + + //go:nosplit + +The //go:nosplit directive specifies that the next function declared in the file must +not include a stack overflow check. This is most commonly used by low-level +runtime sources invoked at times when it is unsafe for the calling goroutine to be +preempted. + + //go:linkname localname importpath.name + +The //go:linkname directive instructs the compiler to use ``importpath.name' as the +object file symbol name for the variable or function declared as ``localname'' in the +source code. Because this directive can subvert the type system and package +modularity, it is only enabled in files that have imported "unsafe". +*/ +package main |