mirror of
https://github.com/golang/go
synced 2024-11-17 18:24:45 -07:00
[dev.link] cmd/link: remove global datap, moved to *Link
This change moves datap from global space into the link context. Rather than having it exist in context, we could have it returned from dodata, and pass it as a parameter, but it is used in awkward places in the Arch functions. Easiest for now is just keeping it in the context, until we more formally move it to slices of loader.Sym. This is a largely non-functional change. Change-Id: Ica93bd857c39913ad470a61c63bc8d21704d6308 Reviewed-on: https://go-review.googlesource.com/c/go/+/222664 Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
4d5fdd74ab
commit
b328ab1d1e
@ -586,7 +586,7 @@ func (ctxt *Link) reloc() {
|
|||||||
wg.Done()
|
wg.Done()
|
||||||
}()
|
}()
|
||||||
go func() {
|
go func() {
|
||||||
for _, s := range datap {
|
for _, s := range ctxt.datap {
|
||||||
relocsym(target, reporter, lookup, syms, s)
|
relocsym(target, reporter, lookup, syms, s)
|
||||||
}
|
}
|
||||||
wg.Done()
|
wg.Done()
|
||||||
@ -844,14 +844,14 @@ func writeDatblkToOutBuf(ctxt *Link, out *OutBuf, addr int64, size int64) {
|
|||||||
ctxt.Logf("datblk [%#x,%#x) at offset %#x\n", addr, addr+size, ctxt.Out.Offset())
|
ctxt.Logf("datblk [%#x,%#x) at offset %#x\n", addr, addr+size, ctxt.Out.Offset())
|
||||||
}
|
}
|
||||||
|
|
||||||
blk(out, datap, addr, size, zeros[:])
|
blk(out, ctxt.datap, addr, size, zeros[:])
|
||||||
|
|
||||||
/* again for printing */
|
/* again for printing */
|
||||||
if !*flagA {
|
if !*flagA {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
syms := datap
|
syms := ctxt.datap
|
||||||
for i, sym := range syms {
|
for i, sym := range syms {
|
||||||
if sym.Value >= addr {
|
if sym.Value >= addr {
|
||||||
syms = syms[i:]
|
syms = syms[i:]
|
||||||
@ -1277,10 +1277,6 @@ func makeRelroForSharedLib(target *Link, data *[sym.SXREF][]*sym.Symbol) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// datap is a collection of reachable data symbols in address order.
|
|
||||||
// Generated by dodata.
|
|
||||||
var datap []*sym.Symbol
|
|
||||||
|
|
||||||
func (ctxt *Link) dodata() {
|
func (ctxt *Link) dodata() {
|
||||||
// Give zeros sized symbols space if necessary.
|
// Give zeros sized symbols space if necessary.
|
||||||
fixZeroSizedSymbols(ctxt)
|
fixZeroSizedSymbols(ctxt)
|
||||||
@ -1798,7 +1794,7 @@ func (ctxt *Link) dodata() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for symn := sym.SELFRXSECT; symn < sym.SXREF; symn++ {
|
for symn := sym.SELFRXSECT; symn < sym.SXREF; symn++ {
|
||||||
datap = append(datap, data[symn]...)
|
ctxt.datap = append(ctxt.datap, data[symn]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
dwarfGenerateDebugSyms(ctxt)
|
dwarfGenerateDebugSyms(ctxt)
|
||||||
@ -2344,7 +2340,7 @@ func (ctxt *Link) address() []*sym.Segment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, s := range datap {
|
for _, s := range ctxt.datap {
|
||||||
if s.Sect != nil {
|
if s.Sect != nil {
|
||||||
s.Value += int64(s.Sect.Vaddr)
|
s.Value += int64(s.Sect.Vaddr)
|
||||||
}
|
}
|
||||||
|
@ -1415,18 +1415,18 @@ func Elfemitreloc(ctxt *Link) {
|
|||||||
if sect.Name == ".text" {
|
if sect.Name == ".text" {
|
||||||
elfrelocsect(ctxt, sect, ctxt.Textp)
|
elfrelocsect(ctxt, sect, ctxt.Textp)
|
||||||
} else {
|
} else {
|
||||||
elfrelocsect(ctxt, sect, datap)
|
elfrelocsect(ctxt, sect, ctxt.datap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, sect := range Segrodata.Sections {
|
for _, sect := range Segrodata.Sections {
|
||||||
elfrelocsect(ctxt, sect, datap)
|
elfrelocsect(ctxt, sect, ctxt.datap)
|
||||||
}
|
}
|
||||||
for _, sect := range Segrelrodata.Sections {
|
for _, sect := range Segrelrodata.Sections {
|
||||||
elfrelocsect(ctxt, sect, datap)
|
elfrelocsect(ctxt, sect, ctxt.datap)
|
||||||
}
|
}
|
||||||
for _, sect := range Segdata.Sections {
|
for _, sect := range Segdata.Sections {
|
||||||
elfrelocsect(ctxt, sect, datap)
|
elfrelocsect(ctxt, sect, ctxt.datap)
|
||||||
}
|
}
|
||||||
for _, sect := range Segdwarf.Sections {
|
for _, sect := range Segdwarf.Sections {
|
||||||
elfrelocsect(ctxt, sect, dwarfp)
|
elfrelocsect(ctxt, sect, dwarfp)
|
||||||
|
@ -2605,7 +2605,7 @@ func (ctxt *Link) undef() {
|
|||||||
for _, s := range ctxt.Textp {
|
for _, s := range ctxt.Textp {
|
||||||
undefsym(ctxt, s)
|
undefsym(ctxt, s)
|
||||||
}
|
}
|
||||||
for _, s := range datap {
|
for _, s := range ctxt.datap {
|
||||||
undefsym(ctxt, s)
|
undefsym(ctxt, s)
|
||||||
}
|
}
|
||||||
if nerrors > 0 {
|
if nerrors > 0 {
|
||||||
|
@ -91,6 +91,8 @@ type Link struct {
|
|||||||
|
|
||||||
cgo_export_static map[string]bool
|
cgo_export_static map[string]bool
|
||||||
cgo_export_dynamic map[string]bool
|
cgo_export_dynamic map[string]bool
|
||||||
|
|
||||||
|
datap []*sym.Symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
type cgodata struct {
|
type cgodata struct {
|
||||||
|
@ -1060,10 +1060,10 @@ func Machoemitreloc(ctxt *Link) {
|
|||||||
|
|
||||||
machorelocsect(ctxt, Segtext.Sections[0], ctxt.Textp)
|
machorelocsect(ctxt, Segtext.Sections[0], ctxt.Textp)
|
||||||
for _, sect := range Segtext.Sections[1:] {
|
for _, sect := range Segtext.Sections[1:] {
|
||||||
machorelocsect(ctxt, sect, datap)
|
machorelocsect(ctxt, sect, ctxt.datap)
|
||||||
}
|
}
|
||||||
for _, sect := range Segdata.Sections {
|
for _, sect := range Segdata.Sections {
|
||||||
machorelocsect(ctxt, sect, datap)
|
machorelocsect(ctxt, sect, ctxt.datap)
|
||||||
}
|
}
|
||||||
for _, sect := range Segdwarf.Sections {
|
for _, sect := range Segdwarf.Sections {
|
||||||
machorelocsect(ctxt, sect, dwarfp)
|
machorelocsect(ctxt, sect, dwarfp)
|
||||||
|
@ -543,8 +543,8 @@ func (f *peFile) emitRelocations(ctxt *Link) {
|
|||||||
syms []*sym.Symbol
|
syms []*sym.Symbol
|
||||||
}{
|
}{
|
||||||
{f.textSect, &Segtext, ctxt.Textp},
|
{f.textSect, &Segtext, ctxt.Textp},
|
||||||
{f.rdataSect, &Segrodata, datap},
|
{f.rdataSect, &Segrodata, ctxt.datap},
|
||||||
{f.dataSect, &Segdata, datap},
|
{f.dataSect, &Segdata, ctxt.datap},
|
||||||
}
|
}
|
||||||
for _, s := range sects {
|
for _, s := range sects {
|
||||||
s.peSect.emitRelocations(ctxt.Out, func() int {
|
s.peSect.emitRelocations(ctxt.Out, func() int {
|
||||||
@ -1434,7 +1434,7 @@ func addPEBaseReloc(ctxt *Link) {
|
|||||||
for _, s := range ctxt.Textp {
|
for _, s := range ctxt.Textp {
|
||||||
addPEBaseRelocSym(ctxt, s, &rt)
|
addPEBaseRelocSym(ctxt, s, &rt)
|
||||||
}
|
}
|
||||||
for _, s := range datap {
|
for _, s := range ctxt.datap {
|
||||||
addPEBaseRelocSym(ctxt, s, &rt)
|
addPEBaseRelocSym(ctxt, s, &rt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1630,7 +1630,7 @@ func (f *xcoffFile) emitRelocations(ctxt *Link, fileoff int64) {
|
|||||||
if sect.Name == ".text" {
|
if sect.Name == ".text" {
|
||||||
n += relocsect(sect, ctxt.Textp, 0)
|
n += relocsect(sect, ctxt.Textp, 0)
|
||||||
} else {
|
} else {
|
||||||
n += relocsect(sect, datap, 0)
|
n += relocsect(sect, ctxt.datap, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user