Re: removing unused functions during final link

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



As far as I can tell -- for my tiny example -- with the proper
compiler and linker options, the unused FUNCTIONS do not appear in the
final executable, but the unused string-data  does appear in the
executable.
Is that normal?


For example ...   in this function

void not_called_function(){
    puts("!!not_called\n");
}
the string "!!not_called!!" shows up in the executable, although I
think the function it self is not included in the build.
( previously I thought the function was present since the string had
the same name)

Here are my 3 source files
=======root.c ====================================
#include <stdio.h>
extern void show_the_message(void);

int main(void)
{
   puts("hello world");
   show_the_message();
   return 1;
}
=======show.c ====================================
#include <stdio.h>
void show_the_message(void)
{        puts("!!!Here is the message !!!");
}
void not_called_function(void)
{        puts("!!! not_called !!!");// This string appears in the executable
}
=======show2.c ====================================
#include <stdio.h>
// Neither of these functions are called, so they are not linked in

void show_the_last_message(void)
{        puts("!!!Here is the last one !!!");// this string does not
appear in the executable
}
void show_the_first_one(void)
{        puts("!!!Here is the first one !!!"); // This string does not
appear in the executable
}
=======Makefile ==================================
OBJS := root.o show.o show2.o
SOURCE := root.c show.c show2.c
# CC  is defined as mipsel-linux-uclibc-gcc
all: show.c show2.c root.c
        ${CC} -mips32  -fdata-sections -ffunction-sections -c $(SOURCE)
        ${CC} $(OBJS)  -Wl,--gc-sections -o root.exe
============ ==================================

On Wed, Sep 3, 2014 at 8:13 AM, Andrew Haley <aph@xxxxxxxxxx> wrote:
> On 09/03/2014 04:09 PM, Melvin Blades wrote:
>> The resulting executable contains the texts strings and function names
>> from both functions in show.c and neither function of show2.c  My
>> usage of -fdata-section -ffunction-section and -gc-sections prevents
>> the  functions in show2.c from being linked in , but not the unused
>> functions in show.c
>
> Something must be referring to them; they must be reachable.
> That or there's a bug.
> There's no way for anyone to know without seeing code.
>
> Andrew.
>




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux