ld warning (was Optimization, remove unused code from Image)

Madani, Srikanth, VF-DE Srikanth.Madani@vodafone.com
Tue Jan 11 13:48:00 GMT 2005


Graham Stott wrote:

>It is possible to eliminated unused functions on many but not all
targets
>supported by GCC. 

>Use -ffunction-sections when compling and and --gc-sections when
linking.


I apologise then. I tried to simulate this on SunOS 5.8.
Wonder if someone can help me with an ld warning I encountered which
seems to be the reason for my corrupted executable.


Three C source files:
 
$> cat hello.c
int main(void) {
        printf("\nHello world!\n");
        func1();
        exit(0);
}
$>


$> cat fun1.c
void func1(void) {
        printf("\nIn function func1()\n");
}
void func2(void) {
        func3();
}
$>


$> cat fun2.c
void func3(void) {
        printf("\nIn function func3()\n");
}
$>
 
Compiled with gcc <gcc version 3.3>

$>
$>gcc -ffunction-sections -pedantic-errors -c *.c
$>
 
Linked with ld <GNU ld version 2.11.2 (with BFD 2.11.2)>
 
$> ld --gc-sections *.o
/bin/ld: warning: cannot find entry symbol _start; not setting start
address
$>

 
And my a.out is corrupted:
 
$> file a.out
can't read ELF header
a.out:
$>
 
And dumps core:
 
$> ./a.out
Segmentation fault (core dumped)
$>



Why/how do I have to speficiy the start address?
I did see
http://www.gnu.org/software/binutils/manual/ld-2.9.1/html_node/ld_24.htm
l#SEC24 - am none the wiser.
 
Help!
 
Cheers,
Srikanth Madani



More information about the Gcc-help mailing list