SPRAB89A September 2011 – March 2014
The C6000 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 C6000 ABI they are declared as pointers to functions that return void *, corresponding to 'this'.