Introduction
Calling conventions are usually considered part of the Application Binary Interface ''ABI''. Calling conventions may be related to a particular programming language's evaluation strategy, but most often are not considered part of it (or vice versa), as the evaluation strategy is usually defined on a higher abstraction level and seen as a part of the language rather than as a low-level implementation detail of a particular language'sRelated concepts
The contents of structures, or the names or meanings of the parameters and return values are defined in the Application Programming Interface, which is a separate though though related concept to ABI and calling convention. Calling conventions do not typically include information on handling lifespan of dynamically-allocated structures and objects. Calling conventions are unlikely to specify the layout of items within structures and objects, such as byte ordering or structure packing. The contents of the structures and objects would be considered part of the API, and not ABI. For Remote procedure calls, there is an analogous concept called Marshalling.Different calling conventions
Calling conventions may differ in: * Where parameters are placed. Options include registers, on the call stack, a mix of both, or in other memory structures. * The order in which parameters are passed * How functions that take a variable number of arguments ( variadic functions) are handled * How return values are delivered from the callee back to the caller. Options include on the stack, in a register, or reference to something allocated on the heap. * How long or complex values are handled, perhaps by splitting across multiple registers, within the stack frame, or with reference to memory. * How the task of setting up for and cleaning up after a function call is divided between the caller and the callee. In particular, how the stack frame is restored so the caller may continue after the callee has finished. * Whether and how metadata describing the arguments is passed * Where the previous value of the frame pointer is stored, which is used to restore the stack frame when the subroutine ends. Options include within the call stack, or in some register * Where any static scope links for the routine's non-local data access are placed (typically at one or more positions in the stack frame, but sometimes in a general register, or, for some architectures, in special-purpose registers) * For object-oriented languages, how the function's object is referenced If there is more than one calling sequence for a given architecture, they may differ in: * Conventions on which registers may be directly used by the callee, without being preserved * Which registers are considered to be volatile and, if volatile, need not be restored by the callee Many architectures only have one widely-used calling convention, often suggested by the architect. For RISCs including SPARC, MIPS, and RISC-V, registers names based on this calling convention are often used. For example, MIPS registers through have "ABI names" through , reflecting their use for parameter passing in the standard calling convention. (RISC CPUs have many equivalent general-purpose registers so there's typically no hardware reason for giving them names other than numbers.)Calling conventions within one platform
A given platform and language implementation may offer a choice of calling conventions. Reasons for this include performance, adaptation of conventions of other popular languages, and restrictions or conventions imposed by various " computing platforms". The calling convention of a given program's language may differ from the calling convention of the underlying platform, OS, or of some library being linked to. For example, on 32-bit windows, operating system calls have the ''Architectures
x86 (32-bit)
The 32-bit version of thex86-64
The 64-bit version of the x86 architecture, known asARM (A32)
The standard 32-bit ARM calling convention allocates the 15 general-purpose registers as: * r15: Program counter (as per the instruction set specification). * r14: Link register. The BL instruction, used in a subroutine call, stores the return address in this register. * r13: Stack pointer. The Push/Pop instructions in "Thumb" operating mode use this register only. * r12: Intra-Procedure-call scratch register. * r4 to r11: Local variables. * r0 to r3: Argument values passed to a subroutine and results returned from a subroutine. If the type of value returned is too large to fit in r0 to r3, or whose size cannot be determined statically at compile time, then the caller must allocate space for that value at run time, and pass a pointer to that space in r0. Subroutines must preserve the contents of r4 to r11 and the stack pointer (perhaps by saving them to the stack in theARM (A64)
The 64-bit ARM ( AArch64) calling convention allocates the 31 general-purpose registers as: * x31 (SP): Stack pointer or a zero register, depending on context. * x30 (LR): Procedure link register, used to return from subroutines. * x29 (FP): Frame pointer. * x19 to x29: Callee-saved. * x18 (PR): Platform register. Used for some operating-system-specific special purpose, or an additional caller-saved register. * x16 (IP0) and x17 (IP1): Intra-Procedure-call scratch registers. * x9 to x15: Local variables, caller saved. * x8 (XR): Indirect return value address. * x0 to x7: Argument values passed to and results returned from a subroutine. All registers starting with ''x'' have a corresponding 32-bit register prefixed with ''w''. Thus, a 32-bit x0 is called w0. Similarly, the 32 floating-point registers are allocated as: * v0 to v7: Argument values passed to and results returned from a subroutine. * v8 to v15: callee-saved, but only the bottom 64 bits need to be preserved. * v16 to v31: Local variables, caller saved.POWER, PowerPC, and Power ISA
The POWER, PowerPC, and Power ISA architectures have a large number of registers so most functions can pass all arguments in registers for ''single level'' calls. Additional arguments are passed on the stack, and space for register-based arguments is also always allocated on the stack as a convenience to the called function in case multi-level calls are used (recursive or otherwise) and the registers must be saved. This is also of use in variadic functions, such as , where the function's arguments need to be accessed as an array. A single calling convention is used for all procedural languages. Branch-and-link instructions store the return address in a special link register separate from the general-purpose registers; a routine returns to its caller with a branch instruction that uses the link register as the destination address. Leaf routines do not need to save or restore the link register; non-leaf routines must save the return address before making a call to another routine and restore it before it returns, saving it by using the Move From Special Purpose Register instruction to move the link register to a general-purpose register and, if necessary, then saving it to the stack, and restoring it by, if it was saved to the stack, loading the saved link register value to a general-purpose register, and then using the Move To Special Purpose Register instruction to move the register containing the saved link-register value to the link register.MIPS
The O32 ABI is ''the'' most commonly-used ABI, owing to its status as the original System V ABI for MIPS. It is strictly stack-based, with only four registers available to pass arguments. This perceived slowness, along with an antique floating-point model with 16 registers only, has encouraged the proliferation of many other calling conventions. The ABI took shape in 1990 and was never updated since 1994. It is only defined for 32-bit MIPS, but GCC has created a 64-bit variation called O64. For 64-bit, the N64 ABI (not related to Nintendo 64) by Silicon Graphics is most commonly used. The most important improvement is that eight registers are now available for argument passing; It also increases the number of floating-point registers to 32. There is also an ILP32 version called N32, which uses 32-bit pointers for smaller code, analogous to the x32 ABI. Both run under the 64-bit mode of the CPU. A few attempts have been made to replace O32 with a 32-bit ABI that resembles N32 more. A 1995 conference came up with MIPS EABI, for which the 32-bit version was quite similar. EABI inspired MIPS Technologies to propose a more radical "NUBI" ABI that additionally reuses argument registers for the return value. MIPS EABI is supported by GCC but not LLVM; neither supports NUBI. For all of O32 and N32/N64, the return address is stored in a register. This is automatically set with the use of the (jump and link) or (jump and link register) instructions. The stack grows downwards.SPARC
The SPARC architecture, unlike most RISC architectures, is built on register windows. There are 24 accessible registers in each register window: 8 are the "in" registers (%i0-%i7), 8 are the "local" registers (%l0-%l7), and 8 are the "out" registers (%o0-%o7). The "in" registers are used to pass arguments to the function being called, and any additional arguments need to be pushed onto theIBM System/360 and successors
The IBM System/360 is another architecture without a hardware stack. The examples below illustrate the calling convention used by OS/360 and successors prior to the introduction of 64-bit z/Architecture; other operating systems for System/360 might have different calling conventions. Calling program: LA 1,ARGS Load argument list address L 15,=A(SUB) Load subroutine address BALR 14,15 Branch to called routine1 ... ARGS DC A(FIRST) Address of 1st argument DC A(SECOND) ... DC A(THIRD)+X'80000000' Last argument2 Called program: SUB EQU * This is the entry point of the subprogram Standard entry sequence: USING *,153 STM 14,12,12(13) Save registers4 ST 13,SAVE+4 Save caller's savearea addr LA 12,SAVE Chain saveareas ST 12,8(13) LR 13,12 ... Standard return sequence: L 13,SAVE+45 LM 14,12,12(13) L 15,RETVAL6 BR 14 Return to caller SAVE DS 18F Savearea7 Notes: # The instruction stores the address of the next instruction (return address) in the register specified by the first argument—register 14—and branches to the second argument address in register 15. # The caller passes the address of a list of argument addresses in register 1. The last address has the high-order bit set to indicate the end of the list. This limits programs using this convention toSuperH
Note: "preserved" reserves to callee saving; same goes for "guaranteed".68k
The most common calling convention for the Motorola 68000 series is: * d0, d1, a0 and a1 are scratch registers * All other registers are callee-saved * a6 is the frame pointer, which can be disabled by a compiler option * Parameters are pushed onto the stack, from right to left * Return value is stored in d0IBM 1130
The IBM 1130 was a small 16-bit word-addressable machine. It had only six registers plus condition indicators, and no stack. The registers are ''Instruction Address Register (IAR)'', ''Accumulator (ACC)'', ''Accumulator Extension (EXT)'', and three index registers X1–X3. The calling program is responsible for saving ACC, EXT, X1, and X2. There are two* 1130 subroutine example ENT SUB Declare "SUB" an external entry point SUB DC 0 Reserved word at entry point, conventionally coded "DC *-*" * Subroutine code begins here * If there were arguments the addresses can be loaded indirectly from the return address LDX I 1 SUB Load X1 with the address of the first argument (for example) ... * Return sequence LD RES Load integer result into ACC * If no arguments were provided, indirect branch to the stored return address B I SUB If no arguments were provided END SUBSubroutines in IBM 1130,
Implementation considerations
This variability must be considered when combining modules written in multiple languages, or when calling operating system or library APIs from a language other than the one in which they are written; in these cases, special care must be taken to coordinate the calling conventions used by caller and callee. Even a program using a single programming language may use multiple calling conventions, either chosen by the compiler, for code optimization, or specified by the programmer.Threaded code
Threaded code places all the responsibility for setting up for and cleaning up after a function call on the called code. The calling code does nothing but list the subroutines to be called. This puts all the function setup and clean-up code in one place—the prologue and epilogue of the function—rather than in the many places that function is called. This makes threaded code the most compact calling convention. Threaded code passes all arguments on the stack. All return values are returned on the stack. This makes naive implementations slower than calling conventions that keep more values in registers. However, threaded code implementations that cache several of the top stack values in registers—in particular, the return address—are usually faster than subroutine calling conventions that always push and pop the return address to the stack.PL/I
The default calling convention for programs written in the PL/I language passes all arguments by reference, although other conventions may optionally be specified. The arguments are handled differently for different compilers and platforms, but typically the argument addresses are passed via an argument list in memory. A final, hidden, address may be passed pointing to an area to contain the return value. Because of the wide variety of data types supported by PL/I a data descriptor may also be passed to define, for example, the lengths of character or bit strings, the dimension and bounds of arrays ( dope vectors), or the layout and contents of a data structure. ''Dummy arguments'' are created for arguments which are constants or which do not agree with the type of argument the called procedure expects.See also
* Application binary interface * Application programming interface * Comparison of application virtual machines * Continuation-passing style * Foreign function interface * Language binding * Name mangling * Spaghetti stack * SWIG * Tail call optimizationReferences
External links
*