Commit d7cdf669 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

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/20136Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
Reviewed-by: 's avatarDave Cheney <dave@cheney.net>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
parent 03f3bfc4
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment