On 25 June 2017 at 13:30, Mike via D.gnu <d.gnu@puremagic.com> wrote: > On Sunday, 25 June 2017 at 10:53:35 UTC, Mike wrote: > >> I'm not really interested in that because its too blunt of an instrument. >> I'd like to use TypeInfo, but only if I'm doing dynamic casts or other >> things that require such runtime information. Also, I'd only want the >> TypeInfo for the types that need it in my binary. I've said this before but >> I'll repeat: I like TypeInfo; I just don't like dead code. > > > Just a little more information about this. It doesn't appear that the > entire TypeInfo object is remaining in the binary. It appears to only be > the `name` of the type that the linker just can't seem to "garbage > collection" from the .rodata section. > > Mike > >
Ah ha! It seems that for whatever reason, binutils can't strip strings. But if you wrap that string around a static symbol, then has no problem removing it. Using your small test here: https://issues.dlang.org/show_bug.cgi?id=14758 Making the following modifications for gdc. --- long syscall(long code, long arg1 = 0, in void* arg2 = null, long arg3 = 0) { long result = void; asm { "syscall" : /* "=a" (result) ??? No output operands == asm volatile? That seems wrong... */ : "a" (code), "D" (arg1), "S" (arg2), "d" (arg3); } return result; } --- Compiling with -fdata-sections -Os shows that .rodata now only contains: Contents of section .rodata: 40010e 48656c6c 6f0a00 Hello.. I'll make a formal PR when I have some time later. Iain.