var fl int32
var o int64
- ctxt.Cursym = s
for ri := int32(0); ri < int32(len(s.R)); ri++ {
r = &s.R[ri]
r.Done = 1
// r->sym can be null when CALL $(constant) is transformed from absolute PC to relative PC call.
case obj.R_CALL, obj.R_GOTPCREL, obj.R_PCREL:
- if Linkmode == LinkExternal && r.Sym != nil && r.Sym.Type != obj.SCONST && (r.Sym.Sect != ctxt.Cursym.Sect || r.Type == obj.R_GOTPCREL) {
+ if Linkmode == LinkExternal && r.Sym != nil && r.Sym.Type != obj.SCONST && (r.Sym.Sect != s.Sect || r.Type == obj.R_GOTPCREL) {
r.Done = 0
// set up addend for eventual relocation via outer symbol.
o -= int64(r.Off) // relative to section offset, not symbol
} else if SysArch.Family == sys.ARM {
// see ../arm/asm.go:/machoreloc1
- o += Symaddr(rs) - int64(ctxt.Cursym.Value) - int64(r.Off)
+ o += Symaddr(rs) - int64(s.Value) - int64(r.Off)
} else {
o += int64(r.Siz)
}
}
switch siz {
default:
- ctxt.Cursym = s
Errorf(s, "bad reloc size %#x for %s", uint32(siz), r.Sym.Name)
fallthrough
if s.Value >= eaddr {
break
}
- ctxt.Cursym = s
if s.Value < addr {
Errorf(s, "phase error: addr=%#x but sym=%#x type=%d", addr, s.Value, s.Type)
errorexit()
for sub := sym; sub != nil; sub = sub.Sub {
sub.Value += int64(va)
}
- if sym.Size == 0 && sym.Sub != nil {
- ctxt.Cursym = sym
- }
if sym.Size < MINFUNC {
va += MINFUNC // spacing required for findfunctab
} else {
)
for _, s := range datap {
- ctxt.Cursym = s
if s.Sect != nil {
s.Value += int64(s.Sect.Vaddr)
}
}
for _, sym := range dwarfp {
- ctxt.Cursym = sym
if sym.Sect != nil {
sym.Value += int64(sym.Sect.Vaddr)
}
nfunc = 0
var last *Symbol
- for _, ctxt.Cursym = range ctxt.Textp {
- last = ctxt.Cursym
- if container(ctxt.Cursym) != 0 {
+ for _, s := range ctxt.Textp {
+ last = s
+ if container(s) != 0 {
continue
}
- pcln := ctxt.Cursym.FuncInfo
+ pcln := s.FuncInfo
if pcln == nil {
pcln = &pclntabZpcln
}
if pclntabFirstFunc == nil {
- pclntabFirstFunc = ctxt.Cursym
+ pclntabFirstFunc = s
}
funcstart := int32(len(ftab.P))
funcstart += int32(-len(ftab.P)) & (int32(SysArch.PtrSize) - 1)
- setaddr(ctxt, ftab, 8+int64(SysArch.PtrSize)+int64(nfunc)*2*int64(SysArch.PtrSize), ctxt.Cursym)
+ setaddr(ctxt, ftab, 8+int64(SysArch.PtrSize)+int64(nfunc)*2*int64(SysArch.PtrSize), s)
setuintxx(ctxt, ftab, 8+int64(SysArch.PtrSize)+int64(nfunc)*2*int64(SysArch.PtrSize)+int64(SysArch.PtrSize), uint64(funcstart), int64(SysArch.PtrSize))
// fixed size of struct, checked below
Symgrow(ctxt, ftab, int64(end))
// entry uintptr
- off = int32(setaddr(ctxt, ftab, int64(off), ctxt.Cursym))
+ off = int32(setaddr(ctxt, ftab, int64(off), s))
// name int32
- off = int32(setuint32(ctxt, ftab, int64(off), uint32(ftabaddstring(ctxt, ftab, ctxt.Cursym.Name))))
+ off = int32(setuint32(ctxt, ftab, int64(off), uint32(ftabaddstring(ctxt, ftab, s.Name))))
// args int32
// TODO: Move into funcinfo.
args := uint32(0)
- if ctxt.Cursym.FuncInfo != nil {
- args = uint32(ctxt.Cursym.FuncInfo.Args)
+ if s.FuncInfo != nil {
+ args = uint32(s.FuncInfo.Args)
}
off = int32(setuint32(ctxt, ftab, int64(off), args))
var it Pciter
for pciterinit(ctxt, &it, &pcln.Pcfile); it.done == 0; pciternext(&it) {
if it.value < 1 || it.value > int32(len(ctxt.Filesyms)) {
- Errorf(ctxt.Cursym, "bad file number in pcfile: %d not in range [1, %d]\n", it.value, len(ctxt.Filesyms))
+ Errorf(s, "bad file number in pcfile: %d not in range [1, %d]\n", it.value, len(ctxt.Filesyms))
errorexit()
}
}
}
if off != end {
- Errorf(ctxt.Cursym, "bad math in functab: funcstart=%d off=%d but end=%d (npcdata=%d nfuncdata=%d ptrsize=%d)", funcstart, off, end, len(pcln.Pcdata), len(pcln.Funcdata), SysArch.PtrSize)
+ Errorf(s, "bad math in functab: funcstart=%d off=%d but end=%d (npcdata=%d nfuncdata=%d ptrsize=%d)", funcstart, off, end, len(pcln.Pcdata), len(pcln.Funcdata), SysArch.PtrSize)
errorexit()
}