diff options
author | Russ Cox <rsc@golang.org> | 2013-12-16 12:51:38 -0500 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2013-12-16 12:51:38 -0500 |
commit | 737d6de29569572e16839f9cf6d91cc1db75b622 (patch) | |
tree | 8d2d16fd6763a7e7317028e0b61b50e538ca98f0 /src/cmd/gc/obj.c | |
parent | e8d8bd79905af585c48536115f96399e0e362326 (diff) | |
download | go-737d6de29569572e16839f9cf6d91cc1db75b622.tar.gz |
cmd/cc, cmd/gc: update compilers, assemblers for liblink changes
- add buffered stdout to all tools and provide to link ctxt.
- avoid extra \n before ! in .6 files written by assemblers
(makes them match the C compilers).
- use linkwriteobj instead of linkouthist+linkwritefuncs.
- in assemblers and C compilers, record pc explicitly in Prog,
for use by liblink.
- in C compilers, preserve jump target links.
- in Go compilers (gsubr.c) attach gotype directly to
corresponding LSym* instead of rederiving from instruction stream.
- in Go compilers, emit just one definition for runtime.zerovalue
from each compilation.
This CL consists entirely of small adjustments.
The heavy lifting is in CL 39680043.
Each depends on the other.
R=golang-dev, dave, iant
CC=golang-dev
https://codereview.appspot.com/37030045
Diffstat (limited to 'src/cmd/gc/obj.c')
-rw-r--r-- | src/cmd/gc/obj.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/cmd/gc/obj.c b/src/cmd/gc/obj.c index c26b6619c..37d3a0326 100644 --- a/src/cmd/gc/obj.c +++ b/src/cmd/gc/obj.c @@ -16,6 +16,7 @@ void dumpobj(void) { NodeList *externs, *tmp; + Sym *zero; bout = Bopen(outfile, OWRITE); if(bout == nil) { @@ -30,8 +31,6 @@ dumpobj(void) dumpexport(); Bprint(bout, "\n!\n"); - linkouthist(ctxt, bout); - externs = nil; if(externdcl != nil) externs = externdcl->end; @@ -46,8 +45,11 @@ dumpobj(void) dumpglobls(); externdcl = tmp; + zero = pkglookup("zerovalue", runtimepkg); + ggloblsym(zero, zerosize, 1, 1); + dumpdata(); - linkwritefuncs(ctxt, bout); + linkwriteobj(ctxt, bout); Bterm(bout); } @@ -74,12 +76,15 @@ dumpglobls(void) ggloblnod(n); } - + for(l=funcsyms; l; l=l->next) { n = l->n; dsymptr(n->sym, 0, n->sym->def->shortname->sym, 0); ggloblsym(n->sym, widthptr, 1, 1); } + + // Do not reprocess funcsyms on next dumpglobls call. + funcsyms = nil; } void |