summaryrefslogtreecommitdiff
path: root/src/cmd/gc/obj.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-12-16 12:51:38 -0500
committerRuss Cox <rsc@golang.org>2013-12-16 12:51:38 -0500
commit737d6de29569572e16839f9cf6d91cc1db75b622 (patch)
tree8d2d16fd6763a7e7317028e0b61b50e538ca98f0 /src/cmd/gc/obj.c
parente8d8bd79905af585c48536115f96399e0e362326 (diff)
downloadgo-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.c13
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