aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/ifuzz/x86/encode.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-11-20 17:30:23 +0100
committerDmitry Vyukov <dvyukov@google.com>2020-11-21 08:46:20 +0100
commit5405d2e2ed019de7452677eacfc7de9562a8ea12 (patch)
tree7b2f9f488a4b57ce9a40e4d16bc263c2f00d8e48 /pkg/ifuzz/x86/encode.go
parent9bc78a846441516a33a7fd3b245380f463ba88ed (diff)
pkg/ifuzz: invert ifuzz and ifuzzimpl
ifuzzimpl imports the public interface package ifuzz and prog package needs to import ifuzzimpl (implementation guts that nobody outside of ifuzz should care about). This is not right. Invert everything so that prog package only needs to import ifuzz and ifuzz imports ifuzzimpl.
Diffstat (limited to 'pkg/ifuzz/x86/encode.go')
-rw-r--r--pkg/ifuzz/x86/encode.go19
1 files changed, 10 insertions, 9 deletions
diff --git a/pkg/ifuzz/x86/encode.go b/pkg/ifuzz/x86/encode.go
index b73a22c14..9258bc41c 100644
--- a/pkg/ifuzz/x86/encode.go
+++ b/pkg/ifuzz/x86/encode.go
@@ -8,12 +8,13 @@
package x86
import (
- "github.com/google/syzkaller/pkg/ifuzz"
"math/rand"
+
+ "github.com/google/syzkaller/pkg/ifuzz/ifuzzimpl"
)
// nolint: gocyclo, nestif, gocognit, funlen
-func (insn *Insn) Encode(cfg *ifuzz.Config, r *rand.Rand) []byte {
+func (insn *Insn) Encode(cfg *ifuzzimpl.Config, r *rand.Rand) []byte {
if !insn.IsCompatible(cfg) {
panic("instruction is not suitable for this mode")
}
@@ -23,11 +24,11 @@ func (insn *Insn) Encode(cfg *ifuzz.Config, r *rand.Rand) []byte {
var operSize, immSize, dispSize, addrSize int
switch cfg.Mode {
- case ifuzz.ModeLong64:
+ case ifuzzimpl.ModeLong64:
operSize, immSize, dispSize, addrSize = 4, 4, 4, 8
- case ifuzz.ModeProt32:
+ case ifuzzimpl.ModeProt32:
operSize, immSize, dispSize, addrSize = 4, 4, 4, 4
- case ifuzz.ModeProt16, ifuzz.ModeReal16:
+ case ifuzzimpl.ModeProt16, ifuzzimpl.ModeReal16:
operSize, immSize, dispSize, addrSize = 2, 2, 2, 2
default:
panic("bad mode")
@@ -53,7 +54,7 @@ func (insn *Insn) Encode(cfg *ifuzz.Config, r *rand.Rand) []byte {
if !insn.No66Prefix {
prefixes = append(prefixes, 0x66) // operand size
}
- if cfg.Mode == ifuzz.ModeLong64 || !insn.Mem32 {
+ if cfg.Mode == ifuzzimpl.ModeLong64 || !insn.Mem32 {
prefixes = append(prefixes, 0x67) // address size
}
if !insn.NoRepPrefix {
@@ -70,7 +71,7 @@ func (insn *Insn) Encode(cfg *ifuzz.Config, r *rand.Rand) []byte {
// REX
var rex byte
- if cfg.Mode == ifuzz.ModeLong64 && r.Intn(2) == 0 {
+ if cfg.Mode == ifuzzimpl.ModeLong64 && r.Intn(2) == 0 {
// bit 0 - B
// bit 1 - X
// bit 2 - R
@@ -118,7 +119,7 @@ func (insn *Insn) Encode(cfg *ifuzz.Config, r *rand.Rand) []byte {
code = append(code, insn.Vex)
vexR = byte(1)
vexX = byte(1)
- if cfg.Mode == ifuzz.ModeLong64 {
+ if cfg.Mode == ifuzzimpl.ModeLong64 {
vexR = byte(r.Intn(2))
vexX = byte(r.Intn(2))
}
@@ -146,7 +147,7 @@ func (insn *Insn) Encode(cfg *ifuzz.Config, r *rand.Rand) []byte {
code = append(code, vexR<<7|vexX<<6|vexB<<5|insn.VexMap)
code = append(code, W<<7|vvvv<<3|L<<2|pp)
// TODO: short encoding
- if cfg.Mode != ifuzz.ModeLong64 {
+ if cfg.Mode != ifuzzimpl.ModeLong64 {
vvvv |= 8
}
}