C++ has an ABI that almost all vendors actively work towards conformance to called the Itanium C++ ABI (yes, it applies to other architectures too):
This document was developed jointly by an informal
industry coalition consisting of (in alphabetical order)
CodeSourcery, Compaq, EDG, HP, IBM, Intel, Red Hat, and
SGI. Additional contributions were provided by a variety of
individuals.
...
In general, this document is written as a generic
specification, to be usable by C++ implementations on a
variety of architectures.
True, what many perceive as the C ABI is actually the OS ABI.
As most OSs tend to be written mostly in C, it is natural that C ABI == OS ABI.
In the few cases where the OS was written in other languages, like the mainframe systems, the early 80's OS done in Pascal dialects (Mac OS), Modula-2 (Lillith), Assembly (MS-DOS/CP-M) and many others to list here, there was no C ABI to speak of.
That isn't true. IBM and Oracle's compiler do not share a compatible ABI with g++ or clang. Oracle is adopting the common ABI in Studio 13 and that's a pretty big deal.