mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[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:
parent
bf3aa8741b
commit
4d03b6543f
3 changed files with 60 additions and 41 deletions
|
|
@ -428,42 +428,49 @@ func (ctxt *Link) domacho() {
|
|||
}
|
||||
|
||||
// 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
|
||||
s.Attr |= sym.AttrReachable
|
||||
s.AddUint8(' ')
|
||||
s.AddUint8('\x00')
|
||||
sb.SetType(sym.SMACHOSYMSTR)
|
||||
sb.SetReachable(true)
|
||||
sb.AddUint8(' ')
|
||||
sb.AddUint8('\x00')
|
||||
|
||||
s = ctxt.Syms.Lookup(".machosymtab", 0)
|
||||
s.Type = sym.SMACHOSYMTAB
|
||||
s.Attr |= sym.AttrReachable
|
||||
s = ctxt.loader.LookupOrCreateSym(".machosymtab", 0)
|
||||
sb = ctxt.loader.MakeSymbolUpdater(s)
|
||||
sb.SetType(sym.SMACHOSYMTAB)
|
||||
sb.SetReachable(true)
|
||||
|
||||
if ctxt.LinkMode != LinkExternal {
|
||||
s := ctxt.Syms.Lookup(".plt", 0) // will be __symbol_stub
|
||||
s.Type = sym.SMACHOPLT
|
||||
s.Attr |= sym.AttrReachable
|
||||
if ctxt.IsInternal() {
|
||||
s = ctxt.loader.LookupOrCreateSym(".plt", 0) // will be __symbol_stub
|
||||
sb = ctxt.loader.MakeSymbolUpdater(s)
|
||||
sb.SetType(sym.SMACHOPLT)
|
||||
sb.SetReachable(true)
|
||||
|
||||
s = ctxt.Syms.Lookup(".got", 0) // will be __nl_symbol_ptr
|
||||
s.Type = sym.SMACHOGOT
|
||||
s.Attr |= sym.AttrReachable
|
||||
s.Align = 4
|
||||
s = ctxt.loader.LookupOrCreateSym(".got", 0) // will be __nl_symbol_ptr
|
||||
sb = ctxt.loader.MakeSymbolUpdater(s)
|
||||
sb.SetType(sym.SMACHOGOT)
|
||||
sb.SetReachable(true)
|
||||
sb.SetAlign(4)
|
||||
|
||||
s = ctxt.Syms.Lookup(".linkedit.plt", 0) // indirect table for .plt
|
||||
s.Type = sym.SMACHOINDIRECTPLT
|
||||
s.Attr |= sym.AttrReachable
|
||||
s = ctxt.loader.LookupOrCreateSym(".linkedit.plt", 0) // indirect table for .plt
|
||||
sb = ctxt.loader.MakeSymbolUpdater(s)
|
||||
sb.SetType(sym.SMACHOINDIRECTPLT)
|
||||
sb.SetReachable(true)
|
||||
|
||||
s = ctxt.Syms.Lookup(".linkedit.got", 0) // indirect table for .got
|
||||
s.Type = sym.SMACHOINDIRECTGOT
|
||||
s.Attr |= sym.AttrReachable
|
||||
s = ctxt.loader.LookupOrCreateSym(".linkedit.got", 0) // indirect table for .got
|
||||
sb = ctxt.loader.MakeSymbolUpdater(s)
|
||||
sb.SetType(sym.SMACHOINDIRECTGOT)
|
||||
sb.SetReachable(true)
|
||||
}
|
||||
|
||||
// Add a dummy symbol that will become the __asm marker section.
|
||||
if ctxt.LinkMode == LinkExternal {
|
||||
s := ctxt.Syms.Lookup(".llvmasm", 0)
|
||||
s.Type = sym.SMACHO
|
||||
s.Attr |= sym.AttrReachable
|
||||
s.AddUint8(0)
|
||||
if ctxt.IsExternal() {
|
||||
s = ctxt.loader.LookupOrCreateSym(".llvmasm", 0)
|
||||
sb = ctxt.loader.MakeSymbolUpdater(s)
|
||||
sb.SetType(sym.SMACHO)
|
||||
sb.SetReachable(true)
|
||||
sb.AddUint8(0)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -245,33 +245,41 @@ func Main(arch *sys.Arch, theArch Arch) {
|
|||
bench.Start("dwarfGenerateDebugInfo")
|
||||
dwarfGenerateDebugInfo(ctxt)
|
||||
|
||||
bench.Start("loadlibfull")
|
||||
ctxt.loadlibfull() // XXX do it here for now
|
||||
|
||||
bench.Start("mangleTypeSym")
|
||||
ctxt.mangleTypeSym()
|
||||
bench.Start("callgraph")
|
||||
ctxt.callgraph()
|
||||
|
||||
bench.Start("doelf")
|
||||
ctxt.doelf()
|
||||
if ctxt.HeadType == objabi.Hdarwin {
|
||||
bench.Start("domacho")
|
||||
ctxt.domacho()
|
||||
}
|
||||
bench.Start("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")
|
||||
ctxt.dope()
|
||||
bench.Start("windynrelocsyms")
|
||||
ctxt.windynrelocsyms()
|
||||
}
|
||||
if ctxt.HeadType == objabi.Haix {
|
||||
if ctxt.IsAIX() {
|
||||
bench.Start("doxcoff")
|
||||
ctxt.doxcoff()
|
||||
}
|
||||
|
||||
bench.Start("mangleTypeSym")
|
||||
ctxt.mangleTypeSym()
|
||||
|
||||
bench.Start("addexport")
|
||||
ctxt.addexport()
|
||||
bench.Start("Gentext")
|
||||
|
|
|
|||
|
|
@ -133,8 +133,12 @@ func (sb *SymbolBuilder) Reachable() bool {
|
|||
return sb.l.AttrReachable(sb.symIdx)
|
||||
}
|
||||
|
||||
func (sb *SymbolBuilder) SetReachable(v bool) {
|
||||
sb.l.SetAttrReachable(sb.symIdx, v)
|
||||
}
|
||||
|
||||
func (sb *SymbolBuilder) setReachable() {
|
||||
sb.l.SetAttrReachable(sb.symIdx, true)
|
||||
sb.SetReachable(true)
|
||||
}
|
||||
|
||||
func (sb *SymbolBuilder) ReadOnly() bool {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue