From 7f9e0220cdc3516308d24bba4ef8180b6a923a27 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Thu, 11 Apr 2019 18:05:19 -0700 Subject: [PATCH] cmd/link: fix off-by-one in ftabaddstring MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit ftabaddstring adds a string to the pclntab. The pclntab uses C strings, so the code added 1 to the length. However, it also added an extraneous 1 in the Grow call. Remove that. While we're here, simplify, document, remove an unnecessary parameter, and remove some unnecessary conversions. Shaves off a few bytes here and there, and thus updates #6853. file before after Δ % go 14671316 14659028 -12288 -0.084% addr2line 4280552 4276456 -4096 -0.096% api 6058936 6050744 -8192 -0.135% buildid 2861040 2856944 -4096 -0.143% cgo 4867912 4863816 -4096 -0.084% compile 25770104 25753720 -16384 -0.064% cover 5286888 5282792 -4096 -0.077% dist 3634048 3629952 -4096 -0.113% doc 4691000 4686904 -4096 -0.087% fix 3393736 3389640 -4096 -0.121% link 6109280 6105184 -4096 -0.067% nm 4225960 4221864 -4096 -0.097% objdump 4636520 4632424 -4096 -0.088% pack 2285200 2281104 -4096 -0.179% pprof 14657508 14645220 -12288 -0.084% test2json 2818568 2814472 -4096 -0.145% trace 11618524 11610332 -8192 -0.071% vet 8403544 8395352 -8192 -0.097% Change-Id: I20b1f541de5d3ed326dd937aad6a43801862df51 Reviewed-on: https://go-review.googlesource.com/c/go/+/171820 Run-TryBot: Josh Bleecher Snyder TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/cmd/link/internal/ld/pcln.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/cmd/link/internal/ld/pcln.go b/src/cmd/link/internal/ld/pcln.go index 5c590608e3..5924acc0b0 100644 --- a/src/cmd/link/internal/ld/pcln.go +++ b/src/cmd/link/internal/ld/pcln.go @@ -104,12 +104,11 @@ func addpctab(ctxt *Link, ftab *sym.Symbol, off int32, d *sym.Pcdata) int32 { return int32(ftab.SetUint32(ctxt.Arch, int64(off), uint32(start))) } -func ftabaddstring(ctxt *Link, ftab *sym.Symbol, s string) int32 { - n := int32(len(s)) + 1 - start := int32(len(ftab.P)) - ftab.Grow(int64(start) + int64(n) + 1) +func ftabaddstring(ftab *sym.Symbol, s string) int32 { + start := len(ftab.P) + ftab.Grow(int64(start + len(s) + 1)) // make room for s plus trailing NUL copy(ftab.P[start:], s) - return start + return int32(start) } // numberfile assigns a file number to the file if it hasn't been assigned already. @@ -236,7 +235,7 @@ func (ctxt *Link) pclntab() { nameToOffset := func(name string) int32 { nameoff, ok := funcnameoff[name] if !ok { - nameoff = ftabaddstring(ctxt, ftab, name) + nameoff = ftabaddstring(ftab, name) funcnameoff[name] = nameoff } return nameoff @@ -446,7 +445,7 @@ func (ctxt *Link) pclntab() { ftab.SetUint32(ctxt.Arch, int64(start), uint32(len(ctxt.Filesyms)+1)) for i := len(ctxt.Filesyms) - 1; i >= 0; i-- { s := ctxt.Filesyms[i] - ftab.SetUint32(ctxt.Arch, int64(start)+s.Value*4, uint32(ftabaddstring(ctxt, ftab, s.Name))) + ftab.SetUint32(ctxt.Arch, int64(start)+s.Value*4, uint32(ftabaddstring(ftab, s.Name))) } ftab.Size = int64(len(ftab.P)) -- 2.48.1