diff options
| author | Alexander Potapenko <glider@google.com> | 2024-04-16 15:11:22 +0200 |
|---|---|---|
| committer | Alexander Potapenko <glider@google.com> | 2024-04-24 14:58:52 +0000 |
| commit | a604cf376325b5f4d5ead8c2ca50da91330c72c8 (patch) | |
| tree | 982e018b38bca2d41adf53df3a8b579c8aed57a6 /prog | |
| parent | 21339d7b9986698282dce93709157dc36907fbf8 (diff) | |
pkg/ifuzz/arm64: add arm64 support
This patch adds instruction generator for ARM64 based on the descriptions
provided as part of Go's arm64asm package. It also implements support for
pseudo-instructions for calling ARM64 hypercalls.
Diffstat (limited to 'prog')
| -rw-r--r-- | prog/rand.go | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/prog/rand.go b/prog/rand.go index 0e3727c7f..6c58f7649 100644 --- a/prog/rand.go +++ b/prog/rand.go @@ -466,9 +466,6 @@ func (r *randGen) generateText(kind TextKind) []byte { if cfg := createTargetIfuzzConfig(r.target); cfg != nil { return ifuzz.Generate(cfg, r.Rand) } - fallthrough - case TextArm64: - // Just a stub, need something better. text := make([]byte, 50) for i := range text { text[i] = byte(r.Intn(256)) @@ -486,8 +483,6 @@ func (r *randGen) mutateText(kind TextKind, text []byte) []byte { if cfg := createTargetIfuzzConfig(r.target); cfg != nil { return ifuzz.Mutate(cfg, r.Rand, text) } - fallthrough - case TextArm64: return mutateData(r, text, 40, 60) default: cfg := createIfuzzConfig(kind) @@ -519,6 +514,9 @@ func createTargetIfuzzConfig(target *Target) *ifuzz.Config { case "ppc64": cfg.Mode = ifuzz.ModeLong64 cfg.Arch = ifuzz.ArchPowerPC + case "arm64": + cfg.Mode = ifuzz.ModeLong64 + cfg.Arch = ifuzz.ArchArm64 default: return nil } @@ -560,8 +558,11 @@ func createIfuzzConfig(kind TextKind) *ifuzz.Config { case TextPpc64: cfg.Mode = ifuzz.ModeLong64 cfg.Arch = ifuzz.ArchPowerPC + case TextArm64: + cfg.Mode = ifuzz.ModeLong64 + cfg.Arch = ifuzz.ArchArm64 default: - panic("unknown text kind") + panic(fmt.Sprintf("unknown text kind: %v", kind)) } return cfg } |
