test(verify): seed the arm64 ABI kernel arguments
Assisted-by: GLM 5.3
This commit is contained in:
+14
-4
@@ -42,8 +42,12 @@ func TestABIArm64(t *testing.T) {
|
|||||||
t.Errorf("cleanAdd: %s", report)
|
t.Errorf("cleanAdd: %s", report)
|
||||||
}
|
}
|
||||||
|
|
||||||
// dirtyFP clobbers the frame pointer (R29).
|
// dirtyFP clobbers the frame pointer (R29). The kernel passes its
|
||||||
out, report, err = k.CallFuncChecked("dirtyFP", make([]byte, 16))
|
// argument through, so the argument must carry the expected value the
|
||||||
|
// way the amd64 twin test seeds it.
|
||||||
|
args = make([]byte, 16)
|
||||||
|
PutUint64(args, 0, 0x1234)
|
||||||
|
out, report, err = k.CallFuncChecked("dirtyFP", args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("CallFuncChecked: %v", err)
|
t.Fatalf("CallFuncChecked: %v", err)
|
||||||
}
|
}
|
||||||
@@ -57,11 +61,17 @@ func TestABIArm64(t *testing.T) {
|
|||||||
t.Errorf("dirtyFP: only R29 should be clobbered: %s", report)
|
t.Errorf("dirtyFP: only R29 should be clobbered: %s", report)
|
||||||
}
|
}
|
||||||
|
|
||||||
// dirtyG clobbers the goroutine pointer (R28).
|
// dirtyG clobbers the goroutine pointer (R28) and still returns its
|
||||||
_, report, err = k.CallFuncChecked("dirtyG", make([]byte, 16))
|
// argument.
|
||||||
|
args = make([]byte, 16)
|
||||||
|
PutUint64(args, 0, 0x5678)
|
||||||
|
out, report, err = k.CallFuncChecked("dirtyG", args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("CallFuncChecked: %v", err)
|
t.Fatalf("CallFuncChecked: %v", err)
|
||||||
}
|
}
|
||||||
|
if got := int64(GetUint64(out, 8)); got != 0x5678 {
|
||||||
|
t.Errorf("dirtyG returned %d, want %d", got, int64(0x5678))
|
||||||
|
}
|
||||||
if !report.GClobbered {
|
if !report.GClobbered {
|
||||||
t.Error("dirtyG: expected g clobbered, but report says clean")
|
t.Error("dirtyG: expected g clobbered, but report says clean")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user