--- tags: - low-level --- - How data structures & computational routines are accessed in machine code ([Code Types](Code%20Types.md)) - Machine code therefore hardware-dependent - API defines this structure in source code - Adherence usually responsibility of - [Compilers](Compilers.md) - OS - Library author # Components - Processor instruction set - Register file structure - Stack organisation - Memory access types - Size, layouts and alignments of basic data types - [Calling Conventions](Calling%20Conventions.md) - How function arguments are passed - Stack or register - Which registers for which function param - Parameter order - Return values retrieved - How app makes sys calls to OS - If ABI specifies direct sys calls over procedure calls to sys call stubs then sys call numbers - Binary format of object files, program files - For complete OS ABIs # Complete ABI - Allows program from one OS to run on any other without change - Provided all shared libraries and prerequisites etc # Embedded ABI - File format, data types, register usage, stack frame organisation, function parameter passing conventions - For embedded OS - [Compilers](Compilers.md) create object code compatible with code from other [compilers](Compilers.md) - Link libraries from different [compilers](Compilers.md)