Playing with attributes and functions...

Fabio Alemagna falemagn@studenti.unina.it
Mon May 5 15:35:00 GMT 2003


Hello,

I have this need: a function declaration of the type

    rtype fname(t1 arg1, ..., tn argn) __attribute__((amilibcall(libbase, offset)));

should be treated as if it were declared like this:

    rtype fname(void *libbase, t1 arg1, ..., tn argn);

and calling such function should happen like this:

    ((typeof(&fname) *)libbase)[offset](libbase, arg1, ..., argn);

where libbase doesn't need to be a global symbol, but also just a local
one.

Taking the address of such function should return

    ((typeof(&fname) *)libbase)[offset]

and defining such function (as opposed to "declaring" it), should also
define a global static symbol (whose name is not rally important), which
contained the _real_ address of the function (that is, not the one taken
from the libbase), and should put it into a section named
"libbase.offset".

Now, how do I go about it? I'm rather new to gcc hacking so I really need
the help of someone who is more clever than me at this, or at least has
more knowledge than me. I've looked at the file gcc/call.c, and perhaps
that's the place where to start hacking? I'm not talking about the
attribute handling, that I know how to do, but rather about the other
points.

I'd appreciate very much if you could at least point me in the right
direction to solve the first 2 issues, and perhaps I can find out myself
how to solve the other ones.

Many thanks to whoever will be willing to help me.

Fabio Alemagna



More information about the Gcc mailing list