mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/internal/obj: use map for symbol table
Change-Id: I105c1e7730c1e7ccf36297b9cbf96dc0a4868013 Reviewed-on: https://go-review.googlesource.com/7621 Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
parent
8e2a57e643
commit
049eee6806
2 changed files with 12 additions and 23 deletions
|
|
@ -115,7 +115,6 @@ type LSym struct {
|
|||
Locals int32
|
||||
Value int64
|
||||
Size int64
|
||||
Hash *LSym
|
||||
Allsym *LSym
|
||||
Next *LSym
|
||||
Sub *LSym
|
||||
|
|
@ -181,7 +180,7 @@ type Link struct {
|
|||
Goroot string
|
||||
Goroot_final string
|
||||
Enforce_data_order int32
|
||||
Hash [LINKHASH]*LSym
|
||||
Hash map[SymVer]*LSym
|
||||
Allsym *LSym
|
||||
Nsymbol int32
|
||||
Hist *Hist
|
||||
|
|
@ -226,6 +225,11 @@ type Link struct {
|
|||
Filesyms *LSym
|
||||
}
|
||||
|
||||
type SymVer struct {
|
||||
Name string
|
||||
Version int
|
||||
}
|
||||
|
||||
type Plist struct {
|
||||
Name *LSym
|
||||
Firstpc *Prog
|
||||
|
|
@ -539,10 +543,6 @@ const (
|
|||
A_PARAM
|
||||
)
|
||||
|
||||
const (
|
||||
LINKHASH = 100003
|
||||
)
|
||||
|
||||
// Pcdata iterator.
|
||||
// for(pciterinit(ctxt, &it, &pcd); !it.done; pciternext(&it)) { it.value holds in [it.pc, it.nextpc) }
|
||||
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ func Linknew(arch *LinkArch) *Link {
|
|||
linksetexp()
|
||||
|
||||
ctxt := new(Link)
|
||||
ctxt.Hash = make(map[SymVer]*LSym)
|
||||
ctxt.Arch = arch
|
||||
ctxt.Version = HistVersion
|
||||
ctxt.Goroot = Getgoroot()
|
||||
|
|
@ -241,26 +242,14 @@ func linknewsym(ctxt *Link, symb string, v int) *LSym {
|
|||
}
|
||||
|
||||
func _lookup(ctxt *Link, symb string, v int, creat int) *LSym {
|
||||
h := uint32(v)
|
||||
for i := 0; i < len(symb); i++ {
|
||||
c := int(symb[i])
|
||||
h = h + h + h + uint32(c)
|
||||
}
|
||||
h &= 0xffffff
|
||||
h %= LINKHASH
|
||||
for s := ctxt.Hash[h]; s != nil; s = s.Hash {
|
||||
if int(s.Version) == v && s.Name == symb {
|
||||
s := ctxt.Hash[SymVer{symb, v}]
|
||||
if s != nil || creat == 0 {
|
||||
return s
|
||||
}
|
||||
}
|
||||
if creat == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
s := linknewsym(ctxt, symb, v)
|
||||
s = linknewsym(ctxt, symb, v)
|
||||
s.Extname = s.Name
|
||||
s.Hash = ctxt.Hash[h]
|
||||
ctxt.Hash[h] = s
|
||||
ctxt.Hash[SymVer{symb, v}] = s
|
||||
|
||||
return s
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue