aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/vendor/golang.org/x/arch/x86/x86asm/xedext_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/vendor/golang.org/x/arch/x86/x86asm/xedext_test.go')
-rw-r--r--src/cmd/vendor/golang.org/x/arch/x86/x86asm/xedext_test.go205
1 files changed, 0 insertions, 205 deletions
diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/xedext_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/xedext_test.go
deleted file mode 100644
index e27cdc07c4..0000000000
--- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/xedext_test.go
+++ /dev/null
@@ -1,205 +0,0 @@
-package x86asm
-
-import (
- "bytes"
- "fmt"
- "io"
- "log"
- "os"
- "strconv"
- "strings"
- "testing"
-)
-
-// xed binary from Intel sde-external-6.22.0-2014-03-06.
-const xedPath = "/Users/rsc/bin/xed"
-
-func testXedArch(t *testing.T, arch int, generate func(func([]byte))) {
- if testing.Short() {
- t.Skip("skipping xed test in short mode")
- }
- if _, err := os.Stat(xedPath); err != nil {
- t.Skip(err)
- }
-
- testExtDis(t, "intel", arch, xed, generate, allowedMismatchXed)
-}
-
-func testXed32(t *testing.T, generate func(func([]byte))) {
- testXedArch(t, 32, generate)
-}
-
-func testXed64(t *testing.T, generate func(func([]byte))) {
- testXedArch(t, 64, generate)
-}
-
-func xed(ext *ExtDis) error {
- b, err := ext.Run(xedPath, fmt.Sprintf("-%d", ext.Arch), "-n", "1G", "-ir", ext.File.Name())
- if err != nil {
- return err
- }
-
- nmatch := 0
- next := uint32(start)
- var (
- addr uint32
- encbuf [32]byte
- enc []byte
- text string
- )
-
- var xedEnd = []byte("# end of text section")
- var xedEnd1 = []byte("# Errors")
-
- eof := false
- for {
- line, err := b.ReadSlice('\n')
- if err != nil {
- if err == io.EOF {
- break
- }
- return fmt.Errorf("reading objdump output: %v", err)
- }
- if debug {
- os.Stdout.Write(line)
- }
- if bytes.HasPrefix(line, xedEnd) || bytes.HasPrefix(line, xedEnd1) {
- eof = true
- }
- if eof {
- continue
- }
- nmatch++
- addr, enc, text = parseLineXed(line, encbuf[:0])
- if addr > next {
- return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line)
- }
- if addr < next {
- continue
- }
- switch text {
- case "repz":
- text = "rep"
- case "repnz":
- text = "repn"
- default:
- text = strings.Replace(text, "repz ", "rep ", -1)
- text = strings.Replace(text, "repnz ", "repn ", -1)
- }
- if m := pcrelw.FindStringSubmatch(text); m != nil {
- targ, _ := strconv.ParseUint(m[2], 16, 64)
- text = fmt.Sprintf("%s .%+#x", m[1], int16(uint32(targ)-uint32(uint16(addr))-uint32(len(enc))))
- }
- if m := pcrel.FindStringSubmatch(text); m != nil {
- targ, _ := strconv.ParseUint(m[2], 16, 64)
- text = fmt.Sprintf("%s .%+#x", m[1], int32(uint32(targ)-addr-uint32(len(enc))))
- }
- ext.Dec <- ExtInst{addr, encbuf, len(enc), text}
- encbuf = [32]byte{}
- enc = nil
- next += 32
- }
- if next != start+uint32(ext.Size) {
- return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size)
- }
- if err := ext.Wait(); err != nil {
- return fmt.Errorf("exec: %v", err)
- }
-
- return nil
-}
-
-var (
- xedInRaw = []byte("In raw...")
- xedDots = []byte("...")
- xdis = []byte("XDIS ")
- xedError = []byte("ERROR: ")
- xedNoDecode = []byte("Could not decode at offset: 0x")
-)
-
-func parseLineXed(line []byte, encstart []byte) (addr uint32, enc []byte, text string) {
- oline := line
- if bytes.HasPrefix(line, xedInRaw) || bytes.HasPrefix(line, xedDots) {
- return 0, nil, ""
- }
- if bytes.HasPrefix(line, xedError) {
- i := bytes.IndexByte(line[len(xedError):], ' ')
- if i < 0 {
- log.Fatalf("cannot parse error: %q", oline)
- }
- errstr := string(line[len(xedError):])
- i = bytes.Index(line, xedNoDecode)
- if i < 0 {
- log.Fatalf("cannot parse error: %q", oline)
- }
- i += len(xedNoDecode)
- j := bytes.IndexByte(line[i:], ' ')
- if j < 0 {
- log.Fatalf("cannot parse error: %q", oline)
- }
- x, err := strconv.ParseUint(string(trimSpace(line[i:i+j])), 16, 32)
- if err != nil {
- log.Fatalf("cannot parse disassembly: %q", oline)
- }
- addr = uint32(x)
- return addr, nil, errstr
- }
-
- if !bytes.HasPrefix(line, xdis) {
- log.Fatalf("cannot parse disassembly: %q", oline)
- }
-
- i := bytes.IndexByte(line, ':')
- if i < 0 {
- log.Fatalf("cannot parse disassembly: %q", oline)
- }
- x, err := strconv.ParseUint(string(trimSpace(line[len(xdis):i])), 16, 32)
- if err != nil {
- log.Fatalf("cannot parse disassembly: %q", oline)
- }
- addr = uint32(x)
-
- // spaces
- i++
- for i < len(line) && line[i] == ' ' {
- i++
- }
- // instruction class, spaces
- for i < len(line) && line[i] != ' ' {
- i++
- }
- for i < len(line) && line[i] == ' ' {
- i++
- }
- // instruction set, spaces
- for i < len(line) && line[i] != ' ' {
- i++
- }
- for i < len(line) && line[i] == ' ' {
- i++
- }
-
- // hex
- hexStart := i
- for i < len(line) && line[i] != ' ' {
- i++
- }
- hexEnd := i
- for i < len(line) && line[i] == ' ' {
- i++
- }
-
- // text
- textStart := i
- for i < len(line) && line[i] != '\n' {
- i++
- }
- textEnd := i
-
- enc, ok := parseHex(line[hexStart:hexEnd], encstart)
- if !ok {
- log.Fatalf("cannot parse disassembly: %q", oline)
- }
-
- return addr, enc, string(fixSpace(line[textStart:textEnd]))
-}