CUMULATIVE_ARGS in hooks (Was: RFC: semi-automatic hookization)

Paolo Bonzini bonzini@gnu.org
Wed Nov 17 04:06:00 GMT 2010


On 11/17/2010 03:10 AM, Ian Lance Taylor wrote:
> Joern Rennecke<amylaar@spamcop.net>  writes:
>> I don't see how going to a struct cumulative_args gets us closer
>> to a viable solution for a multi-target executable, even if you
>> threw in C++.  Having the target describe a type, and shoe-horning
>> this through a target hook interface that is decribed in supposedly
>> target-independent terms will require a cast at some point. [...]
>> Converting an empty base class to a derived class is not really
>> safer than converting a void * to a struct pointer.

True, but you can hide that cast in a base class.  For example you can 
use a hierarchy

     Target                           // abstract base
         TargetImplBase<TargetI386>   // provides strong typing
             TargetI386               // actual implementation

The Target class would indeed take a void *, but the middle class would 
let TargetI386 think in terms of TargetI386::CumulativeArgs with 
something like

     void f(void *x) {
         // T needs to provide void T::f(T::CumulativeArgs *)
         f(static_cast<T::CumulativeArgs *> (x));
     }

The most similar thing in C (though not suitable for multitarget) is a 
struct, which is why I suggest using that now rather than void * (which 
would be an implementation detail).

Paolo



More information about the Gcc mailing list