aboutsummaryrefslogtreecommitdiff
path: root/include
AgeCommit message (Collapse)Author
2015-03-01all: delete C libraries and cmd/dist code that builds themRuss Cox
Change-Id: Ic66243674ac1dbf829c7523005e33611cc89ac83 Reviewed-on: https://go-review.googlesource.com/6362 Reviewed-by: Rob Pike <r@golang.org>
2015-03-01cmd/ld: clean for c2goRuss Cox
Change-Id: Iaab2be9a1919f2fa9dbc61a5b7fbf99bcd0712a9 Reviewed-on: https://go-review.googlesource.com/6332 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Minux Ma <minux@golang.org>
2015-02-26liblink: delete unused codeRuss Cox
Liblink is still needed for the linker (for a bit longer) but mostly not. Delete the unused parts. Change-Id: Ie63a7c1520dee52b17425b384943cd16262d36e3 Reviewed-on: https://go-review.googlesource.com/6110 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-02-13[dev.cc] all: merge master (5f1efe7) into dev.ccRuss Cox
Conflicts: src/cmd/dist/build.go Change-Id: I98a4b5e010bee91507b85bb8efd9c74e1a1f649c
2015-02-11cmd/gc: factor newly-portable code into gc directoryRuss Cox
This isn't everything, but it's a start. Still producing bit-identical compiler output. The semantics of the old back ends is preserved, even when they are probably buggy. There are some TODOs in gc/gsubr.c to remove special cases to preserve bugs in 5g and 8g. Change-Id: I28ae295fbfc94ef9df43e13ab96bd6fc2f194bc4 Reviewed-on: https://go-review.googlesource.com/3802 Reviewed-by: Austin Clements <austin@google.com>
2015-02-08include/u.h: fix name clash of REG_R* on solarisShenghou Ma
Fixes build for solaris. Change-Id: Ic6ffab36df9bd68fc38b258f1484a29fa2a0cd39 Reviewed-on: https://go-review.googlesource.com/4180 Reviewed-by: Aram Hăvărneanu <aram@mgk.ro>
2015-02-04[dev.cc] all: merge master (b8fcae0) into dev.ccRuss Cox
Change-Id: I2aa1d0b0c4cf7632a54e843810959b468e3812ab
2015-02-04liblink: require use of TYPE_ADDR, not TYPE_CONSTRuss Cox
Add Addr-checking for all Progs on input to liblink, in liblink/pass.c, including requiring use of TYPE_ADDR, not TYPE_CONST. Update compilers and assemblers to satisfy checks. Change-Id: Idac36b9f6805f0451cb541d2338992ca5eaf3963 Reviewed-on: https://go-review.googlesource.com/3801 Reviewed-by: Austin Clements <austin@google.com>
2015-02-03include: restore use of signal.h on windows (fixes build)Alex Brainman
Change-Id: Ifd983cf50b1ccbe64a45d3b3ad171ef67f608033 Reviewed-on: https://go-review.googlesource.com/3831 Reviewed-by: Dave Cheney <dave@cheney.net>
2015-02-03liblink: define fixed A-numbers for common instructionsRuss Cox
This makes names like ANOP, ATEXT, AGLOBL, ACALL, AJMP, ARET available for use by architecture-independent processing passes. On arm and ppc64, the alternate names are now aliases for the official ones (ABL for ACALL, AB or ABR for AJMP, ARETURN for ARET). Change-Id: Id027771243795af2b3745199c645b6e1bedd7d18 Reviewed-on: https://go-review.googlesource.com/3577 Reviewed-by: Aram Hăvărneanu <aram@mgk.ro> Reviewed-by: Austin Clements <austin@google.com>
2015-02-03liblink: place DATA size in from3.offset alwaysRuss Cox
Like the TEXT/GLOBL flags, this was split between from.scale and reg, neither of which is appropriate. Change-Id: I2a16ef066a53b6edb7afb16cce108c0d1d26389c Reviewed-on: https://go-review.googlesource.com/3576 Reviewed-by: Aram Hăvărneanu <aram@mgk.ro> Reviewed-by: Austin Clements <austin@google.com>
2015-02-03liblink: the zero Prog is now valid and ready for useRuss Cox
Use AXXX instead of AGOK (neither is a valid instruction but AXXX is zero) for the initial setting of Prog.as, and now there are no non-zero default field settings. Remove the arch-specific zprog/zprg in favor of a single global zprog. Remove the arch-specific prg constructor in favor of emallocz(sizeof(Prog)). Change-Id: Ia73078726768333d7cdba296f548170c1bea9498 Reviewed-on: https://go-review.googlesource.com/3575 Reviewed-by: Aram Hăvărneanu <aram@mgk.ro> Reviewed-by: Austin Clements <austin@google.com>
2015-02-03liblink: place TEXT/GLOBL flags in p->from3 alwaysRuss Cox
Before, amd64 and 386 stored the flags in p->from.scale and arm and ppc64 stored the flags in p->reg. Both caused special cases in printing and in handling of the addresses. To avoid possible conflicts with the real meaning of p->from and to avoid storing a non-register value in a reg field, use from3 to hold a TYPE_CONST value giving the flags. There is still a special case for printing, because the flags are specified without a $, and normally a TYPE_CONST prints with a $. But that's much less special than what came before. This allows us to remove the textflag and settextflag methods from LinkArch. They are no longer architecture-specific. Change-Id: I931da8e1ecd92e127cd9aa44ef5a73c42e730110 Reviewed-on: https://go-review.googlesource.com/3572 Reviewed-by: Austin Clements <austin@google.com>
2015-02-03include: fix arm build one more timeDave Cheney
Fourth time's the charm. Actually this doesn't fix the build, there is a crash after go_bootstrap is compiled which looks like it is related to auxv parsing. Change-Id: Id00e2dfbe7bae42856f996065d3fb90b820e29a8 Reviewed-on: https://go-review.googlesource.com/3610 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-01-30liblink: fix arm build againDave Cheney
Another attempt to fix the arm build by moving the include of signal.h to cmd/lex.c, unless we are building on plan9. Obviously if we had a plan9/arm builder this would probably not work, but this is only a temporary measure until the c2go transition is complete. Change-Id: I7f8ae27349b2e7a09c55db03e02a01939159a268 Reviewed-on: https://go-review.googlesource.com/3566 Reviewed-by: Russ Cox <rsc@golang.org>
2015-01-30liblink: make Prog, Addr more portable and documentRuss Cox
Change-Id: Idda476b71ae23f7b73fe63f062cf3531c1268eb3 Reviewed-on: https://go-review.googlesource.com/3514 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Aram Hăvărneanu <aram@mgk.ro> Reviewed-by: Dave Cheney <dave@cheney.net>
2015-01-26cmd/gc: simplify code for c2goRuss Cox
- Change forward reference to struct Node* to void* in liblink. - Use explicit (Node*) casts in cmd/gc to get at that field. - Define struct Array in go.h instead of hiding it in array.c. - Remove some sizeof(uint32), sizeof(uint64) uses. - Remove some ? : expressions. - Rewrite some problematic mid-expression assignments. Change-Id: I308c70140238a0cfffd90e133f86f442cd0e17d4 Reviewed-on: https://go-review.googlesource.com/3276 Reviewed-by: Rob Pike <r@golang.org>
2015-01-21include: declare getgohostos and getgohostarch on Plan 9David du Colombier
The function getgohostos and getgohostarch were declared in include/libc.h in CL 3042. Change-Id: Ib4ff5182cb71cc79a99663ce727fa4c28d15d7ad Reviewed-on: https://go-review.googlesource.com/3122 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2015-01-21include: declare runcmd on Plan 9David du Colombier
The function runcmd was declared in include/libc.h in CL 7523043. Change-Id: I3839b96b2ac0d63e5c2eb4c216710442d0962119 Reviewed-on: https://go-review.googlesource.com/3125 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2015-01-21[dev.cc] liblink: invoke 'go tool objwriter' to implement writeobj, if directedRuss Cox
This CL enables moving the bulk of the object writing code out of liblink and into translated Go libraries in cmd/internal/obj, but it does not do the move. This CL introduces two new environment variables, $GOOBJ and $GOOBJWRITER, but both will be deleted along with the rest of the liblink C code. The default behavior of a build is unchanged by this CL: the C version of liblink uses the C object layout and writing code. If $GOOBJ=1, liblink invokes go tool objwriter instead. If $GOOBJ=2, liblink does its own layout and then invokes go tool objwriter, which checks that it gets the same answer. That is, in $GOOBJ=2 mode, both the C and the Go version of the code run, and the operation fails if the two produce different answers. This provides a very strong check that the translation is working correctly. Change-Id: I56ab49b07ccb2c7b81085f1d6950131047c6aa3c Reviewed-on: https://go-review.googlesource.com/3048 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2015-01-21[dev.cc] cmd/dist, lib9: make GOHOSTARCH, GOHOSTOS available to C programsRuss Cox
Needed for invoking a Go subprocess in the C code. The Go tools live in $GOROOT/pkg/tool/$GOHOSTARCH_$GOHOSTOS. Change-Id: I961b6b8a07de912de174b758b2fb87d77080546d Reviewed-on: https://go-review.googlesource.com/3042 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2015-01-21build: implement GOEXPERIMENT again in runtime, and add to liblinkRuss Cox
For Austin's framepointer experiment. Change-Id: I81b6f414943b3578924f853300b9193684f79bf4 Reviewed-on: https://go-review.googlesource.com/2994 Reviewed-by: Austin Clements <austin@google.com>
2015-01-07cmd/9l: support internal linkingAustin Clements
This implements the ELF relocations and dynamic linking tables necessary to support internal linking on ppc64. It also marks ppc64le ELF files as ABI v2; failing to do this doesn't seem to confuse the loader, but it does confuse libbfd (and hence gdb, objdump, etc). Change-Id: I559dddf89b39052e1b6288a4dd5e72693b5355e4 Reviewed-on: https://go-review.googlesource.com/2006 Reviewed-by: Russ Cox <rsc@golang.org>
2015-01-07cmd/ld: support for relocation variantsAustin Clements
Most ppc64 relocations come in six or more variants where the basic relocation formula is the same, but which bits of the computed value are installed where changes. Introduce the concept of "variants" for internal relocations to support this. Since this applies to architecture-independent relocation types like R_PCREL, we do this in relocsym. Currently there is only an identity variant. A later CL that adds support for ppc64 ELF relocations will introduce more. Change-Id: I0c5f0e7dbe5beece79cd24fe36267d37c52f1a0c Reviewed-on: https://go-review.googlesource.com/2005 Reviewed-by: Russ Cox <rsc@golang.org>
2015-01-07cmd/ld: decode local entry offset from ppc64 symbolsAustin Clements
ppc64 function symbols have both a global entry point and a local entry point, where the difference is stashed in sym.other. We'll need this information to generate calls to ELF ABI functions. Change-Id: Ibe343923f56801de7ebec29946c79690a9ffde57 Reviewed-on: https://go-review.googlesource.com/2002 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Minux Ma <minux@golang.org>
2015-01-05Revert "liblink, cmd/ld, runtime: remove stackguard1"Russ Cox
This reverts commit ab0535ae3fb45ba734d47542cc4845f27f708d1b. I think it will remain useful to distinguish code that must run on a system stack from code that can run on either stack, even if that distinction is no longer based on the implementation language. That is, I expect to add a //go:systemstack comment that, in terms of the old implementation, tells the compiler, to pretend this function was written in C. Change-Id: I33d2ebb2f99ae12496484c6ec8ed07233d693275 Reviewed-on: https://go-review.googlesource.com/2275 Reviewed-by: Russ Cox <rsc@golang.org>
2015-01-02include: remove unnecessary stuff on windowsShenghou Ma
Our definition of struct timespec used to cause problems with certain versions of mingw-rt. However, as it turns out, we don't actually need those definitions and prototypes, so remove them. Fixes #9472. Change-Id: Ie0880f0d58be112625140f73d0bed71f98b7cf05 Reviewed-on: https://go-review.googlesource.com/2236 Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
2014-12-29liblink, cmd/ld, runtime: remove stackguard1Shenghou Ma
Now that we've removed all the C code in runtime and the C compilers, there is no need to have a separate stackguard field to check for C code on Go stack. Remove field g.stackguard1 and rename g.stackguard0 to g.stackguard. Adjust liblink and cmd/ld as necessary. Change-Id: I54e75db5a93d783e86af5ff1a6cd497d669d8d33 Reviewed-on: https://go-review.googlesource.com/2144 Reviewed-by: Keith Randall <khr@golang.org>
2014-12-05all: power64 is now ppc64Russ Cox
Fixes #8654. LGTM=austin R=austin CC=golang-codereviews https://golang.org/cl/180600043
2014-11-21[dev.cc] liblink: more docs on Prog and Addr fieldsAustin Clements
LGTM=rsc R=rsc, dave CC=golang-codereviews https://golang.org/cl/174530043
2014-11-21[dev.cc] liblink: fix warnings on Plan 9David du Colombier
warning: src/liblink/list6.c:94 set and not used: s warning: src/liblink/list6.c:157 format mismatch ld VLONG, arg 3 warning: src/liblink/list6.c:157 format mismatch E UINT, arg 4 warning: src/liblink/list6.c:157 format mismatch d VLONG, arg 5 warning: src/liblink/list6.c:163 set and not used: s warning: src/liblink/list9.c:105 set and not used: s warning: src/liblink/list9.c:185 format mismatch ld VLONG, arg 3 warning: src/liblink/list9.c:185 format mismatch E UINT, arg 4 warning: src/liblink/list9.c:185 format mismatch d VLONG, arg 5 warning: src/liblink/list9.c:193 set and not used: s LGTM=rsc R=rsc CC=austin, golang-codereviews, minux https://golang.org/cl/176130043
2014-11-14[dev.power64] liblink: generate dnames[5689] for D_* constantsAustin Clements
This is more complicated than the other enums because the D_* enums are full of explicit initializers and repeated values. This tries its best. (This will get much cleaner once we tease these constants apart better.) LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/166700043
2014-11-12[dev.power64] liblink: improve documentation of struct ProgAustin Clements
LGTM=dave, rsc R=rsc, dave CC=golang-codereviews https://golang.org/cl/169460043
2014-10-22[dev.power64] all: merge default into dev.power64Austin Clements
This brings dev.power64 up-to-date with the current tip of default. go_bootstrap is still panicking with a bad defer when initializing the runtime (even on amd64). LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/152570049
2014-10-22[dev.power64] build: merge default into dev.power64Austin Clements
LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/160200044
2014-10-14liblink: require DATA lines to be ordered by offset, with no overlapRuss Cox
The assembler could give a better error, but this one is good enough for now. Fixes #8880. LGTM=r R=r CC=golang-codereviews https://golang.org/cl/153610043
2014-09-24build: fix elf buildsRuss Cox
Corrections due to new strict type rules for data+bss. Also disable misc/cgo/cdefstest since you can't compile C code anymore. TBR=iant CC=golang-codereviews https://golang.org/cl/148050044
2014-09-16liblink, sync/atomic: fix arm buildRuss Cox
The liblink code to insert the FUNCDATA for a stack map from the Go prototype was not correct for ARM (different data structure layout). Also, sync/atomic was missing some Go prototypes for ARM-specific functions. TBR=r CC=golang-codereviews https://golang.org/cl/143160045
2014-09-09runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFramesRuss Cox
Commit to stack copying for stack growth. We're carrying around a surprising amount of cruft from older schemes. I am confident that precise stack scans and stack copying are here to stay. Delete fallback code for when precise stack info is disabled. Delete fallback code for when copying stacks is disabled. Delete fallback code for when StackCopyAlways is disabled. Delete Stktop chain - there is only one stack segment now. Delete M.moreargp, M.moreargsize, M.moreframesize, M.cret. Delete G.writenbuf (unrelated, just dead). Delete runtime.lessstack, runtime.oldstack. Delete many amd64 morestack variants. Delete initialization of morestack frame/arg sizes (shortens split prologue!). Replace G's stackguard/stackbase/stack0/stacksize/ syscallstack/syscallguard/forkstackguard with simple stack bounds (lo, hi). Update liblink, runtime/cgo for adjustments to G. LGTM=khr R=khr, bradfitz CC=golang-codereviews, iant, r https://golang.org/cl/137410043
2014-08-31cmd/ld: diagnose Go calling CRuss Cox
For example: go build -ldflags -C cmd/go 2>&1 | awk '{print $NF}' | sort | uniq -c | sort -nr LGTM=khr R=khr, josharian CC=golang-codereviews https://golang.org/cl/135170044
2014-08-07[dev.power64] include/link.h, liblink: convert 9l functions to liblinkShenghou Ma
This replaces CL 122990043. LGTM=rsc R=rsc, iant CC=golang-codereviews https://golang.org/cl/123010043
2014-08-06liblink, cmd/dist, cmd/5l: introduce %^ and move C_* constants.Shenghou Ma
The helps certain diagnostics and also removed duplicated enums as a side effect. LGTM=dave, rsc R=rsc, dave CC=golang-codereviews https://golang.org/cl/115060044
2014-08-06liblink: support big-endian properlyShenghou Ma
LGTM=rsc R=rsc, iant CC=golang-codereviews https://golang.org/cl/115300044
2014-07-25include/u.h: define _DEFAULT_SOURCE for new glibcBobby Powers
glibc devs have apparently decided _BSD_SOURCE will be deprecated on Linux, and issue a preprocessor warning if declaring _BSD_SOURCE without _DEFAULT_SOURCE. https://sourceware.org/glibc/wiki/Release/2.20 Fixes #8397. LGTM=iant R=dave, gobot, iant CC=golang-codereviews https://golang.org/cl/112530043
2014-07-21liblink: remove some gotos + other fixesRuss Cox
Rewrite gotos that violate Go's stricter rules. Use uchar* instead of char* in a few places that aren't strings. Remove dead opcross code from asm5.c. Declare regstr (in both list6 and list8) static. LGTM=minux, dave R=minux, dave CC=golang-codereviews https://golang.org/cl/113230043
2014-07-02build: annotations and modifications for c2goRuss Cox
The main changes fall into a few patterns: 1. Replace #define with enum. 2. Add /*c2go */ comment giving effect of #define. This is necessary for function-like #defines and non-enum-able #defined constants. (Not all compilers handle negative or large enums.) 3. Add extra braces in struct initializer. (c2go does not implement the full rules.) This is enough to let c2go typecheck the source tree. There may be more changes once it is doing other semantic analyses. LGTM=minux, iant R=minux, dave, iant CC=golang-codereviews https://golang.org/cl/106860045
2014-07-02liblink, runtime: preliminary support for plan9/amd64Aram Hăvărneanu
A TLS slot is reserved by _rt0_.*_plan9 as an automatic and its address (which is static on Plan 9) is saved in the global _privates symbol. The startup linkage now is exactly like that from Plan 9 libc, and the way we access g is exactly as if we'd have used privalloc(2). Aside from making the code more standard, this change drastically simplifies it, both for 386 and for amd64, and makes the Plan 9 code in liblink common for both 386 and amd64. The amd64 runtime code was cleared of nxm assumptions, and now runs on the standard Plan 9 kernel. Note handling fixes will follow in a separate CL. LGTM=rsc R=golang-codereviews, rsc, bradfitz, dave CC=0intro, ality, golang-codereviews, jas, minux.ma, mischief https://golang.org/cl/101510049
2014-06-26all: remove 'extern register M *m' from runtimeRuss Cox
The runtime has historically held two dedicated values g (current goroutine) and m (current thread) in 'extern register' slots (TLS on x86, real registers backed by TLS on ARM). This CL removes the extern register m; code now uses g->m. On ARM, this frees up the register that formerly held m (R9). This is important for NaCl, because NaCl ARM code cannot use R9 at all. The Go 1 macrobenchmarks (those with per-op times >= 10 µs) are unaffected: BenchmarkBinaryTree17 5491374955 5471024381 -0.37% BenchmarkFannkuch11 4357101311 4275174828 -1.88% BenchmarkGobDecode 11029957 11364184 +3.03% BenchmarkGobEncode 6852205 6784822 -0.98% BenchmarkGzip 650795967 650152275 -0.10% BenchmarkGunzip 140962363 141041670 +0.06% BenchmarkHTTPClientServer 71581 73081 +2.10% BenchmarkJSONEncode 31928079 31913356 -0.05% BenchmarkJSONDecode 117470065 113689916 -3.22% BenchmarkMandelbrot200 6008923 5998712 -0.17% BenchmarkGoParse 6310917 6327487 +0.26% BenchmarkRegexpMatchMedium_1K 114568 114763 +0.17% BenchmarkRegexpMatchHard_1K 168977 169244 +0.16% BenchmarkRevcomp 935294971 914060918 -2.27% BenchmarkTemplate 145917123 148186096 +1.55% Minux previous reported larger variations, but these were caused by run-to-run noise, not repeatable slowdowns. Actual code changes by Minux. I only did the docs and the benchmarking. LGTM=dvyukov, iant, minux R=minux, josharian, iant, dave, bradfitz, dvyukov CC=golang-codereviews https://golang.org/cl/109050043
2014-05-20liblink: fix field trackingRuss Cox
The USEFIELD instructions no longer make it to the linker, so we have to do something else to pin the references they were pinning. Emit a 0-length relocation of type R_USEFIELD. Fixes #7486. LGTM=iant R=golang-codereviews, iant CC=golang-codereviews, r https://golang.org/cl/95530043
2014-04-19include/plan9: make mklibc.rc compatible with 9atomDavid du Colombier
Since there is no Runemask constant in UTF-8 enum in 9atom, removing the other constants leads to an empty enum, which is illegal. Thus, we remove enum entirely. LGTM=r R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/82660044