From a604cf376325b5f4d5ead8c2ca50da91330c72c8 Mon Sep 17 00:00:00 2001 From: Alexander Potapenko Date: Tue, 16 Apr 2024 15:11:22 +0200 Subject: 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. --- prog/rand.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'prog') 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 } -- cgit mrf-deployment