cmd/internal/gc, cmd/internal/ld, cmd/internal/obj: teach compiler about local symbols
This lets us avoid loading string constants via the GOT and (together with
http://golang.org/cl/9102) results in the fannkuch benchmark having very similar
register usage with -dynlink as without.
Change-Id: Ic3892b399074982b76773c3e547cfbba5dabb6f9
Reviewed-on: https://go-review.googlesource.com/9103
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
diff --git a/src/cmd/internal/gc/reflect.go b/src/cmd/internal/gc/reflect.go
index 47697be..824ed0b 100644
--- a/src/cmd/internal/gc/reflect.go
+++ b/src/cmd/internal/gc/reflect.go
@@ -814,7 +814,7 @@
for i := 0; i < 2*Widthptr; i++ {
duint8(sbits, i, gcmask[i])
}
- ggloblsym(sbits, 2*int32(Widthptr), obj.DUPOK|obj.RODATA)
+ ggloblsym(sbits, 2*int32(Widthptr), obj.DUPOK|obj.RODATA|obj.LOCAL)
}
ot = dsymptr(s, ot, sbits, 0)
@@ -1203,7 +1203,7 @@
}
ot = dextratype(s, ot, t, xt)
- ggloblsym(s, int32(ot), int8(dupok|obj.RODATA))
+ ggloblsym(s, int32(ot), int16(dupok|obj.RODATA))
// generate typelink.foo pointing at s = type.foo.
// The linker will leave a table of all the typelinks for
@@ -1229,7 +1229,7 @@
case TARRAY, TCHAN, TFUNC, TMAP:
slink := typelinksym(t)
dsymptr(slink, 0, s, 0)
- ggloblsym(slink, int32(Widthptr), int8(dupok|obj.RODATA))
+ ggloblsym(slink, int32(Widthptr), int16(dupok|obj.RODATA))
}
}