__attribute__((used)) and druntime
Mike via Digitalmars-d
digitalmars-d at puremagic.com
Mon Apr 13 02:52:29 PDT 2015
On Saturday, 11 April 2015 at 15:35:47 UTC, w0rp wrote:
> I've been looking into compiling smaller executables, and the
> trick I learned from watching sessions from the last DConf is
> to use the KEEP symbol in a linker script with something like
> gc-sections. So at the compilation stage, symbols are put in
> different sections, a linker script marks some symbols to be
> kept if they are not referenced, and then unreferenced symbols
> are removed, resulting in sometimes very small executables.
>
> The problem is that if you don't KEEP some symbols for
> druntime, or in your own program, you can run into errors
> because symbols which weren't apparently referenced now get
> used and your program breaks. I was just thinking, "There must
> be a GCC extension for doing this without a linker script," I
> *think* there might be.
>
> From what I just read, __attribute__((used)) in GCC should do
> the job, and I think it should be usable from GDC with its
> attribute pragmas. I believe there's also an attribute for
> putting symbols in particular sections. I'm wondering,
> supposing I'm not completely wrong and this actually works,
> would it behoove us to add some version() blocks for GDC (Also
> LDC?) in druntime and flag all of the symbols like this
> appropriately, so that creating executables with gc-sections
> will Just Work in some cases without a linker script?
>
> What do people think? Am I on to something, or I am just making
> fanciful ideas which won't work?
I tried to elicit some direction on this in the past, but I
wasn't able to get very far. The following forum threads may
interest you:
"Dead code removal"
http://forum.dlang.org/post/fqocnakibszciyptihpi@forum.dlang.org
"--gc-section and GDC]
http://forum.dlang.org/post/cqzazaqxpwezignixuds@forum.dlang.org
"Difference in perpective between LDC and GDC"
http://forum.dlang.org/post/xuosrmyumtitahinzrfi@forum.dlang.org
I get the impression from those discussions that the binutils
implementation for D is incomplete but it's still not clear to me
whether dead code removal, or retainining "used" code, is a job
for the compiler or the linker. It may require some
orchestration between the two.
I proposed an idea to move declarations for certain runtime hooks
out of the compiler and into druntime as *.di files. That would
allow for features of the runtime to be decorated in the
platform's port with "used", "weak", "section", etc., but
although I proposed it, I'm not convinced it's the way forward.
You can see the thread here:
http://forum.dlang.org/post/psssnzurlzeqeneagora@forum.dlang.org
Mike
More information about the Digitalmars-d
mailing list