mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.link] cmd/link: convert second phase of DWARF-gen to use loader
This converts the second portion of DWARF-gen (dwarfGenerateDebugSyms function and friends) to use the loader, as opposed to sym.Symbols. Second phase is invoked as part of dodata(), which is fairly far along in the linker, meaning that the "converted to loader.Symbol" wavefront has not yet reached that point. To account for this, the patch contains some shim code that runs initially to copy back things from sym.Symbols into the loader (notable symbol values), and then a second hook to be code after dwarf-gen is complete to that copies the results back into the appropriate sym.Symbols. This code is obviously temporary, but needed for the time being. Change-Id: I9b830b08b16480a1a5230cb52b592db1c550af18 Reviewed-on: https://go-review.googlesource.com/c/go/+/220987 Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com> Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
parent
4a6c1caae2
commit
0c41a37c6c
5 changed files with 979 additions and 41 deletions
|
|
@ -45,8 +45,13 @@ func (l *Loader) MakeSymbolUpdater(symIdx Sym) *SymbolBuilder {
|
|||
// Create a clone with the same name/version/kind etc.
|
||||
l.cloneToExternal(symIdx)
|
||||
}
|
||||
if l.Syms[symIdx] != nil {
|
||||
panic(fmt.Sprintf("can't build if sym.Symbol %q already present", l.RawSymName(symIdx)))
|
||||
// Now that we're doing phase 2 DWARF generation using the loader
|
||||
// but before the wavefront has reached dodata(), we can't have this
|
||||
// assertion here. Commented out for now.
|
||||
if false {
|
||||
if l.Syms[symIdx] != nil {
|
||||
panic(fmt.Sprintf("can't build if sym.Symbol %q already present", l.RawSymName(symIdx)))
|
||||
}
|
||||
}
|
||||
|
||||
// Construct updater and return.
|
||||
|
|
@ -113,6 +118,13 @@ func (sb *SymbolBuilder) SetRelocs(rslice []Reloc) {
|
|||
sb.relocs = rslice
|
||||
}
|
||||
|
||||
func (sb *SymbolBuilder) WriteRelocs(rslice []Reloc) {
|
||||
if len(sb.relocs) != len(rslice) {
|
||||
panic("src/dest length mismatch")
|
||||
}
|
||||
copy(sb.relocs, rslice)
|
||||
}
|
||||
|
||||
func (sb *SymbolBuilder) AddReloc(r Reloc) {
|
||||
sb.relocs = append(sb.relocs, r)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue