Home | History | Annotate | Download | only in ld

Lines Matching refs:ctxt

83 func trampoline(ctxt *Link, s *sym.Symbol) {
104 Thearch.Trampoline(ctxt, r, s)
110 func relocsym(ctxt *Link, s *sym.Symbol) {
132 if ctxt.BuildMode == BuildModeShared {
161 if ctxt.HeadType != objabi.Hsolaris && r.Sym != nil && r.Sym.Type == sym.SDYNIMPORT && !ctxt.DynlinkingGo() && !r.Sym.Attr.SubSymbol() {
162 if !(ctxt.Arch.Family == sys.PPC64 && ctxt.LinkMode == LinkExternal && r.Sym.Name == ".TOC.") {
163 Errorf(s, "unhandled relocation for %s (type %d (%s) rtype %d (%s))", r.Sym.Name, r.Sym.Type, r.Sym.Type, r.Type, sym.RelocName(ctxt.Arch, r.Type))
171 if ctxt.Arch.Family == sys.S390X {
190 o = int64(ctxt.Arch.ByteOrder.Uint16(s.P[off:]))
192 o = int64(ctxt.Arch.ByteOrder.Uint32(s.P[off:]))
194 o = int64(ctxt.Arch.ByteOrder.Uint64(s.P[off:]))
196 if !Thearch.Archreloc(ctxt, r, s, &o) {
197 Errorf(s, "unknown reloc to %v: %d (%s)", r.Sym.Name, r.Type, sym.RelocName(ctxt.Arch, r.Type))
200 isAndroidX86 := objabi.GOOS == "android" && (ctxt.Arch.InFamily(sys.AMD64, sys.I386))
202 if ctxt.LinkMode == LinkExternal && ctxt.IsELF && !isAndroidX86 {
205 r.Sym = ctxt.Tlsg
210 if ctxt.Arch.Family != sys.AMD64 {
216 if ctxt.IsELF && ctxt.Arch.Family == sys.ARM {
225 } else if ctxt.IsELF || ctxt.HeadType == objabi.Hplan9 || ctxt.HeadType == objabi.Hdarwin || isAndroidX86 {
226 o = int64(ctxt.Tlsoffset) + r.Add
227 } else if ctxt.HeadType == objabi.Hwindows {
230 log.Fatalf("unexpected R_TLS_LE relocation for %v", ctxt.HeadType)
233 isAndroidX86 := objabi.GOOS == "android" && (ctxt.Arch.InFamily(sys.AMD64, sys.I386))
235 if ctxt.LinkMode == LinkExternal && ctxt.IsELF && !isAndroidX86 {
238 r.Sym = ctxt.Tlsg
243 if ctxt.Arch.Family != sys.AMD64 {
248 if ctxt.BuildMode == BuildModePIE && ctxt.IsELF {
252 log.Fatalf("internal linking of TLS IE not supported on %v", ctxt.Arch.Family)
255 o = int64(ctxt.Tlsoffset)
256 // TODO: o += r.Add when ctxt.Arch.Family != sys.AMD64?
263 if ctxt.LinkMode == LinkExternal && r.Sym.Type != sym.SCONST {
281 if ctxt.IsELF {
282 if ctxt.Arch.Family == sys.AMD64 {
285 } else if ctxt.HeadType == objabi.Hdarwin {
292 if ctxt.Arch.Family == sys.ARM64 && rs.Dynid < 0 {
295 if ctxt.Arch.Family != sys.ARM64 {
299 } else if ctxt.HeadType == objabi.Hwindows {
302 Errorf(s, "unhandled pcrel relocation to %s on %v", rs.Name, ctxt.HeadType)
315 if int32(o) < 0 && ctxt.Arch.PtrSize > 4 && siz == 4 {
324 if ctxt.LinkMode == LinkExternal {
332 if ctxt.HeadType == objabi.Hdarwin {
341 if ctxt.HeadType != objabi.Hwindows {
345 r.Xsym = ctxt.Syms.ROLookup(r.Sym.Sect.Name, 0)
349 if ctxt.IsELF && ctxt.Arch.Family == sys.AMD64 {
377 if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin && r.Sym != nil && r.Sym.Type != sym.SCONST {
389 if ctxt.LinkMode == LinkExternal && r.Sym != nil && r.Sym.Type != sym.SCONST && (r.Sym.Sect != s.Sect || r.Type == objabi.R_GOTPCREL) {
408 if ctxt.IsELF {
409 if ctxt.Arch.Family == sys.AMD64 {
412 } else if ctxt.HeadType == objabi.Hdarwin {
418 } else if ctxt.Arch.Family == sys.ARM {
424 } else if ctxt.HeadType == objabi.Hwindows && ctxt.Arch.Family == sys.AMD64 { // only amd64 needs PCREL
429 Errorf(s, "unhandled pcrel relocation to %s on %v", rs.Name, ctxt.HeadType)
446 o = Thearch.Archrelocvariant(ctxt, r, s, o)
454 fmt.Printf("relocate %s %#x (%#x+%#x, size %d) => %s %#x +%#x [type %d (%s)/%d, %x]\n", s.Name, s.Value+int64(off), s.Value, r.Off, r.Siz, nam, Symaddr(r.Sym), r.Add, r.Type, sym.RelocName(ctxt.Arch, r.Type), r.Variant, o)
469 ctxt.Arch.ByteOrder.PutUint16(s.P[off:], uint16(i16))
482 ctxt.Arch.ByteOrder.PutUint32(s.P[off:], uint32(fl))
484 ctxt.Arch.ByteOrder.PutUint64(s.P[off:], uint64(o))
489 func (ctxt *Link) reloc() {
490 if ctxt.Debugvlog != 0 {
491 ctxt.Logf("%5.2f reloc\n", Cputime())
494 for _, s := range ctxt.Textp {
495 relocsym(ctxt, s)
498 relocsym(ctxt, s)
501 relocsym(ctxt, s)
505 func windynrelocsym(ctxt *Link, s *sym.Symbol) {
506 rel := ctxt.Syms.Lookup(".rel", 0)
528 if ctxt.Arch.Family == sys.I386 {
531 rel.AddAddr(ctxt.Arch, targ)
548 func dynrelocsym(ctxt *Link, s *sym.Symbol) {
549 if ctxt.HeadType == objabi.Hwindows {
550 if ctxt.LinkMode == LinkInternal {
551 windynrelocsym(ctxt, s)
558 if ctxt.BuildMode == BuildModePIE && ctxt.LinkMode == LinkInternal {
562 Thearch.Adddynrel(ctxt, s, r)
569 if !Thearch.Adddynrel(ctxt, s, r) {
570 Errorf(s, "unsupported dynamic relocation for symbol %s (type=%d (%s) stype=%d (%s))", r.Sym.Name, r.Type, sym.RelocName(ctxt.Arch, r.Type), r.Sym.Type, r.Sym.Type)
576 func dynreloc(ctxt *Link, data *[sym.SXREF][]*sym.Symbol) {
579 if *FlagD && ctxt.HeadType != objabi.Hwindows {
582 if ctxt.Debugvlog != 0 {
583 ctxt.Logf("%5.2f dynreloc\n", Cputime())
586 for _, s := range ctxt.Textp {
587 dynrelocsym(ctxt, s)
591 dynrelocsym(ctxt, s)
594 if ctxt.IsELF {
595 elfdynhash(ctxt)
599 func Codeblk(ctxt *Link, addr int64, size int64) {
600 CodeblkPad(ctxt, addr, size, zeros[:])
602 func CodeblkPad(ctxt *Link, addr int64, size int64, pad []byte) {
604 ctxt.Logf("codeblk [%#x,%#x) at offset %#x\n", addr, addr+size, ctxt.Out.Offset())
607 blk(ctxt, ctxt.Textp, addr, size, pad)
614 syms := ctxt.Textp
636 ctxt.Logf("%-20s %.8x|", "_", uint64(addr))
638 ctxt.Logf(" %.2x", 0)
640 ctxt.Logf("\n")
643 ctxt.Logf("%.6x\t%-20s\n", uint64(addr), s.Name)
647 ctxt.Logf("%.6x\t% x\n", uint64(addr), q[:16])
653 ctxt.Logf("%.6x\t% x\n", uint64(addr), q)
659 ctxt.Logf("%-20s %.8x|", "_", uint64(addr))
661 ctxt.Logf(" %.2x", 0)
666 func blk(ctxt *Link, syms []*sym.Symbol, addr, size int64, pad []byte) {
687 ctxt.Out.WriteStringPad("", int(s.Value-addr), pad)
690 ctxt.Out.Write(s.P)
693 ctxt.Out.WriteStringPad("", int(s.Value+s.Size-addr), pad)
706 ctxt.Out.WriteStringPad("", int(eaddr-addr), pad)
708 ctxt.Out.Flush()
711 func Datblk(ctxt *Link, addr int64, size int64) {
713 ctxt.Logf("datblk [%#x,%#x) at offset %#x\n", addr, addr+size, ctxt.Out.Offset())
716 blk(ctxt, datap, addr, size, zeros[:])
737 ctxt.Logf("\t%.8x| 00 ...\n", uint64(addr))
741 ctxt.Logf("%s\n\t%.8x|", sym.Name, uint64(addr))
744 ctxt.Logf("\n\t%.8x|", uint64(addr)+uint64(i))
746 ctxt.Logf(" %.2x", b)
751 ctxt.Logf(" %.2x", 0)
753 ctxt.Logf("\n")
755 if ctxt.LinkMode != LinkExternal {
772 ctxt.Logf("\treloc %.8x/%d %s %s+%#x [%#x]\n", uint(sym.Value+int64(r.Off)), r.Siz, typ, rsname, r.Add, r.Sym.Value+r.Add)
777 ctxt.Logf("\t%.8x| 00 ...\n", uint(addr))
779 ctxt.Logf("\t%.8x|\n", uint(eaddr))
782 func Dwarfblk(ctxt *Link, addr int64, size int64) {
784 ctxt.Logf("dwarfblk [%#x,%#x) at offset %#x\n", addr, addr+size, ctxt.Out.Offset())
787 blk(ctxt, dwarfp, addr, size, zeros[:])
797 func addstrdata1(ctxt *Link, arg string) {
804 if ctxt.BuildMode == BuildModePlugin && pkg == "main" {
816 func addstrdata(ctxt *Link, name, value string) {
817 s := ctxt.Syms.ROLookup(name, 0)
831 sp := ctxt.Syms.Lookup(p, 0)
840 s.AddAddr(ctxt.Arch, sp)
841 s.AddUint(ctxt.Arch, uint64(len(value)))
851 func (ctxt *Link) dostrdata() {
853 addstrdata(ctxt, name, strdata[name])
874 func addgostring(ctxt *Link, s *sym.Symbol, symname, str string) {
875 sdata := ctxt.Syms.Lookup(symname, 0)
884 s.AddAddr(ctxt.Arch, sdata)
885 s.AddUint(ctxt.Arch, uint64(len(str)))
888 func addinitarrdata(ctxt *Link, s *sym.Symbol) {
890 sp := ctxt.Syms.Lookup(p, 0)
894 sp.AddAddr(ctxt.Arch, s)
897 func dosymtype(ctxt *Link) {
898 switch ctxt.BuildMode {
900 for _, s := range ctxt.Syms.Allsym {
904 addinitarrdata(ctxt, s)
937 ctxt *Link
942 func (p *GCProg) Init(ctxt *Link, name string) {
943 p.ctxt = ctxt
944 p.sym = ctxt.Syms.Lookup(name, 0)
945 p.w.Init(p.writeByte(ctxt))
952 func (p *GCProg) writeByte(ctxt *Link) func(x byte) {
959 p.w.ZeroUntil(size / int64(p.ctxt.Arch.PtrSize))
982 ptrsize := int64(p.ctxt.Arch.PtrSize)
983 nptr := decodetypePtrdata(p.ctxt.Arch, typ) / ptrsize
989 if decodetypeUsegcprog(p.ctxt.Arch, typ) == 0 {
991 mask := decodetypeGcmask(p.ctxt, typ)
1001 prog := decodetypeGcprog(p.ctxt, typ)
1030 func checkdatsize(ctxt *Link, datsize int64, symn sym.SymKind) {
1040 func (ctxt *Link) dodata() {
1041 if ctxt.Debugvlog != 0 {
1042 ctxt.Logf("%5.2f dodata\n", Cputime())
1045 if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin {
1063 bss := ctxt.Syms.Lookup("runtime.bss", 0)
1067 ctxt.Syms.Lookup("runtime.ebss", 0).Attr.Set(sym.AttrSpecial, false)
1069 data := ctxt.Syms.Lookup("runtime.data", 0)
1073 ctxt.Syms.Lookup("runtime.edata", 0).Attr.Set(sym.AttrSpecial, false)
1075 types := ctxt.Syms.Lookup("runtime.types", 0)
1080 etypes := ctxt.Syms.Lookup("runtime.etypes", 0)
1087 for _, s := range ctxt.Syms.Allsym {
1103 if ctxt.HeadType == objabi.Hdarwin {
1104 machosymorder(ctxt)
1106 dynreloc(ctxt, &data)
1108 if ctxt.UseRelro() {
1161 data[symn], dataMaxAlign[symn] = dodataSect(ctxt, symn, data[symn])
1182 sect := addsection(ctxt.Arch, &Segdata, s.Name, 06)
1192 checkdatsize(ctxt, datsize, symn)
1197 sect := addsection(ctxt.Arch, &Segdata, ".got", 06)
1209 toc = ctxt.Syms.ROLookup(".TOC.", int(s.Version))
1221 checkdatsize(ctxt, datsize, sym.SELFGOT)
1226 sect := addsection(ctxt.Arch, &Segdata, ".noptrdata", 06)
1230 ctxt.Syms.Lookup("runtime.noptrdata", 0).Sect = sect
1231 ctxt.Syms.Lookup("runtime.enoptrdata", 0).Sect = sect
1239 checkdatsize(ctxt, datsize, sym.SNOPTRDATA)
1242 hasinitarr := ctxt.linkShared
1245 switch ctxt.BuildMode {
1250 sect := addsection(ctxt.Arch, &Segdata, ".init_array", 06)
1261 checkdatsize(ctxt, datsize, sym.SINITARR)
1265 sect = addsection(ctxt.Arch, &Segdata, ".data", 06)
1269 ctxt.Syms.Lookup("runtime.data", 0).Sect = sect
1270 ctxt.Syms.Lookup("runtime.edata", 0).Sect = sect
1272 gc.Init(ctxt, "runtime.gcdata")
1281 checkdatsize(ctxt, datsize, sym.SDATA)
1286 sect = addsection(ctxt.Arch, &Segdata, ".bss", 06)
1290 ctxt.Syms.Lookup("runtime.bss", 0).Sect = sect
1291 ctxt.Syms.Lookup("runtime.ebss", 0).Sect = sect
1293 gc.Init(ctxt, "runtime.gcbss")
1301 checkdatsize(ctxt, datsize, sym.SBSS)
1306 sect = addsection(ctxt.Arch, &Segdata, ".noptrbss", 06)
1310 ctxt.Syms.Lookup("runtime.noptrbss", 0).Sect = sect
1311 ctxt.Syms.Lookup("runtime.enoptrbss", 0).Sect = sect
1320 ctxt.Syms.Lookup("runtime.end", 0).Sect = sect
1321 checkdatsize(ctxt, datsize, sym.SNOPTRBSS)
1325 if ctxt.IsELF && (ctxt.LinkMode == LinkExternal || !*FlagD) {
1326 sect = addsection(ctxt.Arch, &Segdata, ".tbss", 06)
1327 sect.Align = int32(ctxt.Arch.PtrSize)
1338 checkdatsize(ctxt, datsize, sym.STLSBSS)
1356 if ctxt.IsELF && ctxt.LinkMode == LinkInternal {
1369 sect := addsection(ctxt.Arch, &Segtext, s.Name, 04)
1378 checkdatsize(ctxt, datsize, sym.SELFRXSECT)
1382 sect = addsection(ctxt.Arch, segro, ".rodata", 04)
1385 ctxt.Syms.Lookup("runtime.rodata", 0).Sect = sect
1386 ctxt.Syms.Lookup("runtime.erodata", 0).Sect = sect
1387 if !ctxt.UseRelro() {
1388 ctxt.Syms.Lookup("runtime.types", 0).Sect = sect
1389 ctxt.Syms.Lookup("runtime.etypes", 0).Sect = sect
1406 checkdatsize(ctxt, datsize, symn)
1412 sect = addsection(ctxt.Arch, segro, s.Name, 04)
1422 checkdatsize(ctxt, datsize, sym.SELFROSECT)
1425 sect = addsection(ctxt.Arch, segro, s.Name, 04)
1435 checkdatsize(ctxt, datsize, sym.SMACHOPLT)
1448 return addsection(ctxt.Arch, segro, suffix, 04)
1451 if ctxt.UseRelro() {
1454 if ctxt.LinkMode == LinkExternal {
1463 return addsection(ctxt.Arch, seg, ".data.rel.ro"+suffix, 06)
1469 ctxt.Syms.Lookup("runtime.types", 0).Sect = sect
1470 ctxt.Syms.Lookup("runtime.etypes", 0).Sect = sect
1491 checkdatsize(ctxt, datsize, symn)
1502 typelink := ctxt.Syms.Lookup("runtime.typelink", 0)
1506 checkdatsize(ctxt, datsize, sym.STYPELINK)
1514 ctxt.Syms.Lookup("runtime.itablink", 0).Sect = sect
1515 ctxt.Syms.Lookup("runtime.eitablink", 0).Sect = sect
1523 checkdatsize(ctxt, datsize, sym.SITABLINK)
1531 ctxt.Syms.Lookup("runtime.symtab", 0).Sect = sect
1532 ctxt.Syms.Lookup("runtime.esymtab", 0).Sect = sect
1540 checkdatsize(ctxt, datsize, sym.SSYMTAB)
1548 ctxt.Syms.Lookup("runtime.pclntab", 0).Sect = sect
1549 ctxt.Syms.Lookup("runtime.epclntab", 0).Sect = sect
1557 checkdatsize(ctxt, datsize, sym.SRODATA)
1569 dwarfgeneratedebugsyms(ctxt)
1578 sect = addsection(ctxt.Arch, &Segdwarf, s.Name, 04)
1588 checkdatsize(ctxt, datsize, sym.SDWARFSECT)
1595 sect = addsection(ctxt.Arch, &Segdwarf, ".debug_info", 04)
1597 sect = addsection(ctxt.Arch, &Segdwarf, ".debug_ranges", 04)
1599 sect = addsection(ctxt.Arch, &Segdwarf, ".debug_loc", 04)
1619 checkdatsize(ctxt, datsize, curType)
1647 func dodataSect(ctxt *Link, symn sym.SymKind, syms []*sym.Symbol) (result []*sym.Symbol, maxAlign int32) {
1648 if ctxt.HeadType == objabi.Hdarwin {
1679 if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin {
1726 if ctxt.IsELF && symn == sym.SELFROSECT {
1754 rel.Align = int32(ctxt.Arch.RegSize)
1755 plt.Align = int32(ctxt.Arch.RegSize)
1767 func (ctxt *Link) textbuildid() {
1768 if ctxt.IsELF || ctxt.BuildMode == BuildModePlugin || *flagBuildid == "" {
1772 s := ctxt.Syms.Lookup("go.buildid", 0)
1781 ctxt.Textp = append(ctxt.Textp, nil)
1782 copy(ctxt.Textp[1:], ctxt.Textp)
1783 ctxt.Textp[0] = s
1787 func (ctxt *Link) textaddress() {
1788 addsection(ctxt.Arch, &Segtext, ".text", 05)
1797 text := ctxt.Syms.Lookup("runtime.text", 0)
1800 if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin {
1801 etext := ctxt.Syms.Lookup("runtime.etext", 0)
1804 ctxt.Textp = append(ctxt.Textp, etext, nil)
1805 copy(ctxt.Textp[1:], ctxt.Textp)
1806 ctxt.Textp[0] = text
1813 for _, s := range ctxt.Textp {
1814 sect, n, va = assignAddress(ctxt, sect, n, s, va, false)
1816 trampoline(ctxt, s) // resolve jumps, may add trampolines if jump too far
1819 for ; ntramps < len(ctxt.tramps); ntramps++ {
1820 tramp := ctxt.tramps[ntramps]
1821 sect, n, va = assignAddress(ctxt, sect, n, tramp, va, true)
1826 ctxt.Syms.Lookup("runtime.etext", 0).Sect = sect
1830 newtextp := make([]*sym.Symbol, 0, len(ctxt.Textp)+ntramps)
1832 for _, s := range ctxt.Textp {
1833 for ; i < ntramps && ctxt.tramps[i].Value < s.Value; i++ {
1834 newtextp = append(newtextp, ctxt.tramps[i])
1838 newtextp = append(newtextp, ctxt.tramps[i:ntramps]...)
1840 ctxt.Textp = newtextp
1847 func assignAddress(ctxt *Link, sect *sym.Section, n int, s *sym.Symbol, va uint64, isTramp bool) (*sym.Section, int, uint64) {
1876 if ctxt.Arch.InFamily(sys.PPC64) && s.Outer == nil && ctxt.IsELF && ctxt.LinkMode == LinkExternal && va-sect.Vaddr+funcsize+maxSizeTrampolinesPPC64(s, isTramp) > 0x1c00000 {
1882 sect = addsection(ctxt.Arch, &Segtext, ".text", 05)
1887 ctxt.Syms.Lookup(fmt.Sprintf("runtime.text.%d", n), 0).Sect = sect
1896 func (ctxt *Link) address() {
1909 if ctxt.HeadType == objabi.Hnacl {
1966 if ctxt.HeadType == objabi.Hwindows {
1969 if ctxt.HeadType == objabi.Hplan9 {
1977 if ctxt.IsELF && s.Name == ".tbss" {
1981 if i+1 < len(Segdata.Sections) && !(ctxt.IsELF && Segdata.Sections[i+1].Name == ".tbss") {
2008 if ctxt.HeadType == objabi.Hwindows {
2018 if ctxt.HeadType == objabi.Hwindows {
2028 rodata = ctxt.Syms.Lookup("runtime.rodata", 0).Sect
2029 itablink = ctxt.Syms.Lookup("runtime.itablink", 0).Sect
2030 symtab = ctxt.Syms.Lookup("runtime.symtab", 0).Sect
2031 pclntab = ctxt.Syms.Lookup("runtime.pclntab", 0).Sect
2032 types = ctxt.Syms.Lookup("runtime.types", 0).Sect
2060 if ctxt.BuildMode == BuildModeShared {
2061 s := ctxt.Syms.Lookup("go.link.abihashbytes", 0)
2062 sectSym := ctxt.Syms.Lookup(".note.go.abihash", 0)
2067 ctxt.xdefine("runtime.text", sym.STEXT, int64(text.Vaddr))
2068 ctxt.xdefine("runtime.etext", sym.STEXT, int64(lasttext.Vaddr+lasttext.Length))
2078 ctxt.xdefine(symname, sym.STEXT, int64(sect.Vaddr))
2082 ctxt.xdefine("runtime.rodata", sym.SRODATA, int64(rodata.Vaddr))
2083 ctxt.xdefine("runtime.erodata", sym.SRODATA, int64(rodata.Vaddr+rodata.Length))
2084 ctxt.xdefine("runtime.types", sym.SRODATA, int64(types.Vaddr))
2085 ctxt.xdefine("runtime.etypes", sym.SRODATA, int64(types.Vaddr+types.Length))
2086 ctxt.xdefine("runtime.itablink", sym.SRODATA, int64(itablink.Vaddr))
2087 ctxt.xdefine("runtime.eitablink", sym.SRODATA, int64(itablink.Vaddr+itablink.Length))
2089 s := ctxt.Syms.Lookup("runtime.gcdata", 0)
2091 ctxt.xdefine("runtime.egcdata", sym.SRODATA, Symaddr(s)+s.Size)
2092 ctxt.Syms.Lookup("runtime.egcdata", 0).Sect = s.Sect
2094 s = ctxt.Syms.Lookup("runtime.gcbss", 0)
2096 ctxt.xdefine("runtime.egcbss", sym.SRODATA, Symaddr(s)+s.Size)
2097 ctxt.Syms.Lookup("runtime.egcbss", 0).Sect = s.Sect
2099 ctxt.xdefine("runtime.symtab", sym.SRODATA, int64(symtab.Vaddr))
2100 ctxt.xdefine("runtime.esymtab", sym.SRODATA, int64(symtab.Vaddr+symtab.Length))
2101 ctxt.xdefine("runtime.pclntab", sym.SRODATA, int64(pclntab.Vaddr))
2102 ctxt.xdefine("runtime.epclntab", sym.SRODATA, int64(pclntab.Vaddr+pclntab.Length))
2103 ctxt.xdefine("runtime.noptrdata", sym.SNOPTRDATA, int64(noptr.Vaddr))
2104 ctxt.xdefine("runtime.enoptrdata", sym.SNOPTRDATA, int64(noptr.Vaddr+noptr.Length))
2105 ctxt.xdefine("runtime.bss", sym.SBSS, int64(bss.Vaddr))
2106 ctxt.xdefine("runtime.ebss", sym.SBSS, int64(bss.Vaddr+bss.Length))
2107 ctxt.xdefine("runtime.data", sym.SDATA, int64(data.Vaddr))
2108 ctxt.xdefine("runtime.edata", sym.SDATA, int64(data.Vaddr+data.Length))
2109 ctxt.xdefine("runtime.noptrbss", sym.SNOPTRBSS, int64(noptrbss.Vaddr))
2110 ctxt.xdefine("runtime.enoptrbss", sym.SNOPTRBSS, int64(noptrbss.Vaddr+noptrbss.Length))
2111 ctxt.xdefine("runtime.end", sym.SBSS, int64(Segdata.Vaddr+Segdata.Length))
2115 func (ctxt *Link) AddTramp(s *sym.Symbol) {
2119 ctxt.tramps = append(ctxt.tramps, s)
2120 if *FlagDebugTramp > 0 && ctxt.Debugvlog > 0 {
2121 ctxt.Logf("trampoline %s inserted\n", s)