feat(verify): ABI checks on arm64, riscv64 and loong64
Assisted-by: GLM 5.3 Flash
This commit is contained in:
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
// func cleanAdd(a, b int64) int64
|
||||
// A well-behaved function that preserves all callee-saved registers.
|
||||
TEXT ·cleanAdd(SB), NOSPLIT, $0-24
|
||||
MOVD a+0(FP), R0
|
||||
MOVD b+8(FP), R1
|
||||
ADD R0, R1, R0
|
||||
MOVD R0, ret+16(FP)
|
||||
RET
|
||||
|
||||
// func dirtyFP(a int64) int64
|
||||
// Deliberately clobbers R29, the frame pointer (an ABI violation for a
|
||||
// NOSPLIT frame=0 function).
|
||||
TEXT ·dirtyFP(SB), NOSPLIT, $0-16
|
||||
MOVD $0x1234, R29
|
||||
MOVD a+0(FP), R0
|
||||
MOVD R0, ret+8(FP)
|
||||
RET
|
||||
|
||||
// func dirtyG(a int64) int64
|
||||
// Deliberately clobbers R28, the goroutine pointer (a serious ABI violation).
|
||||
TEXT ·dirtyG(SB), NOSPLIT, $0-16
|
||||
MOVD $0x5678, R28
|
||||
MOVD a+0(FP), R0
|
||||
MOVD R0, ret+8(FP)
|
||||
RET
|
||||
Vendored
+21
@@ -0,0 +1,21 @@
|
||||
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
// func cleanAdd(a, b int64) int64
|
||||
// A well-behaved function that preserves the goroutine pointer.
|
||||
TEXT ·cleanAdd(SB), NOSPLIT, $0-24
|
||||
MOVV a+0(FP), R4
|
||||
MOVV b+8(FP), R5
|
||||
ADDV R4, R5, R4
|
||||
MOVV R4, ret+16(FP)
|
||||
RET
|
||||
|
||||
// func dirtyG(a int64) int64
|
||||
// Deliberately clobbers R22, the goroutine pointer (a serious ABI violation).
|
||||
TEXT ·dirtyG(SB), NOSPLIT, $0-16
|
||||
MOVV $0x5678, R22
|
||||
MOVV a+0(FP), R4
|
||||
MOVV R4, ret+8(FP)
|
||||
RET
|
||||
Vendored
+21
@@ -0,0 +1,21 @@
|
||||
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
// func cleanAdd(a, b int64) int64
|
||||
// A well-behaved function that preserves the goroutine pointer.
|
||||
TEXT ·cleanAdd(SB), NOSPLIT, $0-24
|
||||
MOV a+0(FP), X5
|
||||
MOV b+8(FP), X6
|
||||
ADD X5, X6, X5
|
||||
MOV X5, ret+16(FP)
|
||||
RET
|
||||
|
||||
// func dirtyG(a int64) int64
|
||||
// Deliberately clobbers X27, the goroutine pointer (a serious ABI violation).
|
||||
TEXT ·dirtyG(SB), NOSPLIT, $0-16
|
||||
MOV $0x5678, X27
|
||||
MOV a+0(FP), X5
|
||||
MOV X5, ret+8(FP)
|
||||
RET
|
||||
Reference in New Issue
Block a user