ARM64系统调用:各OS差异及进位标志错误上报适用性咨询
ARM64架构下各操作系统的系统调用错误返回机制与差异资源
一、错误上报机制是否通用?
答案是否定的,不同ARM64操作系统的错误上报逻辑差异明显:
- iOS/macOS(ARM64):和你了解的一致,系统调用出错时会设置进位标志(C flag),此时
x0寄存器存储错误码(对应标准C的errno值);调用成功则进位标志清零,x0返回正常结果。 - Linux(ARM64):错误通过返回值的负数标识——若
x0返回负数(如-EINVAL、-EPERM),则表示调用失败,对应的正数即为errno值;进位标志不参与错误判断,成功时x0返回非负结果。 - Android(ARM64):基于Linux内核,错误上报逻辑和Linux ARM64完全一致,依靠返回负数表示错误,进位标志不用于错误标识。
- Windows(ARM64):系统调用(NT API)出错时,
x0返回NTSTATUS类型错误码(如STATUS_ACCESS_DENIED),这类错误码本身是高位为1的32位负值;同时会设置条件标志中的**零标志(Z flag)**标记失败,成功时x0返回STATUS_SUCCESS,零标志清零。
二、各OS ARM64系统调用差异的参考资源
以下是无需跳转外链的实用资源方向:
- Linux ARM64:查看Linux内核源码中
arch/arm64/include/asm/syscall.h和arch/arm64/kernel/syscall.c文件,里面定义了系统调用号、寄存器传递规则和返回逻辑;Linux官方文档的ARM64架构章节也有详细说明。 - iOS/macOS ARM64:苹果开发者文档中的「ARM64汇编编程指南」明确了系统调用的寄存器使用、错误返回机制;Xcode提供的
sys/syscall.h等系统头文件里有系统调用号的定义。 - Windows ARM64:微软官方的「Windows ARM64内核模式编程指南」和「NT API参考文档」,详细说明了系统调用的参数传递、返回值和错误标识规则;
ntstatus.h头文件定义了所有NT状态码。 - Android ARM64:核心参考Linux ARM64的资源即可,额外可查看Android NDK中的
syscall.h和相关汇编文档,了解Android特有的系统调用扩展。
内容的提问来源于stack exchange,提问作者localacct
相关产品推荐
相关产品推荐

