[Dwarf-Discuss] compilers generating ABI non-compliant function calls?

Andrew Cagney andrew.cagney@gmail.com
Tue Mar 9 15:05:04 GMT 2021


Part of a typical Application Binary Interface is to specify the
function calling convention.  Several uses are:

- ensuring function calls across interface boundaries work (function
in one object calls function in second object)
- the debugger supplementing the debug information describing the
location of parameters
- the debugger implementing inferior function calls

Typically calls both between and within object files (DWARF
compilation unit) follow the ABI (with exceptions for things like
__mul, but good ABIs even defined those).

Technically, however, only functions visible via an interface need
comply with the ABI.  This means that:

- for simple objects, local functions; and
- with link-time-optimization, everything except library interface functions

are fair game for ABI non-compliant call optimizations.

Is anyone aware of a compiler doing this (I figure with LTO there's a
strong incentive)?  And if so, how is this described to the debugger.
The ABI / calling-convention is no longer on hand for filling in the
blanks.

(Keep in mind that this is different to adding an attribute to a
function indicating it should follow a different calling convention -
while different, it is still defined ahead of time).



More information about the Dwarf-discuss mailing list