[dev.link] cmd/link: convert domacho to new style

Change-Id: I6e009d01e490534fe1d7d0acd39746158bfcfa24
Reviewed-on: https://go-review.googlesource.com/c/go/+/222301
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
Cherry Zhang 2020-03-05 21:22:06 -05:00
parent bf3aa8741b
commit 4d03b6543f
3 changed files with 60 additions and 41 deletions

View file

@ -428,42 +428,49 @@ func (ctxt *Link) domacho() {
} }
// empirically, string table must begin with " \x00". // empirically, string table must begin with " \x00".
s := ctxt.Syms.Lookup(".machosymstr", 0) s := ctxt.loader.LookupOrCreateSym(".machosymstr", 0)
sb := ctxt.loader.MakeSymbolUpdater(s)
s.Type = sym.SMACHOSYMSTR sb.SetType(sym.SMACHOSYMSTR)
s.Attr |= sym.AttrReachable sb.SetReachable(true)
s.AddUint8(' ') sb.AddUint8(' ')
s.AddUint8('\x00') sb.AddUint8('\x00')
s = ctxt.Syms.Lookup(".machosymtab", 0) s = ctxt.loader.LookupOrCreateSym(".machosymtab", 0)
s.Type = sym.SMACHOSYMTAB sb = ctxt.loader.MakeSymbolUpdater(s)
s.Attr |= sym.AttrReachable sb.SetType(sym.SMACHOSYMTAB)
sb.SetReachable(true)
if ctxt.LinkMode != LinkExternal { if ctxt.IsInternal() {
s := ctxt.Syms.Lookup(".plt", 0) // will be __symbol_stub s = ctxt.loader.LookupOrCreateSym(".plt", 0) // will be __symbol_stub
s.Type = sym.SMACHOPLT sb = ctxt.loader.MakeSymbolUpdater(s)
s.Attr |= sym.AttrReachable sb.SetType(sym.SMACHOPLT)
sb.SetReachable(true)
s = ctxt.Syms.Lookup(".got", 0) // will be __nl_symbol_ptr s = ctxt.loader.LookupOrCreateSym(".got", 0) // will be __nl_symbol_ptr
s.Type = sym.SMACHOGOT sb = ctxt.loader.MakeSymbolUpdater(s)
s.Attr |= sym.AttrReachable sb.SetType(sym.SMACHOGOT)
s.Align = 4 sb.SetReachable(true)
sb.SetAlign(4)
s = ctxt.Syms.Lookup(".linkedit.plt", 0) // indirect table for .plt s = ctxt.loader.LookupOrCreateSym(".linkedit.plt", 0) // indirect table for .plt
s.Type = sym.SMACHOINDIRECTPLT sb = ctxt.loader.MakeSymbolUpdater(s)
s.Attr |= sym.AttrReachable sb.SetType(sym.SMACHOINDIRECTPLT)
sb.SetReachable(true)
s = ctxt.Syms.Lookup(".linkedit.got", 0) // indirect table for .got s = ctxt.loader.LookupOrCreateSym(".linkedit.got", 0) // indirect table for .got
s.Type = sym.SMACHOINDIRECTGOT sb = ctxt.loader.MakeSymbolUpdater(s)
s.Attr |= sym.AttrReachable sb.SetType(sym.SMACHOINDIRECTGOT)
sb.SetReachable(true)
} }
// Add a dummy symbol that will become the __asm marker section. // Add a dummy symbol that will become the __asm marker section.
if ctxt.LinkMode == LinkExternal { if ctxt.IsExternal() {
s := ctxt.Syms.Lookup(".llvmasm", 0) s = ctxt.loader.LookupOrCreateSym(".llvmasm", 0)
s.Type = sym.SMACHO sb = ctxt.loader.MakeSymbolUpdater(s)
s.Attr |= sym.AttrReachable sb.SetType(sym.SMACHO)
s.AddUint8(0) sb.SetReachable(true)
sb.AddUint8(0)
} }
} }

View file

@ -245,33 +245,41 @@ func Main(arch *sys.Arch, theArch Arch) {
bench.Start("dwarfGenerateDebugInfo") bench.Start("dwarfGenerateDebugInfo")
dwarfGenerateDebugInfo(ctxt) dwarfGenerateDebugInfo(ctxt)
bench.Start("loadlibfull")
ctxt.loadlibfull() // XXX do it here for now
bench.Start("mangleTypeSym")
ctxt.mangleTypeSym()
bench.Start("callgraph") bench.Start("callgraph")
ctxt.callgraph() ctxt.callgraph()
bench.Start("doelf")
ctxt.doelf()
if ctxt.HeadType == objabi.Hdarwin {
bench.Start("domacho")
ctxt.domacho()
}
bench.Start("dostkcheck") bench.Start("dostkcheck")
ctxt.dostkcheck() ctxt.dostkcheck()
if ctxt.HeadType == objabi.Hwindows {
if !ctxt.IsDarwin() {
bench.Start("loadlibfull")
ctxt.loadlibfull() // XXX do it here for now
}
if ctxt.IsELF {
bench.Start("doelf")
ctxt.doelf()
}
if ctxt.IsDarwin() {
bench.Start("domacho")
ctxt.domacho()
bench.Start("loadlibfull")
ctxt.loadlibfull() // XXX do it here for now
}
if ctxt.IsWindows() {
bench.Start("dope") bench.Start("dope")
ctxt.dope() ctxt.dope()
bench.Start("windynrelocsyms") bench.Start("windynrelocsyms")
ctxt.windynrelocsyms() ctxt.windynrelocsyms()
} }
if ctxt.HeadType == objabi.Haix { if ctxt.IsAIX() {
bench.Start("doxcoff") bench.Start("doxcoff")
ctxt.doxcoff() ctxt.doxcoff()
} }
bench.Start("mangleTypeSym")
ctxt.mangleTypeSym()
bench.Start("addexport") bench.Start("addexport")
ctxt.addexport() ctxt.addexport()
bench.Start("Gentext") bench.Start("Gentext")

View file

@ -133,8 +133,12 @@ func (sb *SymbolBuilder) Reachable() bool {
return sb.l.AttrReachable(sb.symIdx) return sb.l.AttrReachable(sb.symIdx)
} }
func (sb *SymbolBuilder) SetReachable(v bool) {
sb.l.SetAttrReachable(sb.symIdx, v)
}
func (sb *SymbolBuilder) setReachable() { func (sb *SymbolBuilder) setReachable() {
sb.l.SetAttrReachable(sb.symIdx, true) sb.SetReachable(true)
} }
func (sb *SymbolBuilder) ReadOnly() bool { func (sb *SymbolBuilder) ReadOnly() bool {