]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.link] cmd/link: convert domacho to new style
authorCherry Zhang <cherryyz@google.com>
Fri, 6 Mar 2020 02:22:06 +0000 (21:22 -0500)
committerCherry Zhang <cherryyz@google.com>
Fri, 6 Mar 2020 18:49:09 +0000 (18:49 +0000)
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>
src/cmd/link/internal/ld/macho.go
src/cmd/link/internal/ld/main.go
src/cmd/link/internal/loader/symbolbuilder.go

index e50eddd96c55e8a319bd68f4e8f18c7a1399d59f..3f45cc029abf8c63be756aa2a5b1bd60a7a0991e 100644 (file)
@@ -428,42 +428,49 @@ func (ctxt *Link) domacho() {
        }
 
        // empirically, string table must begin with " \x00".
-       s := ctxt.Syms.Lookup(".machosymstr", 0)
-
-       s.Type = sym.SMACHOSYMSTR
-       s.Attr |= sym.AttrReachable
-       s.AddUint8(' ')
-       s.AddUint8('\x00')
-
-       s = ctxt.Syms.Lookup(".machosymtab", 0)
-       s.Type = sym.SMACHOSYMTAB
-       s.Attr |= sym.AttrReachable
-
-       if ctxt.LinkMode != LinkExternal {
-               s := ctxt.Syms.Lookup(".plt", 0) // will be __symbol_stub
-               s.Type = sym.SMACHOPLT
-               s.Attr |= sym.AttrReachable
-
-               s = ctxt.Syms.Lookup(".got", 0) // will be __nl_symbol_ptr
-               s.Type = sym.SMACHOGOT
-               s.Attr |= sym.AttrReachable
-               s.Align = 4
-
-               s = ctxt.Syms.Lookup(".linkedit.plt", 0) // indirect table for .plt
-               s.Type = sym.SMACHOINDIRECTPLT
-               s.Attr |= sym.AttrReachable
-
-               s = ctxt.Syms.Lookup(".linkedit.got", 0) // indirect table for .got
-               s.Type = sym.SMACHOINDIRECTGOT
-               s.Attr |= sym.AttrReachable
+       s := ctxt.loader.LookupOrCreateSym(".machosymstr", 0)
+       sb := ctxt.loader.MakeSymbolUpdater(s)
+
+       sb.SetType(sym.SMACHOSYMSTR)
+       sb.SetReachable(true)
+       sb.AddUint8(' ')
+       sb.AddUint8('\x00')
+
+       s = ctxt.loader.LookupOrCreateSym(".machosymtab", 0)
+       sb = ctxt.loader.MakeSymbolUpdater(s)
+       sb.SetType(sym.SMACHOSYMTAB)
+       sb.SetReachable(true)
+
+       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.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.loader.LookupOrCreateSym(".linkedit.plt", 0) // indirect table for .plt
+               sb = ctxt.loader.MakeSymbolUpdater(s)
+               sb.SetType(sym.SMACHOINDIRECTPLT)
+               sb.SetReachable(true)
+
+               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)
        }
 }
 
index ef65e786f5901b5e867210a1dcc1f85657673d67..6964ea59ff4fbed1f41ced1ca8de6d9c4ede99ec 100644 (file)
@@ -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("dostkcheck")
+       ctxt.dostkcheck()
+
+       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
        }
-       bench.Start("dostkcheck")
-       ctxt.dostkcheck()
-       if ctxt.HeadType == objabi.Hwindows {
+       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")
index 94176498f86fe2f0fcfff4d7e2eac6393edc36a8..2560198aa68c0de0c21b7ac81849a157d5ef2d01 100644 (file)
@@ -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 {