func asmb(ctxt *ld.Link) {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f asmb\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f asmb\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f codeblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f codeblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
if ld.Iself {
ld.Asmbelfsetup(ctxt)
if ld.Segrodata.Filelen > 0 {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f rodatblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segrodata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
}
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f datblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f datblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segdata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
symo := int64(0)
if ld.Debug['s'] == 0 {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f sym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f sym\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
switch ld.HEADTYPE {
default:
case obj.Hplan9:
ld.Cwrite(ld.Elfstrdat)
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f dwarf\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f dwarf\n", obj.Cputime())
}
if ld.Linkmode == ld.LinkExternal {
case obj.Hwindows:
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f dwarf\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f dwarf\n", obj.Cputime())
}
case obj.Hdarwin:
}
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f headr\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f headr\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(0)
switch ld.HEADTYPE {
default:
func asmb(ctxt *ld.Link) {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f asmb\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f asmb\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
if ld.Iself {
ld.Asmbelfsetup(ctxt)
if ld.Segrodata.Filelen > 0 {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f rodatblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segrodata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
}
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f datblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f datblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segdata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
if ld.Debug['s'] == 0 {
// TODO: rationalize
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f sym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f sym\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
switch ld.HEADTYPE {
default:
if ld.Iself {
default:
if ld.Iself {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f elfsym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f elfsym\n", obj.Cputime())
}
ld.Asmelfsym(ctxt)
ld.Cflush()
ctxt.Cursym = nil
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f header\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f header\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(0)
switch ld.HEADTYPE {
default:
func asmb(ctxt *ld.Link) {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f asmb\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f asmb\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
if ld.Iself {
ld.Asmbelfsetup(ctxt)
if ld.Segrodata.Filelen > 0 {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f rodatblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segrodata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
}
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f datblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f datblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segdata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
if ld.Debug['s'] == 0 {
// TODO: rationalize
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f sym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f sym\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
switch ld.HEADTYPE {
default:
if ld.Iself {
default:
if ld.Iself {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f elfsym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f elfsym\n", obj.Cputime())
}
ld.Asmelfsym(ctxt)
ld.Cflush()
ctxt.Cursym = nil
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f header\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f header\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(0)
switch ld.HEADTYPE {
default:
if os.IsNotExist(err) {
// It's OK if we don't have a libgcc file at all.
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "skipping libgcc file: %v\n", err)
+ fmt.Fprintf(ctxt.Bso, "skipping libgcc file: %v\n", err)
}
return
}
func (ctxt *Link) reloc() {
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "%5.2f reloc\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f reloc\n", obj.Cputime())
}
- Bso.Flush()
+ ctxt.Bso.Flush()
for _, s := range ctxt.Textp {
relocsym(ctxt, s)
return
}
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "%5.2f reloc\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f reloc\n", obj.Cputime())
}
- Bso.Flush()
+ ctxt.Bso.Flush()
for _, s := range ctxt.Textp {
dynrelocsym(ctxt, s)
}
func CodeblkPad(ctxt *Link, addr int64, size int64, pad []byte) {
if Debug['a'] != 0 {
- fmt.Fprintf(Bso, "codeblk [%#x,%#x) at offset %#x\n", addr, addr+size, Cpos())
+ fmt.Fprintf(ctxt.Bso, "codeblk [%#x,%#x) at offset %#x\n", addr, addr+size, Cpos())
}
blkSlice(ctxt, ctxt.Textp, addr, size, pad)
}
if addr < sym.Value {
- fmt.Fprintf(Bso, "%-20s %.8x|", "_", uint64(addr))
+ fmt.Fprintf(ctxt.Bso, "%-20s %.8x|", "_", uint64(addr))
for ; addr < sym.Value; addr++ {
- fmt.Fprintf(Bso, " %.2x", 0)
+ fmt.Fprintf(ctxt.Bso, " %.2x", 0)
}
- fmt.Fprintf(Bso, "\n")
+ fmt.Fprintf(ctxt.Bso, "\n")
}
- fmt.Fprintf(Bso, "%.6x\t%-20s\n", uint64(addr), sym.Name)
+ fmt.Fprintf(ctxt.Bso, "%.6x\t%-20s\n", uint64(addr), sym.Name)
q = sym.P
for len(q) >= 16 {
- fmt.Fprintf(Bso, "%.6x\t% x\n", uint64(addr), q[:16])
+ fmt.Fprintf(ctxt.Bso, "%.6x\t% x\n", uint64(addr), q[:16])
addr += 16
q = q[16:]
}
if len(q) > 0 {
- fmt.Fprintf(Bso, "%.6x\t% x\n", uint64(addr), q)
+ fmt.Fprintf(ctxt.Bso, "%.6x\t% x\n", uint64(addr), q)
addr += int64(len(q))
}
}
if addr < eaddr {
- fmt.Fprintf(Bso, "%-20s %.8x|", "_", uint64(addr))
+ fmt.Fprintf(ctxt.Bso, "%-20s %.8x|", "_", uint64(addr))
for ; addr < eaddr; addr++ {
- fmt.Fprintf(Bso, " %.2x", 0)
+ fmt.Fprintf(ctxt.Bso, " %.2x", 0)
}
}
- Bso.Flush()
+ ctxt.Bso.Flush()
}
// blkSlice is a variant of blk that processes slices.
func Datblk(ctxt *Link, addr int64, size int64) {
if Debug['a'] != 0 {
- fmt.Fprintf(Bso, "datblk [%#x,%#x) at offset %#x\n", addr, addr+size, Cpos())
+ fmt.Fprintf(ctxt.Bso, "datblk [%#x,%#x) at offset %#x\n", addr, addr+size, Cpos())
}
blkSlice(ctxt, datap, addr, size, zeros[:])
break
}
if addr < sym.Value {
- fmt.Fprintf(Bso, "\t%.8x| 00 ...\n", uint64(addr))
+ fmt.Fprintf(ctxt.Bso, "\t%.8x| 00 ...\n", uint64(addr))
addr = sym.Value
}
- fmt.Fprintf(Bso, "%s\n\t%.8x|", sym.Name, uint64(addr))
+ fmt.Fprintf(ctxt.Bso, "%s\n\t%.8x|", sym.Name, uint64(addr))
for i, b := range sym.P {
if i > 0 && i%16 == 0 {
- fmt.Fprintf(Bso, "\n\t%.8x|", uint64(addr)+uint64(i))
+ fmt.Fprintf(ctxt.Bso, "\n\t%.8x|", uint64(addr)+uint64(i))
}
- fmt.Fprintf(Bso, " %.2x", b)
+ fmt.Fprintf(ctxt.Bso, " %.2x", b)
}
addr += int64(len(sym.P))
for ; addr < sym.Value+sym.Size; addr++ {
- fmt.Fprintf(Bso, " %.2x", 0)
+ fmt.Fprintf(ctxt.Bso, " %.2x", 0)
}
- fmt.Fprintf(Bso, "\n")
+ fmt.Fprintf(ctxt.Bso, "\n")
if Linkmode != LinkExternal {
continue
case obj.R_CALL:
typ = "call"
}
- fmt.Fprintf(Bso, "\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)
+ fmt.Fprintf(ctxt.Bso, "\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)
}
}
if addr < eaddr {
- fmt.Fprintf(Bso, "\t%.8x| 00 ...\n", uint(addr))
+ fmt.Fprintf(ctxt.Bso, "\t%.8x| 00 ...\n", uint(addr))
}
- fmt.Fprintf(Bso, "\t%.8x|\n", uint(eaddr))
+ fmt.Fprintf(ctxt.Bso, "\t%.8x|\n", uint(eaddr))
}
func Dwarfblk(ctxt *Link, addr int64, size int64) {
if Debug['a'] != 0 {
- fmt.Fprintf(Bso, "dwarfblk [%#x,%#x) at offset %#x\n", addr, addr+size, Cpos())
+ fmt.Fprintf(ctxt.Bso, "dwarfblk [%#x,%#x) at offset %#x\n", addr, addr+size, Cpos())
}
blk(ctxt, dwarfp, addr, size)
func (ctxt *Link) dodata() {
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "%5.2f dodata\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f dodata\n", obj.Cputime())
}
- Bso.Flush()
+ ctxt.Bso.Flush()
// Collect data symbols by type into data.
var data [obj.SXREF][]*Symbol
}
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "%5.2f dwarf\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f dwarf\n", obj.Cputime())
}
// Forctxt.Diagnostic messages.
// find the one we are looking for. This format is slightly documented in "ELF
// for the ARM Architecture" but mostly this is derived from reading the source
// to gold and readelf.
-func parseArmAttributes(e binary.ByteOrder, data []byte) {
+func parseArmAttributes(ctxt *Link, e binary.ByteOrder, data []byte) {
// We assume the soft-float ABI unless we see a tag indicating otherwise.
if ehdr.flags == 0x5000002 {
ehdr.flags = 0x5000202
}
if data[0] != 'A' {
- fmt.Fprintf(Bso, ".ARM.attributes has unexpected format %c\n", data[0])
+ fmt.Fprintf(ctxt.Bso, ".ARM.attributes has unexpected format %c\n", data[0])
return
}
data = data[1:]
nulIndex := bytes.IndexByte(sectiondata, 0)
if nulIndex < 0 {
- fmt.Fprintf(Bso, "corrupt .ARM.attributes (section name not NUL-terminated)\n")
+ fmt.Fprintf(ctxt.Bso, "corrupt .ARM.attributes (section name not NUL-terminated)\n")
return
}
name := string(sectiondata[:nulIndex])
}
}
if attrList.err != nil {
- fmt.Fprintf(Bso, "could not parse .ARM.attributes\n")
+ fmt.Fprintf(ctxt.Bso, "could not parse .ARM.attributes\n")
}
}
}
func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "%5.2f ldelf %s\n", obj.Cputime(), pn)
+ fmt.Fprintf(ctxt.Bso, "%5.2f ldelf %s\n", obj.Cputime(), pn)
}
ctxt.IncVersion()
if err = elfmap(elfobj, sect); err != nil {
goto bad
}
- parseArmAttributes(e, sect.base[:sect.size])
+ parseArmAttributes(ctxt, e, sect.base[:sect.size])
}
if (sect.type_ != ElfSectProgbits && sect.type_ != ElfSectNobits) || sect.flags&ElfSectFlagAlloc == 0 {
continue
func ldpe(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "%5.2f ldpe %s\n", obj.Cputime(), pn)
+ fmt.Fprintf(ctxt.Bso, "%5.2f ldpe %s\n", obj.Cputime(), pn)
}
var sect *PeSect
var (
headstring string
- // buffered output
- Bso *bufio.Writer
)
// TODO(dfc) outBuf duplicates bio.Writer
if Linkshared {
shlibname := filepath.Join(ctxt.Libdir[i], name+".shlibname")
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "searching for %s.a in %s\n", name, shlibname)
+ fmt.Fprintf(ctxt.Bso, "searching for %s.a in %s\n", name, shlibname)
}
if _, err := os.Stat(shlibname); err == nil {
addlibpath(ctxt, "internal", "internal", "", name, shlibname)
}
pname := filepath.Join(ctxt.Libdir[i], name+".a")
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "searching for %s.a in %s\n", name, pname)
+ fmt.Fprintf(ctxt.Bso, "searching for %s.a in %s\n", name, pname)
}
if _, err := os.Stat(pname); err == nil {
addlibpath(ctxt, "internal", "internal", pname, name, "")
}
if found == 0 {
- fmt.Fprintf(Bso, "warning: unable to find %s.a\n", name)
+ fmt.Fprintf(ctxt.Bso, "warning: unable to find %s.a\n", name)
}
}
iscgo = iscgo || ctxt.Library[i].Pkg == "runtime/cgo"
if ctxt.Library[i].Shlib == "" {
if Debug['v'] > 1 {
- fmt.Fprintf(Bso, "%5.2f autolib: %s (from %s)\n", obj.Cputime(), ctxt.Library[i].File, ctxt.Library[i].Objref)
+ fmt.Fprintf(ctxt.Bso, "%5.2f autolib: %s (from %s)\n", obj.Cputime(), ctxt.Library[i].File, ctxt.Library[i].Objref)
}
objfile(ctxt, ctxt.Library[i])
}
for i = 0; i < len(ctxt.Library); i++ {
if ctxt.Library[i].Shlib != "" {
if Debug['v'] > 1 {
- fmt.Fprintf(Bso, "%5.2f autolib: %s (from %s)\n", obj.Cputime(), ctxt.Library[i].Shlib, ctxt.Library[i].Objref)
+ fmt.Fprintf(ctxt.Bso, "%5.2f autolib: %s (from %s)\n", obj.Cputime(), ctxt.Library[i].Shlib, ctxt.Library[i].Objref)
}
ldshlibsyms(ctxt, ctxt.Library[i].Shlib)
}
args := hostlinkArchArgs()
args = append(args, "--print-libgcc-file-name")
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "%s %v\n", extld, args)
+ fmt.Fprintf(ctxt.Bso, "%s %v\n", extld, args)
}
out, err := exec.Command(extld, args...).Output()
if err != nil {
if Debug['v'] != 0 {
- fmt.Fprintln(Bso, "not using a libgcc file because compiler failed")
- fmt.Fprintf(Bso, "%v\n%s\n", err, out)
+ fmt.Fprintln(ctxt.Bso, "not using a libgcc file because compiler failed")
+ fmt.Fprintf(ctxt.Bso, "%v\n%s\n", err, out)
}
libgccfile = "none"
} else {
pkg := pathtoprefix(lib.Pkg)
if Debug['v'] > 1 {
- fmt.Fprintf(Bso, "%5.2f ldobj: %s (%s)\n", obj.Cputime(), lib.File, pkg)
+ fmt.Fprintf(ctxt.Bso, "%5.2f ldobj: %s (%s)\n", obj.Cputime(), lib.File, pkg)
}
- Bso.Flush()
+ ctxt.Bso.Flush()
f, err := bio.Open(lib.File)
if err != nil {
Exitf("cannot open file %s: %v", lib.File, err)
}
// archive builds a .a archive from the hostobj object files.
-func archive() {
+func (ctxt *Link) archive() {
if Buildmode != BuildmodeCArchive {
return
}
argv = append(argv, hostobjCopy()...)
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "archive: %s\n", strings.Join(argv, " "))
- Bso.Flush()
+ fmt.Fprintf(ctxt.Bso, "archive: %s\n", strings.Join(argv, " "))
+ ctxt.Bso.Flush()
}
if out, err := exec.Command(argv[0], argv[1:]...).CombinedOutput(); err != nil {
}
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "host link:")
+ fmt.Fprintf(l.Bso, "host link:")
for _, v := range argv {
- fmt.Fprintf(Bso, " %q", v)
+ fmt.Fprintf(l.Bso, " %q", v)
}
- fmt.Fprintf(Bso, "\n")
- Bso.Flush()
+ fmt.Fprintf(l.Bso, "\n")
+ l.Bso.Flush()
}
if out, err := exec.Command(argv[0], argv[1:]...).CombinedOutput(); err != nil {
Exitf("running %s failed: %v\n%s", argv[0], err, out)
} else if Debug['v'] != 0 && len(out) > 0 {
- fmt.Fprintf(Bso, "%s", out)
- Bso.Flush()
+ fmt.Fprintf(l.Bso, "%s", out)
+ l.Bso.Flush()
}
if Debug['s'] == 0 && debug_s == 0 && HEADTYPE == obj.Hdarwin {
// Otherwise, off is addressing the saved program counter.
// Something underhanded is going on. Say nothing.
if Debug['v'] != 0 || Debug['n'] != 0 {
- fmt.Fprintf(Bso, "%5.2f symsize = %d\n", obj.Cputime(), uint32(Symsize))
+ fmt.Fprintf(ctxt.Bso, "%5.2f symsize = %d\n", obj.Cputime(), uint32(Symsize))
}
- Bso.Flush()
+ ctxt.Bso.Flush()
}
func Symaddr(ctxt *Link, s *Symbol) int64 {
continue
}
if (r.Type == obj.R_CALL || r.Type == obj.R_CALLARM || r.Type == obj.R_CALLPOWER || r.Type == obj.R_CALLMIPS) && r.Sym.Type == obj.STEXT {
- fmt.Fprintf(Bso, "%s calls %s\n", s.Name, r.Sym.Name)
+ fmt.Fprintf(ctxt.Bso, "%s calls %s\n", s.Name, r.Sym.Name)
}
}
}
ftab.Size = int64(len(ftab.P))
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "%5.2f pclntab=%d bytes, funcdata total %d bytes\n", obj.Cputime(), ftab.Size, funcdata_bytes)
+ fmt.Fprintf(ctxt.Bso, "%5.2f pclntab=%d bytes, funcdata total %d bytes\n", obj.Cputime(), ftab.Size, funcdata_bytes)
}
}
)
func Ldmain() {
- Bso = bufio.NewWriter(os.Stdout)
-
ctxt := linknew(SysArch)
- ctxt.Bso = Bso
+ ctxt.Bso = bufio.NewWriter(os.Stdout)
Debug = [128]int{}
nerrors = 0
obj.Flagparse(usage)
startProfile()
- ctxt.Bso = Bso
+ ctxt.Bso = ctxt.Bso
ctxt.Debugvlog = int32(Debug['v'])
if flagShared != 0 {
if Buildmode == BuildmodeUnset {
}
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "HEADER = -H%d -T0x%x -D0x%x -R0x%x\n", HEADTYPE, uint64(INITTEXT), uint64(INITDAT), uint32(INITRND))
+ fmt.Fprintf(ctxt.Bso, "HEADER = -H%d -T0x%x -D0x%x -R0x%x\n", HEADTYPE, uint64(INITTEXT), uint64(INITDAT), uint32(INITRND))
}
- Bso.Flush()
+ ctxt.Bso.Flush()
if Buildmode == BuildmodeShared {
for i := 0; i < flag.NArg(); i++ {
Thearch.Asmb(ctxt)
ctxt.undef()
ctxt.hostlink()
- archive()
+ ctxt.archive()
if Debug['v'] != 0 {
- fmt.Fprintf(Bso, "%5.2f cpu time\n", obj.Cputime())
- fmt.Fprintf(Bso, "%d symbols\n", len(ctxt.Allsym))
- fmt.Fprintf(Bso, "%d liveness data\n", liveness)
+ fmt.Fprintf(ctxt.Bso, "%5.2f cpu time\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%d symbols\n", len(ctxt.Allsym))
+ fmt.Fprintf(ctxt.Bso, "%d liveness data\n", liveness)
}
- Bso.Flush()
+ ctxt.Bso.Flush()
errorexit()
}
func asmb(ctxt *ld.Link) {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f asmb\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f asmb\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
if ld.Iself {
ld.Asmbelfsetup(ctxt)
if ld.Segrodata.Filelen > 0 {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f rodatblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segrodata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
}
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f datblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f datblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segdata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
if ld.Debug['s'] == 0 {
// TODO: rationalize
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f sym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f sym\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
switch ld.HEADTYPE {
default:
if ld.Iself {
default:
if ld.Iself {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f elfsym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f elfsym\n", obj.Cputime())
}
ld.Asmelfsym(ctxt)
ld.Cflush()
ctxt.Cursym = nil
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f header\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f header\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(0)
switch ld.HEADTYPE {
default:
func asmb(ctxt *ld.Link) {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f asmb\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f asmb\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
if ld.Iself {
ld.Asmbelfsetup(ctxt)
if ld.Segrodata.Filelen > 0 {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f rodatblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segrodata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
}
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f datblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f datblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segdata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
if ld.Debug['s'] == 0 {
// TODO: rationalize
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f sym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f sym\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
switch ld.HEADTYPE {
default:
if ld.Iself {
default:
if ld.Iself {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f elfsym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f elfsym\n", obj.Cputime())
}
ld.Asmelfsym(ctxt)
ld.Cflush()
ctxt.Cursym = nil
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f header\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f header\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(0)
switch ld.HEADTYPE {
default:
func asmb(ctxt *ld.Link) {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f asmb\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f asmb\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
if ld.Iself {
ld.Asmbelfsetup(ctxt)
if ld.Segrodata.Filelen > 0 {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f rodatblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segrodata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
}
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f datblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f datblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segdata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
ctxt.Diag("unsupported executable format")
}
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f sym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f sym\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
symo = uint32(ld.Segdwarf.Fileoff + ld.Segdwarf.Filelen)
symo = uint32(ld.Rnd(int64(symo), int64(ld.INITRND)))
ld.Cseek(int64(symo))
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f elfsym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f elfsym\n", obj.Cputime())
}
ld.Asmelfsym(ctxt)
ld.Cflush()
ld.Cwrite(ld.Elfstrdat)
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f dwarf\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f dwarf\n", obj.Cputime())
}
if ld.Linkmode == ld.LinkExternal {
ctxt.Cursym = nil
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f header\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f header\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(0)
switch ld.HEADTYPE {
default:
func asmb(ctxt *ld.Link) {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f asmb\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f asmb\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
if ld.Iself {
ld.Asmbelfsetup(ctxt)
if ld.Segrodata.Filelen > 0 {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f rodatblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segrodata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
}
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f datblk\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f datblk\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(int64(ld.Segdata.Fileoff))
ld.Datblk(ctxt, int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
if ld.Debug['s'] == 0 {
// TODO: rationalize
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f sym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f sym\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
switch ld.HEADTYPE {
default:
if ld.Iself {
default:
if ld.Iself {
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f elfsym\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f elfsym\n", obj.Cputime())
}
ld.Asmelfsym(ctxt)
ld.Cflush()
case obj.Hwindows:
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f dwarf\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f dwarf\n", obj.Cputime())
}
case obj.Hdarwin:
}
if ld.Debug['v'] != 0 {
- fmt.Fprintf(ld.Bso, "%5.2f headr\n", obj.Cputime())
+ fmt.Fprintf(ctxt.Bso, "%5.2f headr\n", obj.Cputime())
}
- ld.Bso.Flush()
+ ctxt.Bso.Flush()
ld.Cseek(0)
switch ld.HEADTYPE {
default: