[aspectc-user] Execution advice for variable argument list functions

Olaf Spinczyk os at aspectc.org
Tue May 13 12:43:31 CEST 2008


Hello Stefan,

the bug is not fixed yet. The reason is that it is not very easy to fix it.

The problem is that execution advice is woven by generating a wrapper 
function. Now consider that the intercepted function has a variable 
argument list. In this case the wrapper functions also has a variable 
argument list and needs to pass the arguments to the intercepted 
function. The actual argument types are unknown. The only chance to 
accomplish this is to call va_start and va_end in the wrapper function 
and to pass the va_list object to the intercepted function. This could 
be done by the proceed code as well. However, the intercepted function 
will also create a va_list and uses it to access the arguments. All this 
code would have to be found and removed. It is not impossible but difficult.

BTW, you can turn off the "annoying warnings" if you know what they mean 
and have decided that it is not relevant for you.

Best regards,

Olaf

Stefan Marr wrote:
> Hello,
>
> I'm currently using AspectC++ to modularize a C program.
> After some small adjustments it compiles fine with g++ and fortunately 
> even with Ag++ :)
> First, I got some problems with the used macros which emulate object 
> orientation in C with virtual tables and stuff, but now I switched to 
> the latest SVN source of AspectC++ and it work except some annoying 
> warnings, cause the object layout is defined using macros.
>
> But, now I'm trying to use aspects on functions with variable number 
> of arguments and I got into trouble.
>
> Have found the following bug report
> http://www.aspectc.org/bugzilla/show_bug.cgi?id=106
> mentioning that execution advices for functions with variable argument 
> lists is not working.
>
> Is this still true? And if so, would it be easy to fix? If you give me 
> a helping hand I would try to fix this.
> At the moment I would need this feature, since some of the functions 
> we are using have variable argument list and are called through our OO 
> emulation and function pointers in a vtable. Call advices aren't 
> applied there.
>
> The execution advice seams to be applied in the right place, but the 
> generated code is wrong. Main problem is, that tjp seams to be defined 
> as an "int" and therefore tjp->proceed(); fails.
>
> Kind Regards
> Stefan Marr
>
> _______________________________________________
> aspectc-user mailing list
> aspectc-user at aspectc.org
> http://www.aspectc.org/mailman/listinfo/aspectc-user
>




More information about the aspectc-user mailing list