aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/asm/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/asm/main.go')
-rw-r--r--src/cmd/asm/main.go31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/cmd/asm/main.go b/src/cmd/asm/main.go
index 4e450bec98..c612583e6b 100644
--- a/src/cmd/asm/main.go
+++ b/src/cmd/asm/main.go
@@ -5,6 +5,7 @@
package main
import (
+ "bufio"
"flag"
"fmt"
"log"
@@ -15,6 +16,7 @@ import (
"cmd/asm/internal/flags"
"cmd/asm/internal/lex"
+ "cmd/internal/bio"
"cmd/internal/obj"
)
@@ -31,25 +33,26 @@ func main() {
flags.Parse()
- // Create object file, write header.
- fd, err := os.Create(*flags.OutputFile)
- if err != nil {
- log.Fatal(err)
- }
ctxt := obj.Linknew(architecture.LinkArch)
if *flags.PrintOut {
ctxt.Debugasm = 1
}
ctxt.LineHist.TrimPathPrefix = *flags.TrimPath
ctxt.Flag_dynlink = *flags.Dynlink
- if *flags.Shared || *flags.Dynlink {
- ctxt.Flag_shared = 1
- }
- ctxt.Bso = obj.Binitw(os.Stdout)
+ ctxt.Flag_shared = *flags.Shared || *flags.Dynlink
+ ctxt.Bso = bufio.NewWriter(os.Stdout)
defer ctxt.Bso.Flush()
- output := obj.Binitw(fd)
- fmt.Fprintf(output, "go object %s %s %s\n", obj.Getgoos(), obj.Getgoarch(), obj.Getgoversion())
- fmt.Fprintf(output, "!\n")
+
+ // Create object file, write header.
+ out, err := os.Create(*flags.OutputFile)
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer bio.MustClose(out)
+ buf := bufio.NewWriter(bio.MustWriter(out))
+
+ fmt.Fprintf(buf, "go object %s %s %s\n", obj.Getgoos(), obj.Getgoarch(), obj.Getgoversion())
+ fmt.Fprintf(buf, "!\n")
lexer := lex.NewLexer(flag.Arg(0), ctxt)
parser := asm.NewParser(ctxt, architecture, lexer)
@@ -63,12 +66,12 @@ func main() {
pList.Firstpc, ok = parser.Parse()
if ok {
// reports errors to parser.Errorf
- obj.Writeobjdirect(ctxt, output)
+ obj.Writeobjdirect(ctxt, buf)
}
if !ok || diag {
log.Printf("assembly of %s failed", flag.Arg(0))
os.Remove(*flags.OutputFile)
os.Exit(1)
}
- output.Flush()
+ buf.Flush()
}