What is annoying in the implementation of this patch:
http://gcc.gnu.org/ml/gcc-patches/2010-11/msg01810.html
is, that for what is essentially only a minor re-arranging of the
hook vectors, I had to create such a huge patch because all the
call sites of the moved hooks are affected, and also every target
had to get a bit of extra code to initialize the new target vector.

We also have the general annoyance in every port that you can't just
define the hooks you want, you first have to #undef their default definition.

Therefore, I'd like to propose the following changes:

1: At the end, target-def.h initalizes targetm, and whatever vectors we
   might want to split out of it nor or in the future.

   At the place where the targets currently initialize targetm, they include
   target-def.h; the previous inclusion of target-def.h is removed, and if
   necessary, hooks.h and/or targhooks.h are included directly (i.e. if
   functions from there are used directly in tm.c before the new inclusion
   point of target-def.h).
   Because target-hooks-def.h has #ifndef guard for all defined hooks,
   the #undef if previously defined hooks is no longer necessary (although
   there is no rush to remove the existing ones).

2: genhooks is changed so that is creates accessor macros for the target
   vector members, which are placed in a file included by target.h .
   For this purpose, the names of the global vector variables are specified
   in target.def .
   E.g. for targetm.calls.strict_argument_naming /
   target_internalm.calls.strict_argument_naming we'll have
   HOOK_CALLS_STRICT_ARGUMENT_NAMING .
   We can also add another wrapper using token pasting that is used like:
   HOOK(CALLS_STRICT_ARGUMENT_NAMING)
   or
   HOOK(CALLS, STRICT_ARGUMENT_NAMING)
   if you thing that'll be useful in the future for the transition to C++.

3: Hook call sites get changed to use the accessor macros, than can be
   staged split by affectde hook and/or affected files.

4: Once all call site of a hook have been converted to the accessor macros,
   the hook can be moved around painlessly.

Reply via email to