This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Eliminating unused functions based on gcov output
- From: "Amusing Muses" <amusingmuses at gmail dot com>
- To: gcc-help at gcc dot gnu dot org
- Date: Fri, 6 Jun 2008 14:55:58 -0400
- Subject: Eliminating unused functions based on gcov output
Hi, I'm trying to reduce code size of a huge project based on gcov output.
My strategy: I instrumented my code with gcov, parsed the output to
find all functions that were never called, and generated a list of
these functions, and now I need these functions to NOT get
compiled/take up space in the object... what's the best (i.e. laziest,
code is too huge for me to manually strip it down) way to do this?
Here's what I tried:
I initially wrote a script to set
__attribute__((section(".discardme")) on all these functions, I
created the object obj.o and the executable "prog" and then I ran
"objcopy --remove-section=.discardme prog". This "discards" the
section alright, and according to objdump -h, just leaves a huge gap
in its place taking up just as much space! I suspect that's because
the .discardme section was put in between other sections.
I am kind of stumped here as to what to do next... do I have no choice
but to manually remove these functions or write a script that
understand enough of the C grammar to comment them out? I think a gcc
attribute to indicate a function definition should be ignored would be
useful... or is there some other way?
-Am