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:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.