SPRAC71B February 2019 – October 2023
The C28x follows the ARM EABI, under which the C1 and C2 constructors return the this pointer. Doing so allows tail-call optimization of calls to these functions.
Similarly, non-virtual calls to D1 and D2 destructors return 'this'. Calls to virtual destructors use thunk functions, which do not return 'this'.
Section 3.3 of the GC++ABI specifies several library helper functions for array new and delete, which take pointers to constructors or destructors as parameters. In the GC++ABI these parameters are declared as pointers to functions returning void, but in the C28x ABI they are declared as pointers to functions that return void *, corresponding to 'this'.