Knowledge

Application binary interface

Source đź“ť

41: 33: 291: 262:
may be avoided to allow smaller executables and faster loading, fixed register usage allows more compact stacks and kernel calls, and running the application in privileged mode allows direct access to custom hardware operation without the indirection of calling a device driver. The choice of EABI
122:, operating system, or library author. However, an application programmer may have to deal with an ABI directly when writing a program in a mix of programming languages, or even compiling a program written in the same language with different compilers. 257:
EABIs are designed to optimize for performance within the limited resources of an embedded system. Therefore, EABIs omit most abstractions that are made between kernel and user code in complex operating systems. For example,
200:(iBCS), allows a program from one operating system supporting that ABI to run without modifications on any other such system, provided that necessary shared libraries are present, and similar prerequisites are fulfilled. 555:
Strictly speaking, both the old and new ARM ABIs are subsets of the ARM EABI specification, but in everyday usage the term "EABI" is used to mean the new one described here and "OABI" or "old-ABI" to mean the old
278:
EABI. Specific software implementations like the C library may impose additional limitations to form more concrete ABIs; one example is the GNU OABI and EABI for ARM, both of which are subsets of the ARM EABI .
249:
that is compatible with code generated by other such compilers, allowing developers to link libraries generated with one compiler with object code generated with another compiler. Developers writing their own
653: 315: 576: 611: 815: 646: 639: 820: 197: 471: 96: 444: 111:, which determines how data is provided as input to, or read as output from, computational routines. Examples of this are the 211:
propagation, and calling convention between compilers on the same platform, but do not require cross-platform compatibility.
573: – a compendium of development rules of thumb for not breaking binary compatibility between library releases 591: 497: 296: 57: 767: 325: 134:
Processor instruction set, with details like register file structure, stack organization, memory access types, etc.
601: 762: 731: 305: 236: 176:
to the operating system, and if the ABI specifies direct system calls rather than procedure calls to system call
679: 138: 570: 112: 53: 736: 152: 56:. After compilation, the binaries offer an ABI. Keeping this ABI stable over a long time is important for 345: 77: 746: 621: 17: 711: 694: 81: 606: 520: 789: 777: 684: 335: 208: 148: 108: 794: 275: 251: 65: 167:
Whether the caller or callee is responsible for cleaning up the stack after the function call
118:
Adhering to an ABI (which may or may not be officially standardized) is usually the job of a
772: 330: 271: 85: 618: (archived 2015-01-14) – a summary and comparison of some popular ABIs 615: 595: 425: 259: 232: 40: 32: 782: 726: 699: 406: 340: 104: 809: 716: 631: 475: 433:(Version 1.0 ed.). Freescale Semiconductor, Inc. 1 October 1995. pp. 28–30. 204: 49: 706: 360: 350: 320: 92: 45: 448: 155:
are passed, and return values retrieved; for example, it controls the following:
741: 721: 379: 290: 246: 228: 224: 184: 177: 173: 164:
Whether the first function parameter passed on the stack is pushed first or last
100: 158:
Whether all parameters are passed on the stack, or some are passed in registers
689: 286: 391: 91:
An ABI defines how data structures or computational routines are accessed in
142: 625: 36:
A high-level comparison of in-kernel and kernel-to-userspace APIs and ABIs
310: 254:
code may also interface with assembly generated by a compliant compiler.
242: 119: 267: 546: 581: 183:
In the case of a complete operating system ABI, the binary format of
80:
between two binary program modules. Often, one of these modules is a
427:
PowerPC Embedded Application Binary Interface: 32-Bit Implementation
95:, which is a low-level, hardware-dependent format. In contrast, an 88:
facility, and the other is a program that is being run by a user.
355: 103:, which is a relatively high-level, hardware-independent, often 635: 602:
Application Binary Interface (ABI) for the ARM Architecture
586: 161:
Which registers are used for which function parameters
622:
M•CORE Applications Binary Interface Standards Manual
470:
Andrés Calderón and Nelson Castillo (14 March 2007).
755: 670: 447:. Linuxdevices.com. 16 October 2016. Archived from 231:organization, and function parameter passing of an 316:Comparison of application virtualization software 130:Details covered by an ABI include the following: 203:ABIs can also standardize details such as the 647: 571:Policies/Binary Compatibility Issues With C++ 8: 592:AMD64 (x86-64) Application Binary Interface 654: 640: 632: 419: 417: 380:Intel Binary Compatibility Standard (iBCS) 223:(EABI) specifies standard conventions for 27:Binary interface between two program units 612:Sun Studio 10 Compilers and the AMD64 ABI 107:format. A common aspect of an ABI is the 411:(compatible with multiple architectures) 396:(compatible with multiple architectures) 39: 31: 372: 445:"Debian ARM accelerates via EABI port" 151:, which controls how the arguments of 145:that the processor can directly access 587:μClib: Motorola 8/16-bit embedded ABI 407:"Itanium C++ ABI: Exception Handling" 221:embedded-application binary interface 18:Embedded-application binary interface 7: 198:Intel Binary Compatibility Standard 816:Application programming interfaces 474:. Linuxdevices.com. Archived from 361:Visual C++ ABI instability details 235:software program, for use with an 25: 519:Eric Christopher (11 June 2003). 97:application programming interface 289: 172:How an application should make 498:"ABI for the Arm Architecture" 227:, data types, register usage, 1: 245:that support the EABI create 99:(API) defines this access in 663:Application binary interface 577:OS X ABI Function Call Guide 196:A complete ABI, such as the 70:application binary interface 821:Operating system technology 525:binutils@sources.redhat.com 297:Computer programming portal 837: 768:Foreign function interface 598: (archived 2008-05-28) 326:Foreign function interface 266:Widely used EABIs include 763:Binary-code compatibility 732:Position-independent code 521:"mips eabi documentation" 306:Binary-code compatibility 237:embedded operating system 187:, program libraries, etc. 180:, the system call numbers 472:"Why ARM's EABI matters" 263:can affect performance. 607:MIPS EABI documentation 113:x86 calling conventions 61: 37: 346:PowerOpen Environment 43: 35: 747:Virtual method table 582:Debian ARM EABI port 137:Sizes, layouts, and 712:Memory segmentation 500:. Developer.arm.com 685:Calling convention 624:for the Freescale 451:on 21 January 2007 336:Native (computing) 149:Calling convention 109:calling convention 62: 38: 803: 802: 795:Year 2038 problem 392:"Itanium C++ ABI" 252:assembly language 205:C++ name mangling 66:computer software 16:(Redirected from 828: 773:Language binding 656: 649: 642: 633: 559: 558: 543: 537: 536: 534: 532: 516: 510: 509: 507: 505: 494: 488: 487: 485: 483: 478:on 31 March 2007 467: 461: 460: 458: 456: 441: 435: 434: 432: 424:"EABI Summary". 421: 412: 410: 403: 397: 395: 388: 382: 377: 331:Language binding 299: 294: 293: 86:operating system 21: 836: 835: 831: 830: 829: 827: 826: 825: 806: 805: 804: 799: 751: 672: 666: 660: 616:Wayback Machine 596:Wayback Machine 567: 562: 545: 544: 540: 530: 528: 518: 517: 513: 503: 501: 496: 495: 491: 481: 479: 469: 468: 464: 454: 452: 443: 442: 438: 430: 423: 422: 415: 405: 404: 400: 390: 389: 385: 378: 374: 370: 365: 295: 288: 285: 260:dynamic linking 217: 194: 128: 28: 23: 22: 15: 12: 11: 5: 834: 832: 824: 823: 818: 808: 807: 801: 800: 798: 797: 792: 787: 786: 785: 775: 770: 765: 759: 757: 756:Related topics 753: 752: 750: 749: 744: 739: 734: 729: 727:Opaque pointer 724: 719: 714: 709: 704: 703: 702: 692: 687: 682: 676: 674: 668: 667: 661: 659: 658: 651: 644: 636: 630: 629: 619: 609: 604: 599: 589: 584: 579: 574: 566: 565:External links 563: 561: 560: 538: 527:(Mailing list) 511: 489: 462: 436: 413: 398: 383: 371: 369: 366: 364: 363: 358: 353: 348: 343: 341:Opaque pointer 338: 333: 328: 323: 318: 313: 308: 302: 301: 300: 284: 281: 216: 213: 193: 190: 189: 188: 181: 170: 169: 168: 165: 162: 159: 146: 135: 127: 124: 105:human-readable 26: 24: 14: 13: 10: 9: 6: 4: 3: 2: 833: 822: 819: 817: 814: 813: 811: 796: 793: 791: 788: 784: 781: 780: 779: 776: 774: 771: 769: 766: 764: 761: 760: 758: 754: 748: 745: 743: 740: 738: 735: 733: 730: 728: 725: 723: 720: 718: 717:Name mangling 715: 713: 710: 708: 705: 701: 698: 697: 696: 693: 691: 688: 686: 683: 681: 678: 677: 675: 669: 664: 657: 652: 650: 645: 643: 638: 637: 634: 627: 623: 620: 617: 613: 610: 608: 605: 603: 600: 597: 593: 590: 588: 585: 583: 580: 578: 575: 572: 569: 568: 564: 557: 552: 548: 547:"ArmEabiPort" 542: 539: 526: 522: 515: 512: 499: 493: 490: 477: 473: 466: 463: 450: 446: 440: 437: 429: 428: 420: 418: 414: 408: 402: 399: 393: 387: 384: 381: 376: 373: 367: 362: 359: 357: 354: 352: 349: 347: 344: 342: 339: 337: 334: 332: 329: 327: 324: 322: 319: 317: 314: 312: 309: 307: 304: 303: 298: 292: 287: 282: 280: 277: 273: 269: 264: 261: 255: 253: 248: 244: 240: 238: 234: 230: 226: 222: 215:Embedded ABIs 214: 212: 210: 206: 201: 199: 192:Complete ABIs 191: 186: 182: 179: 175: 171: 166: 163: 160: 157: 156: 154: 150: 147: 144: 140: 136: 133: 132: 131: 125: 123: 121: 116: 114: 110: 106: 102: 98: 94: 89: 87: 83: 79: 75: 71: 67: 59: 55: 51: 50:GNU C Library 47: 42: 34: 30: 19: 707:Machine code 662: 554: 550: 541: 529:. Retrieved 524: 514: 502:. Retrieved 492: 480:. Retrieved 476:the original 465: 453:. Retrieved 449:the original 439: 426: 401: 386: 375: 351:Symbol table 321:Debug symbol 265: 256: 241: 225:file formats 220: 218: 202: 195: 185:object files 174:system calls 129: 117: 93:machine code 90: 73: 69: 63: 46:Linux kernel 29: 742:System call 722:Object code 673:conventions 551:Debian Wiki 247:object code 229:stack frame 126:Description 101:source code 52:define the 810:Categories 737:Relocation 690:Call stack 628:processors 504:4 February 482:11 October 455:11 October 368:References 143:data types 139:alignments 680:Alignment 274:EABI and 243:Compilers 209:exception 153:functions 141:of basic 78:interface 54:Linux API 311:Bytecode 283:See also 233:embedded 120:compiler 76:) is an 783:dynamic 695:Library 614:at the 594:at the 531:19 June 268:PowerPC 82:library 790:Loader 778:Linker 700:static 671:Parts, 626:M·CORE 665:(ABI) 431:(PDF) 178:stubs 68:, an 556:one. 533:2020 506:2020 484:2007 457:2007 356:SWIG 276:MIPS 58:ISVs 48:and 44:The 272:Arm 219:An 84:or 74:ABI 64:In 812:: 553:. 549:. 523:. 416:^ 270:, 239:. 207:, 115:. 655:e 648:t 641:v 535:. 508:. 486:. 459:. 409:. 394:. 72:( 60:. 20:)

Index

Embedded-application binary interface


Linux kernel
GNU C Library
Linux API
ISVs
computer software
interface
library
operating system
machine code
application programming interface
source code
human-readable
calling convention
x86 calling conventions
compiler
alignments
data types
Calling convention
functions
system calls
stubs
object files
Intel Binary Compatibility Standard
C++ name mangling
exception
file formats
stack frame

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑