abi-and-calling-conventions

v2026.09.24

ABI and calling conventions skill for cross-language boundaries. Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Activates on queries about calling convention, ABI, System V AMD64, AAPCS, stack frame, variadic function, or FFI registers.

GitHub
安装命令
npx skhub add mohitmishra786/abi-and-calling-conventions
Markdown
SKILL.md

ABI and Calling Conventions

Purpose

Document application binary interface (ABI) rules: register roles, stack alignment, argument passing, return values, and variadic conventions across System V AMD64, ARM AAPCS, and RISC-V — essential for assembly, FFI, and debugging.

When to Use

  • Writing assembly thunks or inline asm clobbers
  • Debugging corrupted stack in mixed C/asm
  • FFI between Rust/C/Zig (skills/rust/rust-ffi, skills/zig/zig-cinterop)
  • Reading disassembly from skills/debuggers/gdb

Workflow

1. System V AMD64 (Linux/macOS)

ItemRule
Integer argsrdi, rsi, rdx, rcx, r8, r9
XMM argsxmm0–xmm7 (float)
Return int/ptrrax (+ rdx for 128-bit)
Stack alignment16-byte before call
Red zone128 bytes below rsp (Linux)
Callee-savedrbx, rbp, r12–r15
/* void foo(int a, int b, int c, int d, int e, int f, int g); */
/* a–f in regs, g on stack */

Windows x64 differs — see skills/compilers/msvc-cl.

2. ARM AAPCS (AArch32/AArch64)

AArch64:

ItemRule
Integer argsx0–x7
Float argsv0–v7
Returnx0/x1 or v0
Stack align16-byte
Callee-savedx19–x28, fp (x29), lr (x30)

Thumb interworking: LSB of function pointer set for Thumb code.

See skills/low-level-programming/assembly-arm.

3. RISC-V psABI (RV64)

ItemRule
Integer argsa0–a7
Callee-saveds0–s11, sp
Returna0, a1
Stack align16-byte

See skills/low-level-programming/assembly-riscv.

4. Stack frame layout (conceptual)

high addresses
├── return address
├── saved frame pointer
├── local variables
├── spill slots / alignment padding
└── outgoing args (if any)
low addresses (rsp)

5. Variadic functions

System V: al holds number of vector args used; register_save_area on stack for va_start. Prefer typed wrappers over raw va_arg in portable FFI.

6. Verify in compiler output

gcc -O2 -S -o - foo.c   # study .cfi_* and mov args
objdump -d -M intel ./a.out

7. Agent usage

/abi-and-calling-conventions Which registers hold args 5–8 in AArch64 for my C function?

Common Problems

SymptomCauseFix
Crash on callStack misalignedAlign rsp mod 16
Wrong float argXMM vs GPR mismatchMatch prototype
Corrupt callee-savedAsm clobber missingList in clobber or save
FFI garbageWindows vs SysV mixMatch toolchain ABI
Variadic UBWrong type to va_argCast to promoted type

Related Skills

  • skills/low-level-programming/assembly-x86 — x86-64 asm
  • skills/low-level-programming/assembly-arm — AAPCS examples
  • skills/low-level-programming/assembly-riscv — RISC-V asm
  • skills/rust/rust-ffi — extern "C" guarantees
  • skills/binaries/elf-inspection — symbol and relocation views
发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

MIT

源路径

skills/computer-architecture/abi-and-calling-conventions

默认分支

main

最新提交

bdc5847

Tree SHA

1178323