Compare commits
2 Commits
v0.3.5
...
c60762fe85
| Author | SHA1 | Date | |
|---|---|---|---|
| c60762fe85 | |||
|
6ee3ed1711
|
68
cmd/irdump/main.go
Normal file
68
cmd/irdump/main.go
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"errors"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"hakurei.app/command"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
log.SetFlags(0)
|
||||||
|
log.SetPrefix("irdump: ")
|
||||||
|
|
||||||
|
var (
|
||||||
|
flagOutput string
|
||||||
|
flagReal bool
|
||||||
|
)
|
||||||
|
c := command.New(os.Stderr, log.Printf, "irdump", func(args []string) (err error) {
|
||||||
|
var input *os.File
|
||||||
|
if len(args) < 1 {
|
||||||
|
return errors.New("irdump requires 1 argument")
|
||||||
|
}
|
||||||
|
if input, err = os.Open(args[0]); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer input.Close()
|
||||||
|
|
||||||
|
var output *os.File
|
||||||
|
if flagOutput == "" {
|
||||||
|
output = os.Stdout
|
||||||
|
} else {
|
||||||
|
defer output.Close()
|
||||||
|
if output, err = os.Create(flagOutput); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inputData := bytes.NewBuffer(nil)
|
||||||
|
if _, err = io.Copy(inputData, input); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var out string
|
||||||
|
if out, err = Disassemble(inputData.Bytes(), flagReal); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if _, err = output.WriteString(out); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}).Flag(
|
||||||
|
&flagOutput,
|
||||||
|
"o", command.StringFlag(""),
|
||||||
|
"Output file for asm (leave empty for stdout)",
|
||||||
|
).Flag(
|
||||||
|
&flagReal,
|
||||||
|
"r", command.BoolFlag(false),
|
||||||
|
"skip label generation; idents print real value")
|
||||||
|
|
||||||
|
c.MustParse(os.Args[1:], func(err error) {
|
||||||
|
log.Fatal(err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
func Disassemble(ir []byte, real bool) (string, error) {
|
||||||
|
return "hello world", nil
|
||||||
|
}
|
||||||
@@ -63,18 +63,49 @@ ln -s \
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t Toolchain) newGoLatest() pkg.Artifact {
|
func (t Toolchain) newGoLatest() pkg.Artifact {
|
||||||
|
var (
|
||||||
|
bootstrapEnv []string
|
||||||
|
bootstrapExtra []pkg.Artifact
|
||||||
|
)
|
||||||
|
switch runtime.GOARCH {
|
||||||
|
case "amd64":
|
||||||
|
bootstrapExtra = append(bootstrapExtra, t.newGoBootstrap())
|
||||||
|
|
||||||
|
case "arm64":
|
||||||
|
bootstrapEnv = append(bootstrapEnv,
|
||||||
|
"GOROOT_BOOTSTRAP=/system",
|
||||||
|
)
|
||||||
|
bootstrapExtra = append(bootstrapExtra,
|
||||||
|
t.Load(Binutils),
|
||||||
|
|
||||||
|
t.Load(GMP),
|
||||||
|
t.Load(MPFR),
|
||||||
|
t.Load(MPC),
|
||||||
|
|
||||||
|
t.Load(Zlib),
|
||||||
|
t.Load(Libucontext),
|
||||||
|
|
||||||
|
t.Load(gcc),
|
||||||
|
)
|
||||||
|
|
||||||
|
default:
|
||||||
|
panic("unsupported target " + runtime.GOARCH)
|
||||||
|
}
|
||||||
|
|
||||||
go119 := t.newGo(
|
go119 := t.newGo(
|
||||||
"1.19",
|
"1.19",
|
||||||
"9_e0aFHsIkVxWVGsp9T2RvvjOc3p4n9o9S8tkNe9Cvgzk_zI2FhRQB7ioQkeAAro",
|
"9_e0aFHsIkVxWVGsp9T2RvvjOc3p4n9o9S8tkNe9Cvgzk_zI2FhRQB7ioQkeAAro",
|
||||||
[]string{"CGO_ENABLED=0"}, `
|
append(bootstrapEnv, "CGO_ENABLED=0"), `
|
||||||
rm \
|
rm \
|
||||||
crypto/tls/handshake_client_test.go \
|
crypto/tls/handshake_client_test.go \
|
||||||
os/os_unix_test.go
|
os/os_unix_test.go
|
||||||
|
sed -i \
|
||||||
|
's/os\.Getenv("GCCGO")$/"nonexistent"/' \
|
||||||
|
go/internal/gccgoimporter/importer_test.go
|
||||||
echo \
|
echo \
|
||||||
'type syscallDescriptor = int' >> \
|
'type syscallDescriptor = int' >> \
|
||||||
os/rawconn_test.go
|
os/rawconn_test.go
|
||||||
`, t.newGoBootstrap(),
|
`, bootstrapExtra...)
|
||||||
)
|
|
||||||
|
|
||||||
go121 := t.newGo(
|
go121 := t.newGo(
|
||||||
"1.21.13",
|
"1.21.13",
|
||||||
|
|||||||
Reference in New Issue
Block a user