> sheesh … EWRONGREVISEDPATCH > > > On 5 Nov 2021, at 13:08, Iain Sandoe <iains....@gmail.com> wrote: > > > > I tried enabling this on x86-64-linux (just for interest) and it seems to > > work > > OK there too - but that testing revealed a thinko that didn’t show with a > > a normal regstrap. > > … now with the correct patch. > > [PATCH v2] IPA: Provide a mechanism to register static DTORs via > cxa_atexit. > > For at least one target (Darwin) the platform convention is to > register static destructors (i.e. __attribute__((destructor))) > with __cxa_atexit rather than placing them into a list that is > run by some other mechanism. > > This patch provides a target hook that allows a target to opt > into this and handling for the process in ipa_cdtor_merge (). > > When the mode is enabled (dtors_from_cxa_atexit is set) we: > > * Generate new CTORs to register static destructors with > __cxa_atexit and add them to the existing list of CTORs; > we then process the revised CTORs list. > > * We sort the DTORs into priority and then TU order, this > means that they are registered in that order with > __cxa_atexit () and therefore will be run in the reverse > order. > > * Likewise, CTORs are sorted into priority and then TU order, > which means that they will run in that order. > > This matches the behavior of using init/fini (or > mod_init_func/mod_term_func) sections. > > Signed-off-by: Iain Sandoe <i...@sandoe.co.uk> > > gcc/ChangeLog: > > * config/darwin.h (TARGET_DTORS_FROM_CXA_ATEXIT): New. > * doc/tm.texi: Regenerated. > * doc/tm.texi.in: Add TARGET_DTORS_FROM_CXA_ATEXIT hook. > * ipa.c (ipa_discover_variable_flags): > (cgraph_build_static_cdtor_1): Return the built function > decl. > (build_cxa_atexit_decl): New. > (build_dso_handle_decl): New. > (build_cxa_dtor_registrations): New. > (compare_cdtor_tu_order): New. > (build_cxa_atexit_fns): New. > (ipa_cdtor_merge): If dtors_from_cxa_atexit is set, > process the DTORs/CTORs accordingly. > (pass_ipa_cdtor_merge::gate): Also run if > dtors_from_cxa_atexit is set. > * target.def (dtors_from_cxa_atexit): New hook.
OK, thanks! Honza