]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/ld: delete Biobuf
authorDave Cheney <dave@cheney.net>
Sat, 2 May 2015 02:44:49 +0000 (12:44 +1000)
committerDave Cheney <dave@cheney.net>
Mon, 4 May 2015 23:55:55 +0000 (23:55 +0000)
Update #10652

This proposal deletes cmd/internal/ld.Biobuf and replaces all uses with
cmd/internal/obj.Biobuf. As cmd/internal/ld already imported cmd/internal/obj
there are no additional dependencies created.

Notes:

- ld.Boffset included more checks, so it was merged into obj.Boffset
- obj.Bflush was removed in 8d16253c90ae, so replaced all calls to
  ld.Bflush, with obj.Biobuf.Flush.
- Almost all of this change was prepared with sed.

Change-Id: I814854d52f5729a5a40c523c8188e465246b88da
Reviewed-on: https://go-review.googlesource.com/9660
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Dave Cheney <dave@cheney.net>

16 files changed:
src/cmd/5l/asm.go
src/cmd/6l/asm.go
src/cmd/7l/asm.go
src/cmd/8l/asm.go
src/cmd/9l/asm.go
src/cmd/internal/ld/data.go
src/cmd/internal/ld/go.go
src/cmd/internal/ld/ldelf.go
src/cmd/internal/ld/ldmacho.go
src/cmd/internal/ld/ldpe.go
src/cmd/internal/ld/lib.go
src/cmd/internal/ld/link.go
src/cmd/internal/ld/objfile.go
src/cmd/internal/ld/pobj.go
src/cmd/internal/ld/util.go
src/cmd/internal/obj/util.go

index 25a05a2d2857b1e7721357be312bb878d5c01f16..85ea684fc77d26cf655e80219c15d6fce9a479bb 100644 (file)
@@ -579,7 +579,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f asmb\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        if ld.Iself {
                ld.Asmbelfsetup()
@@ -597,7 +597,7 @@ func asmb() {
                if ld.Debug['v'] != 0 {
                        fmt.Fprintf(&ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
                }
-               ld.Bflush(&ld.Bso)
+               ld.Bso.Flush()
 
                ld.Cseek(int64(ld.Segrodata.Fileoff))
                ld.Datblk(int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
@@ -606,7 +606,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f datblk\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        ld.Cseek(int64(ld.Segdata.Fileoff))
        ld.Datblk(int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
@@ -639,7 +639,7 @@ func asmb() {
                if ld.Debug['v'] != 0 {
                        fmt.Fprintf(&ld.Bso, "%5.2f sym\n", obj.Cputime())
                }
-               ld.Bflush(&ld.Bso)
+               ld.Bso.Flush()
                switch ld.HEADTYPE {
                default:
                        if ld.Iself {
@@ -700,7 +700,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f header\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
        ld.Cseek(0)
        switch ld.HEADTYPE {
        default:
index 0f67fdbf90a4800af3c3e8489e5205aac5620326..deaeb82d39f20f1c1a99e587b1d2b637d3f544ff 100644 (file)
@@ -696,12 +696,12 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f asmb\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f codeblk\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        if ld.Iself {
                ld.Asmbelfsetup()
@@ -719,7 +719,7 @@ func asmb() {
                if ld.Debug['v'] != 0 {
                        fmt.Fprintf(&ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
                }
-               ld.Bflush(&ld.Bso)
+               ld.Bso.Flush()
 
                ld.Cseek(int64(ld.Segrodata.Fileoff))
                ld.Datblk(int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
@@ -728,7 +728,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f datblk\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        ld.Cseek(int64(ld.Segdata.Fileoff))
        ld.Datblk(int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
@@ -782,7 +782,7 @@ func asmb() {
                if ld.Debug['v'] != 0 {
                        fmt.Fprintf(&ld.Bso, "%5.2f sym\n", obj.Cputime())
                }
-               ld.Bflush(&ld.Bso)
+               ld.Bso.Flush()
                switch ld.HEADTYPE {
                default:
                case obj.Hplan9,
@@ -859,7 +859,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f headr\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
        ld.Cseek(0)
        switch ld.HEADTYPE {
        default:
index 2b6771dcd8eb0bb88ebce31d7d0c8249207424e4..a17899dcf00b35ef155cb31b2f772b7510c1a4ef 100644 (file)
@@ -319,7 +319,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f asmb\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        if ld.Iself {
                ld.Asmbelfsetup()
@@ -337,7 +337,7 @@ func asmb() {
                if ld.Debug['v'] != 0 {
                        fmt.Fprintf(&ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
                }
-               ld.Bflush(&ld.Bso)
+               ld.Bso.Flush()
 
                ld.Cseek(int64(ld.Segrodata.Fileoff))
                ld.Datblk(int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
@@ -346,7 +346,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f datblk\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        ld.Cseek(int64(ld.Segdata.Fileoff))
        ld.Datblk(int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
@@ -379,7 +379,7 @@ func asmb() {
                if ld.Debug['v'] != 0 {
                        fmt.Fprintf(&ld.Bso, "%5.2f sym\n", obj.Cputime())
                }
-               ld.Bflush(&ld.Bso)
+               ld.Bso.Flush()
                switch ld.HEADTYPE {
                default:
                        if ld.Iself {
@@ -440,7 +440,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f header\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
        ld.Cseek(0)
        switch ld.HEADTYPE {
        default:
index e7966f3ac382250c99b055aaf2724f7dce8756c7..7231379108564d1f3a0c0ed1140f7ca72ec8b74b 100644 (file)
@@ -570,7 +570,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f asmb\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        if ld.Iself {
                ld.Asmbelfsetup()
@@ -588,7 +588,7 @@ func asmb() {
                if ld.Debug['v'] != 0 {
                        fmt.Fprintf(&ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
                }
-               ld.Bflush(&ld.Bso)
+               ld.Bso.Flush()
 
                ld.Cseek(int64(ld.Segrodata.Fileoff))
                ld.Datblk(int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
@@ -597,7 +597,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f datblk\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        ld.Cseek(int64(ld.Segdata.Fileoff))
        ld.Datblk(int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
@@ -627,7 +627,7 @@ func asmb() {
                if ld.Debug['v'] != 0 {
                        fmt.Fprintf(&ld.Bso, "%5.2f sym\n", obj.Cputime())
                }
-               ld.Bflush(&ld.Bso)
+               ld.Bso.Flush()
                switch ld.HEADTYPE {
                default:
                        if ld.Iself {
@@ -697,7 +697,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f headr\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
        ld.Cseek(0)
        switch ld.HEADTYPE {
        default:
index 2af2941dfeebc77369e075f2bed6346124bd4d23..257f23e2abcb028eed9d50325e982be8bb122e38 100644 (file)
@@ -690,7 +690,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f asmb\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        if ld.Iself {
                ld.Asmbelfsetup()
@@ -708,7 +708,7 @@ func asmb() {
                if ld.Debug['v'] != 0 {
                        fmt.Fprintf(&ld.Bso, "%5.2f rodatblk\n", obj.Cputime())
                }
-               ld.Bflush(&ld.Bso)
+               ld.Bso.Flush()
 
                ld.Cseek(int64(ld.Segrodata.Fileoff))
                ld.Datblk(int64(ld.Segrodata.Vaddr), int64(ld.Segrodata.Filelen))
@@ -717,7 +717,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f datblk\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
 
        ld.Cseek(int64(ld.Segdata.Fileoff))
        ld.Datblk(int64(ld.Segdata.Vaddr), int64(ld.Segdata.Filelen))
@@ -732,7 +732,7 @@ func asmb() {
                if ld.Debug['v'] != 0 {
                        fmt.Fprintf(&ld.Bso, "%5.2f sym\n", obj.Cputime())
                }
-               ld.Bflush(&ld.Bso)
+               ld.Bso.Flush()
                switch ld.HEADTYPE {
                default:
                        if ld.Iself {
@@ -785,7 +785,7 @@ func asmb() {
        if ld.Debug['v'] != 0 {
                fmt.Fprintf(&ld.Bso, "%5.2f header\n", obj.Cputime())
        }
-       ld.Bflush(&ld.Bso)
+       ld.Bso.Flush()
        ld.Cseek(0)
        switch ld.HEADTYPE {
        default:
index 9a34828026a0729a66ac7afae72309fe78d6291e..4650db035832b45637caaf8269dd85e566cdc1d2 100644 (file)
@@ -609,7 +609,7 @@ func reloc() {
        if Debug['v'] != 0 {
                fmt.Fprintf(&Bso, "%5.2f reloc\n", obj.Cputime())
        }
-       Bflush(&Bso)
+       Bso.Flush()
 
        for s := Ctxt.Textp; s != nil; s = s.Next {
                relocsym(s)
@@ -685,7 +685,7 @@ func dynreloc() {
        if Debug['v'] != 0 {
                fmt.Fprintf(&Bso, "%5.2f reloc\n", obj.Cputime())
        }
-       Bflush(&Bso)
+       Bso.Flush()
 
        for s := Ctxt.Textp; s != nil; s = s.Next {
                dynrelocsym(s)
@@ -817,7 +817,7 @@ func Codeblk(addr int64, size int64) {
                }
        }
 
-       Bflush(&Bso)
+       Bso.Flush()
 }
 
 func Datblk(addr int64, size int64) {
@@ -1204,7 +1204,7 @@ func dodata() {
        if Debug['v'] != 0 {
                fmt.Fprintf(&Bso, "%5.2f dodata\n", obj.Cputime())
        }
-       Bflush(&Bso)
+       Bso.Flush()
 
        var last *LSym
        datap = nil
index 06f1d87e6a52ab63a47a71cbef9f8dd197231ec6..0223bfae9d2448f0b4cbc7183f7efecba5d29b37 100644 (file)
@@ -53,7 +53,7 @@ func lookupImport(name string) *Import {
        return x
 }
 
-func ldpkg(f *Biobuf, pkg string, length int64, filename string, whence int) {
+func ldpkg(f *obj.Biobuf, pkg string, length int64, filename string, whence int) {
        var p0, p1 int
 
        if Debug['g'] != 0 {
@@ -69,7 +69,7 @@ func ldpkg(f *Biobuf, pkg string, length int64, filename string, whence int) {
        }
 
        bdata := make([]byte, length)
-       if int64(Bread(f, bdata)) != length {
+       if int64(obj.Bread(f, bdata)) != length {
                fmt.Fprintf(os.Stderr, "%s: short pkg read %s\n", os.Args[0], filename)
                if Debug['u'] != 0 {
                        errorexit()
index b19d78fa31b3fbb32cbe09c83e377cd7c77ffc8b..3efdb75b89fb048367f636aba3245227ecf71560 100644 (file)
@@ -265,7 +265,7 @@ type ElfSect struct {
 }
 
 type ElfObj struct {
-       f         *Biobuf
+       f         *obj.Biobuf
        base      int64 // offset in f where ELF begins
        length    int64 // length of ELF
        is64      int
@@ -315,13 +315,13 @@ func valuecmp(a *LSym, b *LSym) int {
        return 0
 }
 
-func ldelf(f *Biobuf, pkg string, length int64, pn string) {
+func ldelf(f *obj.Biobuf, pkg string, length int64, pn string) {
        if Debug['v'] != 0 {
                fmt.Fprintf(&Bso, "%5.2f ldelf %s\n", obj.Cputime(), pn)
        }
 
        Ctxt.Version++
-       base := int32(Boffset(f))
+       base := int32(obj.Boffset(f))
 
        var add uint64
        var e binary.ByteOrder
@@ -344,7 +344,7 @@ func ldelf(f *Biobuf, pkg string, length int64, pn string) {
        var sect *ElfSect
        var sym ElfSym
        var symbols []*LSym
-       if Bread(f, hdrbuf[:]) != len(hdrbuf) {
+       if obj.Bread(f, hdrbuf[:]) != len(hdrbuf) {
                goto bad
        }
        hdr = new(ElfHdrBytes)
@@ -457,7 +457,7 @@ func ldelf(f *Biobuf, pkg string, length int64, pn string) {
 
        elfobj.nsect = uint(elfobj.shnum)
        for i := 0; uint(i) < elfobj.nsect; i++ {
-               if Bseek(f, int64(uint64(base)+elfobj.shoff+uint64(int64(i)*int64(elfobj.shentsize))), 0) < 0 {
+               if obj.Bseek(f, int64(uint64(base)+elfobj.shoff+uint64(int64(i)*int64(elfobj.shentsize))), 0) < 0 {
                        goto bad
                }
                sect = &elfobj.sect[i]
@@ -826,7 +826,7 @@ func elfmap(elfobj *ElfObj, sect *ElfSect) (err error) {
 
        sect.base = make([]byte, sect.size)
        err = fmt.Errorf("short read")
-       if Bseek(elfobj.f, int64(uint64(elfobj.base)+sect.off), 0) < 0 || Bread(elfobj.f, sect.base) != len(sect.base) {
+       if obj.Bseek(elfobj.f, int64(uint64(elfobj.base)+sect.off), 0) < 0 || obj.Bread(elfobj.f, sect.base) != len(sect.base) {
                return err
        }
 
index 332444413c61ba8a3f5dee64e665d739f6a46829..2abfa3336fe903c0bd5405ae985b75ffd2cb2761 100644 (file)
@@ -41,7 +41,7 @@ const (
 )
 
 type LdMachoObj struct {
-       f          *Biobuf
+       f          *obj.Biobuf
        base       int64 // off in f where Mach-O begins
        length     int64 // length of Mach-O
        is64       bool
@@ -297,7 +297,7 @@ func macholoadrel(m *LdMachoObj, sect *LdMachoSect) int {
        rel := make([]LdMachoRel, sect.nreloc)
        n := int(sect.nreloc * 8)
        buf := make([]byte, n)
-       if Bseek(m.f, m.base+int64(sect.reloff), 0) < 0 || Bread(m.f, buf) != n {
+       if obj.Bseek(m.f, m.base+int64(sect.reloff), 0) < 0 || obj.Bread(m.f, buf) != n {
                return -1
        }
        var p []byte
@@ -343,7 +343,7 @@ func macholoaddsym(m *LdMachoObj, d *LdMachoDysymtab) int {
        n := int(d.nindirectsyms)
 
        p := make([]byte, n*4)
-       if Bseek(m.f, m.base+int64(d.indirectsymoff), 0) < 0 || Bread(m.f, p) != len(p) {
+       if obj.Bseek(m.f, m.base+int64(d.indirectsymoff), 0) < 0 || obj.Bread(m.f, p) != len(p) {
                return -1
        }
 
@@ -360,7 +360,7 @@ func macholoadsym(m *LdMachoObj, symtab *LdMachoSymtab) int {
        }
 
        strbuf := make([]byte, symtab.strsize)
-       if Bseek(m.f, m.base+int64(symtab.stroff), 0) < 0 || Bread(m.f, strbuf) != len(strbuf) {
+       if obj.Bseek(m.f, m.base+int64(symtab.stroff), 0) < 0 || obj.Bread(m.f, strbuf) != len(strbuf) {
                return -1
        }
 
@@ -370,7 +370,7 @@ func macholoadsym(m *LdMachoObj, symtab *LdMachoSymtab) int {
        }
        n := int(symtab.nsym * uint32(symsize))
        symbuf := make([]byte, n)
-       if Bseek(m.f, m.base+int64(symtab.symoff), 0) < 0 || Bread(m.f, symbuf) != len(symbuf) {
+       if obj.Bseek(m.f, m.base+int64(symtab.symoff), 0) < 0 || obj.Bread(m.f, symbuf) != len(symbuf) {
                return -1
        }
        sym := make([]LdMachoSym, symtab.nsym)
@@ -400,7 +400,7 @@ func macholoadsym(m *LdMachoObj, symtab *LdMachoSymtab) int {
        return 0
 }
 
-func ldmacho(f *Biobuf, pkg string, length int64, pn string) {
+func ldmacho(f *obj.Biobuf, pkg string, length int64, pn string) {
        var err error
        var j int
        var is64 bool
@@ -430,8 +430,8 @@ func ldmacho(f *Biobuf, pkg string, length int64, pn string) {
        var name string
 
        Ctxt.Version++
-       base := Boffset(f)
-       if Bread(f, hdr[:]) != len(hdr) {
+       base := obj.Boffset(f)
+       if obj.Bread(f, hdr[:]) != len(hdr) {
                goto bad
        }
 
@@ -454,7 +454,7 @@ func ldmacho(f *Biobuf, pkg string, length int64, pn string) {
 
        if is64 {
                var tmp [4]uint8
-               Bread(f, tmp[:4]) // skip reserved word in header
+               obj.Bread(f, tmp[:4]) // skip reserved word in header
        }
 
        m = new(LdMachoObj)
@@ -492,7 +492,7 @@ func ldmacho(f *Biobuf, pkg string, length int64, pn string) {
        m.cmd = make([]LdMachoCmd, ncmd)
        off = uint32(len(hdr))
        cmdp = make([]byte, cmdsz)
-       if Bread(f, cmdp) != len(cmdp) {
+       if obj.Bread(f, cmdp) != len(cmdp) {
                err = fmt.Errorf("reading cmds: %v", err)
                goto bad
        }
@@ -555,7 +555,7 @@ func ldmacho(f *Biobuf, pkg string, length int64, pn string) {
        }
 
        dat = make([]byte, c.seg.filesz)
-       if Bseek(f, m.base+int64(c.seg.fileoff), 0) < 0 || Bread(f, dat) != len(dat) {
+       if obj.Bseek(f, m.base+int64(c.seg.fileoff), 0) < 0 || obj.Bread(f, dat) != len(dat) {
                err = fmt.Errorf("cannot load object data: %v", err)
                goto bad
        }
index 1114cf6056f4419a217176ff0ebbc9afeafb6a6e..b98cf0206b9b6cdba8f6b341db6a4fe11666365e 100644 (file)
@@ -115,7 +115,7 @@ type PeSect struct {
 }
 
 type PeObj struct {
-       f      *Biobuf
+       f      *obj.Biobuf
        name   string
        base   uint32
        sect   []PeSect
@@ -126,14 +126,14 @@ type PeObj struct {
        snames []byte
 }
 
-func ldpe(f *Biobuf, pkg string, length int64, pn string) {
+func ldpe(f *obj.Biobuf, pkg string, length int64, pn string) {
        if Debug['v'] != 0 {
                fmt.Fprintf(&Bso, "%5.2f ldpe %s\n", obj.Cputime(), pn)
        }
 
        var sect *PeSect
        Ctxt.Version++
-       base := int32(Boffset(f))
+       base := int32(obj.Boffset(f))
 
        peobj := new(PeObj)
        peobj.f = f
@@ -171,15 +171,15 @@ func ldpe(f *Biobuf, pkg string, length int64, pn string) {
        // TODO return error if found .cormeta
 
        // load string table
-       Bseek(f, int64(base)+int64(peobj.fh.PointerToSymbolTable)+int64(len(symbuf))*int64(peobj.fh.NumberOfSymbols), 0)
+       obj.Bseek(f, int64(base)+int64(peobj.fh.PointerToSymbolTable)+int64(len(symbuf))*int64(peobj.fh.NumberOfSymbols), 0)
 
-       if Bread(f, symbuf[:4]) != 4 {
+       if obj.Bread(f, symbuf[:4]) != 4 {
                goto bad
        }
        l = Le32(symbuf[:])
        peobj.snames = make([]byte, l)
-       Bseek(f, int64(base)+int64(peobj.fh.PointerToSymbolTable)+int64(len(symbuf))*int64(peobj.fh.NumberOfSymbols), 0)
-       if Bread(f, peobj.snames) != len(peobj.snames) {
+       obj.Bseek(f, int64(base)+int64(peobj.fh.PointerToSymbolTable)+int64(len(symbuf))*int64(peobj.fh.NumberOfSymbols), 0)
+       if obj.Bread(f, peobj.snames) != len(peobj.snames) {
                goto bad
        }
 
@@ -199,10 +199,10 @@ func ldpe(f *Biobuf, pkg string, length int64, pn string) {
        peobj.pesym = make([]PeSym, peobj.fh.NumberOfSymbols)
 
        peobj.npesym = uint(peobj.fh.NumberOfSymbols)
-       Bseek(f, int64(base)+int64(peobj.fh.PointerToSymbolTable), 0)
+       obj.Bseek(f, int64(base)+int64(peobj.fh.PointerToSymbolTable), 0)
        for i := 0; uint32(i) < peobj.fh.NumberOfSymbols; i += numaux + 1 {
-               Bseek(f, int64(base)+int64(peobj.fh.PointerToSymbolTable)+int64(len(symbuf))*int64(i), 0)
-               if Bread(f, symbuf[:]) != len(symbuf) {
+               obj.Bseek(f, int64(base)+int64(peobj.fh.PointerToSymbolTable)+int64(len(symbuf))*int64(i), 0)
+               if obj.Bread(f, symbuf[:]) != len(symbuf) {
                        goto bad
                }
 
@@ -287,10 +287,10 @@ func ldpe(f *Biobuf, pkg string, length int64, pn string) {
                }
 
                r = make([]Reloc, rsect.sh.NumberOfRelocations)
-               Bseek(f, int64(peobj.base)+int64(rsect.sh.PointerToRelocations), 0)
+               obj.Bseek(f, int64(peobj.base)+int64(rsect.sh.PointerToRelocations), 0)
                for j = 0; j < int(rsect.sh.NumberOfRelocations); j++ {
                        rp = &r[j]
-                       if Bread(f, symbuf[:10]) != 10 {
+                       if obj.Bread(f, symbuf[:10]) != 10 {
                                goto bad
                        }
                        rva := Le32(symbuf[0:])
@@ -463,7 +463,7 @@ func pemap(peobj *PeObj, sect *PeSect) int {
        if sect.sh.PointerToRawData == 0 { // .bss doesn't have data in object file
                return 0
        }
-       if Bseek(peobj.f, int64(peobj.base)+int64(sect.sh.PointerToRawData), 0) < 0 || Bread(peobj.f, sect.base) != len(sect.base) {
+       if obj.Bseek(peobj.f, int64(peobj.base)+int64(sect.sh.PointerToRawData), 0) < 0 || obj.Bread(peobj.f, sect.base) != len(sect.base) {
                return -1
        }
 
index 6a9c277008018dd695019e8961fb1af316d899be..4dfc752539117a162944008bda391010401472f1 100644 (file)
@@ -230,7 +230,7 @@ const (
 var (
        headstring string
        // buffered output
-       Bso Biobuf
+       Bso obj.Biobuf
 )
 
 var coutbuf struct {
@@ -608,13 +608,13 @@ func loadlib() {
  * look for the next file in an archive.
  * adapted from libmach.
  */
-func nextar(bp *Biobuf, off int64, a *ArHdr) int64 {
+func nextar(bp *obj.Biobuf, off int64, a *ArHdr) int64 {
        if off&1 != 0 {
                off++
        }
-       Bseek(bp, off, 0)
+       obj.Bseek(bp, off, 0)
        buf := make([]byte, SAR_HDR)
-       if n := Bread(bp, buf); n < len(buf) {
+       if n := obj.Bread(bp, buf); n < len(buf) {
                if n >= 0 {
                        return 0
                }
@@ -642,28 +642,28 @@ func objfile(file string, pkg string) {
        if Debug['v'] > 1 {
                fmt.Fprintf(&Bso, "%5.2f ldobj: %s (%s)\n", obj.Cputime(), file, pkg)
        }
-       Bflush(&Bso)
+       Bso.Flush()
        var err error
-       var f *Biobuf
-       f, err = Bopenr(file)
+       var f *obj.Biobuf
+       f, err = obj.Bopenr(file)
        if err != nil {
                Exitf("cannot open file %s: %v", file, err)
        }
 
        magbuf := make([]byte, len(ARMAG))
-       if Bread(f, magbuf) != len(magbuf) || !strings.HasPrefix(string(magbuf), ARMAG) {
+       if obj.Bread(f, magbuf) != len(magbuf) || !strings.HasPrefix(string(magbuf), ARMAG) {
                /* load it as a regular file */
-               l := Bseek(f, 0, 2)
+               l := obj.Bseek(f, 0, 2)
 
-               Bseek(f, 0, 0)
+               obj.Bseek(f, 0, 0)
                ldobj(f, pkg, l, file, file, FileObj)
-               Bterm(f)
+               obj.Bterm(f)
 
                return
        }
 
        /* skip over optional __.GOSYMDEF and process __.PKGDEF */
-       off := Boffset(f)
+       off := obj.Boffset(f)
 
        var arhdr ArHdr
        l := nextar(f, off, &arhdr)
@@ -722,11 +722,11 @@ func objfile(file string, pkg string) {
        }
 
 out:
-       Bterm(f)
+       obj.Bterm(f)
 }
 
 type Hostobj struct {
-       ld     func(*Biobuf, string, int64, string)
+       ld     func(*obj.Biobuf, string, int64, string)
        pkg    string
        pn     string
        file   string
@@ -746,7 +746,7 @@ var internalpkg = []string{
        "runtime/race",
 }
 
-func ldhostobj(ld func(*Biobuf, string, int64, string), f *Biobuf, pkg string, length int64, pn string, file string) {
+func ldhostobj(ld func(*obj.Biobuf, string, int64, string), f *obj.Biobuf, pkg string, length int64, pn string, file string) {
        isinternal := false
        for i := 0; i < len(internalpkg); i++ {
                if pkg == internalpkg[i] {
@@ -777,25 +777,25 @@ func ldhostobj(ld func(*Biobuf, string, int64, string), f *Biobuf, pkg string, l
        h.pkg = pkg
        h.pn = pn
        h.file = file
-       h.off = Boffset(f)
+       h.off = obj.Boffset(f)
        h.length = length
 }
 
 func hostobjs() {
-       var f *Biobuf
+       var f *obj.Biobuf
        var h *Hostobj
 
        for i := 0; i < len(hostobj); i++ {
                h = &hostobj[i]
                var err error
-               f, err = Bopenr(h.file)
+               f, err = obj.Bopenr(h.file)
                if f == nil {
                        Exitf("cannot reopen %s: %v", h.pn, err)
                }
 
-               Bseek(f, h.off, 0)
+               obj.Bseek(f, h.off, 0)
                h.ld(f, h.pkg, h.length, h.pn)
-               Bterm(f)
+               obj.Bterm(f)
        }
 }
 
@@ -875,7 +875,7 @@ func archive() {
 
        if Debug['v'] != 0 {
                fmt.Fprintf(&Bso, "archive: %s\n", strings.Join(argv, " "))
-               Bflush(&Bso)
+               Bso.Flush()
        }
 
        if out, err := exec.Command(argv[0], argv[1:]...).CombinedOutput(); err != nil {
@@ -1019,7 +1019,7 @@ func hostlink() {
                        fmt.Fprintf(&Bso, " %q", v)
                }
                fmt.Fprintf(&Bso, "\n")
-               Bflush(&Bso)
+               Bso.Flush()
        }
 
        if out, err := exec.Command(argv[0], argv[1:]...).CombinedOutput(); err != nil {
@@ -1027,15 +1027,15 @@ func hostlink() {
        }
 }
 
-func ldobj(f *Biobuf, pkg string, length int64, pn string, file string, whence int) {
-       eof := Boffset(f) + length
+func ldobj(f *obj.Biobuf, pkg string, length int64, pn string, file string, whence int) {
+       eof := obj.Boffset(f) + length
 
-       start := Boffset(f)
-       c1 := Bgetc(f)
-       c2 := Bgetc(f)
-       c3 := Bgetc(f)
-       c4 := Bgetc(f)
-       Bseek(f, start, 0)
+       start := obj.Boffset(f)
+       c1 := obj.Bgetc(f)
+       c2 := obj.Bgetc(f)
+       c3 := obj.Bgetc(f)
+       c4 := obj.Bgetc(f)
+       obj.Bseek(f, start, 0)
 
        magic := uint32(c1)<<24 | uint32(c2)<<16 | uint32(c3)<<8 | uint32(c4)
        if magic == 0x7f454c46 { // \x7F E L F
@@ -1054,9 +1054,9 @@ func ldobj(f *Biobuf, pkg string, length int64, pn string, file string, whence i
        }
 
        /* check the header */
-       line := Brdline(f, '\n')
+       line := obj.Brdline(f, '\n')
        if line == "" {
-               if Blinelen(f) > 0 {
+               if obj.Blinelen(f) > 0 {
                        Diag("%s: not an object file", pn)
                        return
                }
@@ -1101,28 +1101,28 @@ func ldobj(f *Biobuf, pkg string, length int64, pn string, file string, whence i
        }
 
        /* skip over exports and other info -- ends with \n!\n */
-       import0 := Boffset(f)
+       import0 := obj.Boffset(f)
 
        c1 = '\n' // the last line ended in \n
-       c2 = Bgetc(f)
-       c3 = Bgetc(f)
+       c2 = obj.Bgetc(f)
+       c3 = obj.Bgetc(f)
        for c1 != '\n' || c2 != '!' || c3 != '\n' {
                c1 = c2
                c2 = c3
-               c3 = Bgetc(f)
-               if c3 == Beof {
+               c3 = obj.Bgetc(f)
+               if c3 == obj.Beof {
                        Diag("truncated object file: %s", pn)
                        return
                }
        }
 
-       import1 := Boffset(f)
+       import1 := obj.Boffset(f)
 
-       Bseek(f, import0, 0)
+       obj.Bseek(f, import0, 0)
        ldpkg(f, pkg, import1-import0-2, pn, whence) // -2 for !\n
-       Bseek(f, import1, 0)
+       obj.Bseek(f, import1, 0)
 
-       ldobjfile(Ctxt, f, pkg, eof-Boffset(f), pn)
+       ldobjfile(Ctxt, f, pkg, eof-obj.Boffset(f), pn)
 }
 
 func ldshlibsyms(shlib string) {
@@ -1146,7 +1146,7 @@ func ldshlibsyms(shlib string) {
        }
        if Ctxt.Debugvlog > 1 && Ctxt.Bso != nil {
                fmt.Fprintf(Ctxt.Bso, "%5.2f ldshlibsyms: found library with name %s at %s\n", obj.Cputime(), shlib, libpath)
-               Bflush(Ctxt.Bso)
+               Ctxt.Bso.Flush()
        }
 
        f, err := elf.Open(libpath)
@@ -1739,7 +1739,7 @@ func genasmsym(put func(*LSym, string, int, int64, int64, int, *LSym)) {
        if Debug['v'] != 0 || Debug['n'] != 0 {
                fmt.Fprintf(&Bso, "%5.2f symsize = %d\n", obj.Cputime(), uint32(Symsize))
        }
-       Bflush(&Bso)
+       Bso.Flush()
 }
 
 func Symaddr(s *LSym) int64 {
index a92ab59499e81a2cc0426d70065281a169312445..52390e741d2493c8c8c45742aa492357705fa1d2 100644 (file)
 
 package ld
 
-import "encoding/binary"
+import (
+       "cmd/internal/obj"
+       "encoding/binary"
+)
 
 type LSym struct {
        Name        string
@@ -106,7 +109,7 @@ type Link struct {
        Arch      *LinkArch
        Debugasm  int32
        Debugvlog int32
-       Bso       *Biobuf
+       Bso       *obj.Biobuf
        Windows   int32
        Goroot    string
        Hash      map[symVer]*LSym
index 0361c50fa8bf58446715522124f28e1dfcfa901a..3d59323dbaececbd4cb2cd2faf468ad047478198 100644 (file)
@@ -18,15 +18,15 @@ const (
        endmagic   = "\xff\xffgo13ld"
 )
 
-func ldobjfile(ctxt *Link, f *Biobuf, pkg string, length int64, pn string) {
-       start := Boffset(f)
+func ldobjfile(ctxt *Link, f *obj.Biobuf, pkg string, length int64, pn string) {
+       start := obj.Boffset(f)
        ctxt.Version++
        var buf [8]uint8
-       Bread(f, buf[:])
+       obj.Bread(f, buf[:])
        if string(buf[:]) != startmagic {
                log.Fatalf("%s: invalid file start %x %x %x %x %x %x %x %x", pn, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7])
        }
-       c := Bgetc(f)
+       c := obj.Bgetc(f)
        if c != 1 {
                log.Fatalf("%s: invalid file version number %d", pn, c)
        }
@@ -41,7 +41,7 @@ func ldobjfile(ctxt *Link, f *Biobuf, pkg string, length int64, pn string) {
        }
 
        for {
-               c, err := f.r.Peek(1)
+               c, err := f.Peek(1)
                if err != nil {
                        log.Fatalf("%s: peeking: %v", pn, err)
                }
@@ -52,20 +52,20 @@ func ldobjfile(ctxt *Link, f *Biobuf, pkg string, length int64, pn string) {
        }
 
        buf = [8]uint8{}
-       Bread(f, buf[:])
+       obj.Bread(f, buf[:])
        if string(buf[:]) != endmagic {
                log.Fatalf("%s: invalid file end", pn)
        }
 
-       if Boffset(f) != start+length {
-               log.Fatalf("%s: unexpected end at %d, want %d", pn, int64(Boffset(f)), int64(start+length))
+       if obj.Boffset(f) != start+length {
+               log.Fatalf("%s: unexpected end at %d, want %d", pn, int64(obj.Boffset(f)), int64(start+length))
        }
 }
 
 var readsym_ndup int
 
-func readsym(ctxt *Link, f *Biobuf, pkg string, pn string) {
-       if Bgetc(f) != 0xfe {
+func readsym(ctxt *Link, f *obj.Biobuf, pkg string, pn string) {
+       if obj.Bgetc(f) != 0xfe {
                log.Fatalf("readsym out of sync")
        }
        t := int(rdint(f))
@@ -278,7 +278,7 @@ overwrite:
        }
 }
 
-func rdint(f *Biobuf) int64 {
+func rdint(f *obj.Biobuf) int64 {
        var c int
 
        uv := uint64(0)
@@ -286,7 +286,7 @@ func rdint(f *Biobuf) int64 {
                if shift >= 64 {
                        log.Fatalf("corrupt input")
                }
-               c = Bgetc(f)
+               c = obj.Bgetc(f)
                uv |= uint64(c&0x7F) << uint(shift)
                if c&0x80 == 0 {
                        break
@@ -296,23 +296,23 @@ func rdint(f *Biobuf) int64 {
        return int64(uv>>1) ^ (int64(uint64(uv)<<63) >> 63)
 }
 
-func rdstring(f *Biobuf) string {
+func rdstring(f *obj.Biobuf) string {
        n := rdint(f)
        p := make([]byte, n)
-       Bread(f, p)
+       obj.Bread(f, p)
        return string(p)
 }
 
-func rddata(f *Biobuf) []byte {
+func rddata(f *obj.Biobuf) []byte {
        n := rdint(f)
        p := make([]byte, n)
-       Bread(f, p)
+       obj.Bread(f, p)
        return p
 }
 
 var symbuf []byte
 
-func rdsym(ctxt *Link, f *Biobuf, pkg string) *LSym {
+func rdsym(ctxt *Link, f *obj.Biobuf, pkg string) *LSym {
        n := int(rdint(f))
        if n == 0 {
                rdint(f)
@@ -322,7 +322,7 @@ func rdsym(ctxt *Link, f *Biobuf, pkg string) *LSym {
        if len(symbuf) < n {
                symbuf = make([]byte, n)
        }
-       Bread(f, symbuf[:n])
+       obj.Bread(f, symbuf[:n])
        p := string(symbuf[:n])
        v := int(rdint(f))
        if v != 0 {
index 259455c31adf6c739543d1b5c016cb9851ec7fb1..8568744c3d3feded192c6b7d760617442df46a44 100644 (file)
@@ -49,7 +49,7 @@ func Ldmain() {
        Ctxt.Diag = Diag
        Ctxt.Bso = &Bso
 
-       Bso = *Binitw(os.Stdout)
+       Bso = *obj.Binitw(os.Stdout)
        Debug = [128]int{}
        nerrors = 0
        outfile = ""
@@ -186,7 +186,7 @@ func Ldmain() {
        if Debug['v'] != 0 {
                fmt.Fprintf(&Bso, "HEADER = -H%d -T0x%x -D0x%x -R0x%x\n", HEADTYPE, uint64(INITTEXT), uint64(INITDAT), uint32(INITRND))
        }
-       Bflush(&Bso)
+       Bso.Flush()
 
        if Buildmode == BuildmodeShared {
                for i := 0; i < flag.NArg(); i++ {
@@ -247,7 +247,7 @@ func Ldmain() {
                fmt.Fprintf(&Bso, "%d liveness data\n", liveness)
        }
 
-       Bflush(&Bso)
+       Bso.Flush()
 
        errorexit()
 }
index f6a706ca010468c6bce595a5f28946380d1ebf8d..f38f05ce9d4064a38d0d19bdbf9f58b2cced7eca 100644 (file)
@@ -5,10 +5,8 @@
 package ld
 
 import (
-       "bufio"
        "bytes"
        "encoding/binary"
-       "io"
        "log"
        "os"
        "runtime"
@@ -76,141 +74,6 @@ func cutStringAtNUL(s string) string {
        return s
 }
 
-type Biobuf struct {
-       f       *os.File
-       r       *bufio.Reader
-       w       *bufio.Writer
-       linelen int
-}
-
-func Bopenw(name string) (*Biobuf, error) {
-       f, err := os.Create(name)
-       if err != nil {
-               return nil, err
-       }
-       return &Biobuf{f: f, w: bufio.NewWriter(f)}, nil
-}
-
-func Bopenr(name string) (*Biobuf, error) {
-       f, err := os.Open(name)
-       if err != nil {
-               return nil, err
-       }
-       return &Biobuf{f: f, r: bufio.NewReader(f)}, nil
-}
-
-func Binitw(w *os.File) *Biobuf {
-       return &Biobuf{w: bufio.NewWriter(w), f: w}
-}
-
-func (b *Biobuf) Write(p []byte) (int, error) {
-       return b.w.Write(p)
-}
-
-func Bwritestring(b *Biobuf, p string) (int, error) {
-       return b.w.WriteString(p)
-}
-
-func Bseek(b *Biobuf, offset int64, whence int) int64 {
-       if b.w != nil {
-               if err := b.w.Flush(); err != nil {
-                       log.Fatalf("writing output: %v", err)
-               }
-       } else if b.r != nil {
-               if whence == 1 {
-                       offset -= int64(b.r.Buffered())
-               }
-       }
-       off, err := b.f.Seek(offset, whence)
-       if err != nil {
-               log.Panicf("seeking in output [%d %d %p]: %v", offset, whence, b.f, err)
-       }
-       if b.r != nil {
-               b.r.Reset(b.f)
-       }
-       return off
-}
-
-func Boffset(b *Biobuf) int64 {
-       if b.w != nil {
-               if err := b.w.Flush(); err != nil {
-                       log.Fatalf("writing output: %v", err)
-               }
-       }
-       off, err := b.f.Seek(0, 1)
-       if err != nil {
-               log.Fatalf("seeking in output [0, 1]: %v", err)
-       }
-       if b.r != nil {
-               off -= int64(b.r.Buffered())
-       }
-       return off
-}
-
-func (b *Biobuf) Flush() error {
-       return b.w.Flush()
-}
-
-func Bwrite(b *Biobuf, p []byte) (int, error) {
-       return b.w.Write(p)
-}
-
-func Bputc(b *Biobuf, c byte) {
-       b.w.WriteByte(c)
-}
-
-const Beof = -1
-
-func Bread(b *Biobuf, p []byte) int {
-       n, err := io.ReadFull(b.r, p)
-       if n == 0 {
-               if err != nil && err != io.EOF {
-                       n = -1
-               }
-       }
-       return n
-}
-
-func Bgetc(b *Biobuf) int {
-       c, err := b.r.ReadByte()
-       if err != nil {
-               return -1
-       }
-       return int(c)
-}
-
-func Bgetrune(b *Biobuf) int {
-       r, _, err := b.r.ReadRune()
-       if err != nil {
-               return -1
-       }
-       return int(r)
-}
-
-func (b *Biobuf) Read(p []byte) (int, error) {
-       return b.r.Read(p)
-}
-
-func Brdline(b *Biobuf, delim int) string {
-       s, err := b.r.ReadBytes(byte(delim))
-       if err != nil {
-               log.Fatalf("reading input: %v", err)
-       }
-       b.linelen = len(s)
-       return string(s)
-}
-
-func Brdstr(b *Biobuf, delim int, cut int) string {
-       s, err := b.r.ReadString(byte(delim))
-       if err != nil {
-               log.Fatalf("reading input: %v", err)
-       }
-       if len(s) > 0 && cut > 0 {
-               s = s[:len(s)-1]
-       }
-       return s
-}
-
 func Access(name string, mode int) int {
        if mode != 0 {
                panic("bad access")
@@ -222,26 +85,6 @@ func Access(name string, mode int) int {
        return 0
 }
 
-func Blinelen(b *Biobuf) int {
-       return b.linelen
-}
-
-func Bflush(b *Biobuf) error {
-       return b.w.Flush()
-}
-
-func Bterm(b *Biobuf) error {
-       var err error
-       if b.w != nil {
-               err = b.w.Flush()
-       }
-       err1 := b.f.Close()
-       if err == nil {
-               err = err1
-       }
-       return err
-}
-
 // strings.Compare, introduced in Go 1.5.
 func stringsCompare(a, b string) int {
        if a == b {
index b44b9caf3813617502a5b5b94e1a877ac36e00e9..b0b209184f742ac2fb431aff90cab6b7761b8962 100644 (file)
@@ -83,12 +83,17 @@ func Bseek(b *Biobuf, offset int64, whence int) int64 {
 }
 
 func Boffset(b *Biobuf) int64 {
-       if err := b.w.Flush(); err != nil {
-               log.Fatalf("writing output: %v", err)
+       if b.w != nil {
+               if err := b.w.Flush(); err != nil {
+                       log.Fatalf("writing output: %v", err)
+               }
        }
        off, err := b.f.Seek(0, 1)
        if err != nil {
-               log.Fatalf("seeking in output: %v", err)
+               log.Fatalf("seeking in output [0, 1]: %v", err)
+       }
+       if b.r != nil {
+               off -= int64(b.r.Buffered())
        }
        return off
 }