October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk3 min

x86-64 ABI 0.99: What the AMD64 System V Draft Defines

The x86-64 ABI 0.99 refers to AMD64 System V Draft 0.99.6, a 2012 binary-interface specification for long-mode systems. Here are its key calling, stack, and Linux syscall conventions.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

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:

  • 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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.