The “x86-64 ABI 0.99” refers to the System V AMD64 ABI Draft Version 0.99.6, dated July 2, 2012—not a finalized release. It describes how compatible software components exchange data and interact on AMD64 systems running in long mode, including function calls, stack use, ELF files, and Linux-specific conventions. Its rules are platform-specific: they should not be assumed to apply to every x86-64 operating system.
What is the x86-64 ABI?
An application binary interface (ABI) is a contract that lets separately compiled software work together at the binary level. It specifies matters such as data representation, how function arguments and return values are passed, which registers a function must preserve, stack conventions, and object-file and linker details.
As an Amazon Associate I earn from qualifying purchases.
The relevant document is the Linux Foundation-hosted System V Application Binary Interface: AMD64 Architecture Processor Supplement, Draft Version 0.99.6. It is dated July 2, 2012. The draft states: “The AMD64 ABI does not apply to such programs; this document applies only to programs running in the ‘long’ mode provided by the AMD64 architecture.” In other words, its scope excludes programs running in legacy compatibility modes.
This is an interface specification, not a processor instruction manual. It covers the low-level machine interface and calling sequences, as well as the operating-system interface, ELF object files, program loading, dynamic linking, libraries, and language-related conventions. The Linux man-pages project’s elf(5) page, Linux man-pages 6.19, dated August 7, 2026, still lists an AMD64 ABI draft as a reference. That reference does not establish that the 2012 Draft Version 0.99.6 is the newest ABI text.
#1 Best Overall
Which registers pass function arguments?
For integer-class and pointer arguments, the first six eligible arguments are passed in this order: RDI, RSI, RDX, RCX, R8, and R9. This familiar list is only a shortcut for part of the rule, not a complete description of parameter passing.
The ABI classifies argument types and assigns them accordingly. Floating-point and vector values use different registers, and aggregate values may be split across registers or passed in memory depending on their classification and available registers. When a value cannot be passed in registers under the ABI’s rules, it is passed on the stack. A function signature’s actual types therefore matter; counting arguments alone is not enough to determine where every value goes.
Rank #2
How are return values passed?
Return registers depend on the value’s ABI class. Integer-class results use RAX, with a second result component, where applicable, in RDX. SSE-class results use XMM0 and, where needed, XMM1.
Recommended Free Tools
Some memory-class results are returned through storage supplied by the caller. The caller passes the address of that storage as a hidden first argument, so the registers visible in the source-level function signature may not tell the whole story about the machine-level call.
What is the x86-64 red zone?
Under this user-space ABI convention, the 128 bytes immediately below the stack pointer (RSP) are reserved from modification by signal or interrupt handlers. A function may use this red zone for short-lived temporary data without adjusting RSP to allocate that space.
This rule is not universal across execution contexts. The draft’s Linux appendix says kernel code does not honor the red zone, so kernel code must not rely on it.
Rank #4
How are Linux system calls different from function calls?
A Linux system call crosses into the kernel using a convention distinct from the ordinary user-space function calling convention. In the ABI’s Linux appendix, the system-call number goes in RAX, and the syscall instruction enters the kernel. Integer arguments use registers, but the fourth argument is in R10, not RCX.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →That difference matters when writing low-level assembly: reusing a function-call register map for a raw system call can place an argument incorrectly. The appendix advises user programs to use C-library system-call wrappers rather than make system calls directly.
Best Value
What to check when applying or comparing ABI rules
Before relying on a convention, identify the target platform and interface. The AMD64 System V draft does not establish that every x86-64 operating system follows the same rules. When comparing it with another ABI, examine the actual areas where conventions can differ:
Quick Recap
- Platform and operating system: confirm that the specification targets the environment in question.
- Argument and return classification: check how the ABI treats integer, pointer, floating-point, vector, and aggregate values.
- Register preservation and stack rules: verify which registers a callee preserves, required stack alignment, and whether a red zone exists.
- Special call cases: examine variadic-call handling as well as ordinary function calls.
- Kernel interface: distinguish system-call numbers, argument registers, and entry instructions from user-level function conventions.
- Object and linking conventions: compare ELF, relocation, loading, and dynamic-linking rules.
- Revision date: record the exact ABI document and revision rather than treating “0.99” as a final or current version label.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




