This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: C++ mangling, function name to mangled name (or tree)
- From: Romain Geissler <romain dot geissler at gmail dot com>
- To: Pierre Vittet <piervit at pvittet dot com>
- Cc: Kevin André <hyperquantum at gmail dot com>, gcc-patches at gcc dot gnu dot org
- Date: Wed, 6 Jul 2011 18:58:19 +0200
- Subject: Re: C++ mangling, function name to mangled name (or tree)
- References: <4E148686.3040206@pvittet.com> <CAG599pBSCU+O5cS49go3nEKrWE_xLef_ybjdjHVYqAA6ioJ=1w@mail.gmail.com> <4E149009.7010402@pvittet.com>
Le 6 juil. 2011 à 18:40, Pierre Vittet a écrit :
> On 06/07/2011 18:25, Kevin André wrote:
>> On Wed, Jul 6, 2011 at 18:00, Pierre Vittet<piervit@pvittet.com> wrote:
>>
>>
>>> I would like user of the plugin to give in arguments the name of the
>>> functions on which he would like a test to be run. That means that I must
>>> convert the string containing a function name (like "myclass::init") and get
>>> either the mangled name or the tree corresponding to the function. I know
>>> that there might be several results (functions with the same name and
>>> different arguments), a good policy for me would be to recover every
>>> concerned functions (at least for the moment).
>>>
>>> I guess what I want to do is possible, because there are already some tools
>>> doing it (like gdb).
>>>
>> Are you absolutely sure about gdb? It could be doing it the other way
>> around, i.e. start from the mangled names in the object file and
>> demangle all of them. Then it would search for a function name in its
>> list of demangled names.
>> Just guessing, though :)
>>
>>
>> Regards,
>>
>> Kevin André
>>
>>
> Hello,
>
> no I am not sure, but I guess it would really have an important cost to do it like you said. Would it no be easier to have a field containing the 'demangled' names? At least in debug since it has an important space complexity.
>
> Thanks!
>
> Pierre Vittet
Hello,
Have you considered the reverse way to do that. I mean, why don't you hook on the PLUGIN_PRE_GENERICIZE event to catch all function bodies, and then compare the argument the user gave you to current_function_name() (that will returns you the full protoype of the current function, ie: malloc full name is "void* malloc(size_t)"). Then, you can store the FUNCTION_DECL tree if there's a match and use it for later processing. That's how i proceed for my plugins.
Romain Geissler