Guys, As easy as it just might be, the concept of ABI has always baffled me. According to wikipedia, ABI is a low-level interface between an application and an operating system or another application..Hmm, thats easy enough. Next it says it deals with data type, size, alignment, calling conventions etc. Easy enough too. Then I search more about it and i find there is a C++ ABI, there is a processor ABI(IA64 ABI), there is an OS ABI. How could there be so many entities defining ABI? Shouldnt there be one, maybe just an OS ABI which is written in conjuction with processor guys. I guess what i am interested in understanding is, where does it start? My guess is first processor has an ABI, then OS defines its ABI on top of processor's ABI and so on. Where should i start learning about it from? If this question doesnt qualify for here, can someone just tell me how and which ABI is GCC defined for? Any info in this is much appreciated!