We have a library and an executable, that is to be statically linked to the lib. We want to minimize the program space of the final executable.
According to avr-libc's documentation:
the linker links in THE ENTIRE OBJECT MODULE in which the function is located
On the other hand, my colleagues are unanimous on the point that at some pass, the linker throws away any unused functions.
So who is correct or am I misunderstanding something? Is the answer consistent throughout gcc or are we talking only the avr port here?
It doesn't perform dead code stripping unless you tell it to. In order to do that, you need to compile everything with:
-fdata-sections -ffunction-sections
in order to mark all data and functions. And when linking with GCC you need to pass:
-Wl,--gc-sections
in order to garbage-collect all unused sections.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With