You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:04:59