1
0
mirror of https://github.com/golang/go synced 2024-11-24 16:50:13 -07:00

cmd/link: stop generating garbage in elfhash

All callers already had strings. No need to generate byte slice copies
to work on bytes.

Performance not measured, but probably helps at least a bit.

Change-Id: Iec3230b69724fac68caae7aad46f2ce1504e82e5
Reviewed-on: https://go-review.googlesource.com/20136
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Reviewed-by: Dave Cheney <dave@cheney.net>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Brad Fitzpatrick 2016-03-02 14:29:44 -08:00
parent 03f3bfc460
commit d7cdf66978

View File

@ -1042,19 +1042,15 @@ func elfwritehdr() uint32 {
}
/* Taken directly from the definition document for ELF64 */
func elfhash(name []byte) uint32 {
var h uint32 = 0
var g uint32
for len(name) != 0 {
h = (h << 4) + uint32(name[0])
name = name[1:]
g = h & 0xf0000000
if g != 0 {
func elfhash(name string) uint32 {
var h uint32
for i := 0; i < len(name); i++ {
h = (h << 4) + uint32(name[i])
if g := h & 0xf0000000; g != 0 {
h ^= g >> 24
}
h &= 0x0fffffff
}
return h
}
@ -1371,7 +1367,7 @@ func elfdynhash() {
}
name := sy.Extname
hc := elfhash([]byte(name))
hc := elfhash(name)
b = int(hc % uint32(nbucket))
chain[sy.Dynid] = buckets[b]
@ -1418,7 +1414,7 @@ func elfdynhash() {
i++
// aux struct
Adduint32(Ctxt, s, elfhash([]byte(x.vers))) // hash
Adduint32(Ctxt, s, elfhash(x.vers)) // hash
Adduint16(Ctxt, s, 0) // flags
Adduint16(Ctxt, s, uint16(x.num)) // other - index we refer to this by
Adduint32(Ctxt, s, uint32(Addstring(dynstr, x.vers))) // version string offset