mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.link] cmd/link: revise representation of dwarfp
Change linker DWARF generation to move away from emitting a single giant list of DWARF symbols, and instead emit a list of descriptors, with each descriptor holding the symbols for a specific DWARF section. While placing all DWARF symbols in a single lists does come in handy in certain instances, it also creates a lot of confusion and weird code in other cases, specifically where we want to perform operations on a section-by-section basis (resulting in code that tries to re-discover section boundaries by walking/inspecting the list). Change-Id: I4dac81bd38cba903c9fd7004d613597e76dfb77a Reviewed-on: https://go-review.googlesource.com/c/go/+/228780 Reviewed-by: Jeremy Faller <jeremy@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
817bd10cae
commit
c32b590264
8 changed files with 215 additions and 138 deletions
|
|
@ -2820,14 +2820,19 @@ func (ctxt *Link) loadlibfull() {
|
|||
pclntabFirstFunc = ctxt.loader.Syms[pclntabFirstFunc2]
|
||||
pclntabLastFunc = ctxt.loader.Syms[pclntabLastFunc2]
|
||||
|
||||
// Populate dwarfp from dwarfp2. If we see a symbol index on dwarfp2
|
||||
// Populate dwarfp from dwarfp2. If we see a symbol index
|
||||
// whose loader.Syms entry is nil, something went wrong.
|
||||
for _, symIdx := range dwarfp2 {
|
||||
s := ctxt.loader.Syms[symIdx]
|
||||
if s == nil {
|
||||
panic(fmt.Sprintf("nil sym for dwarfp2 element %d", symIdx))
|
||||
for _, si := range dwarfp2 {
|
||||
syms := make([]*sym.Symbol, 0, len(si.syms))
|
||||
for _, symIdx := range si.syms {
|
||||
s := ctxt.loader.Syms[symIdx]
|
||||
if s == nil {
|
||||
panic(fmt.Sprintf("nil sym for dwarfp2 element %d", symIdx))
|
||||
}
|
||||
s.Attr |= sym.AttrLocal
|
||||
syms = append(syms, s)
|
||||
}
|
||||
dwarfp = append(dwarfp, s)
|
||||
dwarfp = append(dwarfp, dwarfSecInfo2{syms: syms})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue