http://d.puremagic.com/issues/show_bug.cgi?id=879

On Dec 21, 2011, at 2:24 PM, dsimcha wrote:

> Indeed, a couple small programs I wrote today behave erratically w/ 
> gc-sections.  This only seems to occur on DMD, but I'm not sure if this is a 
> bug in DMD or if differences in library build configurations between 
> compilers (these are workarounds for bugs in GDC and LDC) explain it.
> 
> On Wednesday, 21 December 2011 at 04:15:21 UTC, Artur Skawina wrote:
>> On 12/20/11 19:59, Trass3r wrote:
>>> Seems like --gc-sections _can_ have its pitfalls:
>>> http://blog.flameeyes.eu/2009/11/21/garbage-collecting-sections-is-not-for-production
>>> Also I read somewhere that --gc-sections isn't always supported (no 
>>> standard switch or something like that).
>> 
>> The scenario in that link apparently involves a hack, where a completely 
>> unused symbol
>> is used to communicate with another program/library (which checks for its 
>> presence with
>> dlsym(3)).
>> The linker will omit that symbol, as nothing else references it - the 
>> solution is to
>> simply reference it from somewhere. Or explicitly place it in a used 
>> section. Or
>> incrementally link in the unused symbols _after_ the gc pass. Or...
>> 
>> If you use such hacks you have to handle them specially; there's no way for 
>> the compiler
>> to magically know which unreferenced symbols are not really unused. (which 
>> is also why
>> this optimization isn't very useful for shared libs - every visible symbol 
>> has to be
>> assumed used, for obvious reasons)
>> 
>> The one potential problematic case i mentioned in that gdc bug mentioned 
>> above is this:
>> If the D runtime (most likely GC) needs to know the start/end of the data 
>> and bss
>> sections _and_ does it in a way that can confuse it if some unreferenced 
>> parts of these
>> sections disappear and/or are reordered, then turning on the section GC 
>> could uncover
>> this bug. From the few simple tests i ran here everything seems to work 
>> fine, but I did
>> not check the code to confirm there are no incorrect assumptions present.
>> 
>>> I personally see no reason not to use -ffunction-sections and 
>>> -fdata-sections for compiling phobos though, cause a test with gdc didn't 
>>> even result in a much bigger lib file, nor did it take significantly longer 
>>> to compile/link.
>> 
>> 737k -> 320k executable size reduction is a compelling argument.
>> 
>>> That site I linked claims though, that it does mean serious overhead even 
>>> if --gc-sections is omitted then.
>> 
>> ?
>> 
>>> So we have to do tests with huge codebases first.
>> 
>> yes.
>> 
>> artur
> 
> 

Reply via email to