Nested function - Avoid it in symbol table
Ángel González
keisial@gmail.com
Sat Jun 16 22:04:00 GMT 2012
On 16/06/12 22:03, Sam wrote:
> Hi,
>
> Is there any way to disable emitting nested function names in symbol table?
> I tried visibility(hidden) attribute and it is not working.
> The problem I have is I use nested function in a macro and which
> results in embedded in multiple places causing lot of unwanted entries
> symbol table increasing this of image.
>
> Sample program:
> $ cat test.c
> #include <stdio.h>
> int main()
> {
> __attribute__((visibility ("hidden")))
> int nested_function()
> {
> printf("Hello world\n");
> }
> nested_function();
> return 0;
> }
>
> $ readelf -s ./a.out | grep nest
> 50: 00000000004004a4 16 FUNC LOCAL DEFAULT 12 nested_function.2069
>
> Thanks
> Samuel
It disappears for me when using -O1 or higher, but that's probably due
to inlining because it's a trivial function. Still, if it isn't by
default, forcing it to inline could be an approach.
Another way would be of course to convert it to a normal function. That
will depend on the kind of magic that it's being done by that macro.
Regards
More information about the Gcc-help
mailing list