Skip to content
Development
Skill

/abi-and-calling-conventions

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

From plugin
low-level-dev-skills
159142 skills
Install
$ npx -y skills add mohitmishra786/low-level-dev-skills --skill abi-and-calling-conventions --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/abi-and-calling-conventions

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

SKILL.md

abi-and-calling-conventions.SKILL.md
name: abi-and-calling-conventions
description: 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.

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)

| Item | Rule | |------|------| | Integer args | `rdi, rsi, rdx, rcx, r8, r9` | | XMM args | `xmm0`–`xmm7` (float) | | Return int/ptr | `rax` (+ `rdx` for 128-bit) | | Stack alignment | 16-byte before `call` | | Red zone | 128 bytes below `rsp` (Linux) | | Callee-saved | `rbx, 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:**

| Item | Rule | |------|------| | Integer args | `x0`–`x7` | | Float args | `v0`–`v7` | | Return | `x0`/`x1` or `v0` | | Stack align | 16-byte | | Callee-saved | `x19`–`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)

| Item | Rule | |------|------| | Integer args | `a0`–`a7` | | Callee-saved | `s0`–`s11`, `sp` | | Return | `a0`, `a1` | | Stack align | 16-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

| Symptom | Cause | Fix | |---------|-------|-----| | Crash on `call` | Stack misaligned | Align `rsp` mod 16 | | Wrong float arg | XMM vs GPR mismatch | Match prototype | | Corrupt callee-saved | Asm clobber missing | List in clobber or save | | FFI garbage | Windows vs SysV mix | Match toolchain ABI | | Variadic UB | Wrong type to `va_arg` | Cast 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
Read more
Ships withlow-level-dev-skills

A curated suite of AI agent skills for systems and low-level programming — C/C++, Rust, Zig, GPU, bare-metal firmware, Linux kernel/driver development, computer architecture, compiler internals, HPC, and more.

Get the whole plugin
Stats
172
Stars
24
Forks
Maintained
Maintenance
JavaScript
Language
MIT
License
1mo ago
Last commit
5mo ago
Created

Repo: mohitmishra786/low-level-dev-skills

Other skills on low-level-dev-skills.