| Surely the executable itself is only linked with the | functions that are actually used by the program?
AFAIUI the GNU linker is not clever enough to remove junk on a per-function basis, only on a per-object basis. This is why we do object-splitting -- by breaking libraries up into thousands of .o files before rolling them into a .a, the effectiveness of what GNU ld can do is enhanced.
Perhaps more recent GNU ld's do better on some platforms? I have a vague recollection of some -gc-sections flag.
Yup, but it needs compiler support. The idea is to get the compiler to put each function in its own section, then the linker removes unused sections from the linked image. Cheers, Simon
"Simon Marlow"
| Surely the executable itself is only linked with the | functions that are actually used by the program?
AFAIUI the GNU linker is not clever enough to remove junk on a per-function basis, only on a per-object basis. This is why we do object-splitting -- by breaking libraries up into thousands of .o files before rolling them into a .a, the effectiveness of what GNU ld can do is enhanced.
Perhaps more recent GNU ld's do better on some platforms? I have a vague recollection of some -gc-sections flag.
Yup, but it needs compiler support. The idea is to get the compiler to put each function in its own section, then the linker removes unused sections from the linked image.
Sounds much better than the mess that -split-objs produces on the harddisk. Cheers, Manuel
On 2001-10-03T10:37:24+1000, Manuel M. T. Chakravarty wrote:
"Simon Marlow"
wrote, | Surely the executable itself is only linked with the | functions that are actually used by the program? AFAIUI the GNU linker is not clever enough to remove junk on a per-function basis, only on a per-object basis. This is why we do object-splitting -- by breaking libraries up into thousands of .o files before rolling them into a .a, the effectiveness of what GNU ld can do is enhanced. Perhaps more recent GNU ld's do better on some platforms? I have a vague recollection of some -gc-sections flag. Yup, but it needs compiler support. The idea is to get the compiler to put each function in its own section, then the linker removes unused sections from the linked image. Sounds much better than the mess that -split-objs produces on the harddisk.
I don't think the native ld on alpha-dec-osf3 supports such a feature, so we would (I assume) have to leave -split-objs in ghc even if we do implement -ffunction-sections/-fdata-sections. (Would it just be a matter of enabling it when invoking gcc? Would I be able to try it on my i386-linux box with -optc-ffunction-sections? Or I suppose the mangler would need to be educated...) -- Edit this signature at http://www.digitas.harvard.edu/cgi-bin/ken/sig Edit this signature at http://www.digitas.harvard.edu/cgi-bin/ken/sig
participants (3)
-
Ken Shan -
Manuel M. T. Chakravarty -
Simon Marlow