[llvm-dev] Linker Option support for ELF
Rui Ueyama via llvm-dev
llvm-dev at lists.llvm.org
Mon Jan 8 09:35:40 PST 2018
On Mon, Jan 8, 2018 at 3:22 AM, Peter Smith <peter.smith at linaro.org> wrote:
> On 8 January 2018 at 09:32, James Henderson via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
> > On 8 January 2018 at 08:14, Rui Ueyama <ruiu at google.com> wrote:
> >> On Mon, Jan 8, 2018 at 3:55 AM, Sean Silva via llvm-dev
> >> <llvm-dev at lists.llvm.org> wrote:
> >>> On Jan 7, 2018 5:02 PM, "Cary Coutant via llvm-dev"
> >>> <llvm-dev at lists.llvm.org> wrote:
> >>> > I think we all agree that blindly allowing the linker to honor the
> >>> > options
> >>> > would be scary. I agree that we should whitelist the options, and am
> >>> > of the
> >>> > opinion that we should force validation on the linker side (use of
> >>> > option which the linker doesn't support in this form can be fatal).
> >>> > Starting small is the best way, with `-l` and `-L` as a starting
> >>> > I
> >>> > want to retain the ability to add additional options which may not be
> >>> > available in all linkers. However, whitelisting obviously requires
> >>> > working
> >>> > with the linker as would adding such options, so that could be
> >>> > at
> >>> > that time.
> >>> This is actually why I'd prefer a new "language" over just
> >>> whitelisting options. With "lib", "file", and "path", as I suggested,
> >>> there's no question whether an option like "-no-pie" is supported, and
> >>> no temptation to even try.
> >>> That's a very simple and elegant solution.
> >> I really like that approach too. Command line options and "embedded
> >> options" are different, so making them actually look different makes
> > +1 from me. This is very similar to what we have in the Playstation
> > (which uses integers instead of strings to denote the type of
> directive). As
> > Paul mentioned earlier, we support "lib" and "export" directives, both of
> > which would fit nicely into this format.
> I'm wondering how much of the likely extensions are already covered by
> linker script commands
> Would it be worth investigating embedding fragments of linker script
> [*] in the same way as the .directive sections that could be
> concatenated or overridden by any user provided linker script? This
> would have some advantages:
> - there is already a specification and implementation of the commands
> and experience of their use and limitations.
> - it will be easier to resolve conflicts with existing linker script
> commands that might conflict.
> - if new commands are needed they can be added to linker scripts.
If we allow users embed linker scripts to object files, all ELF linkers
will have to start supporting the linker script even for linking trivial
programs. I don't think that's a good situation. IMO linker script is too
powerful and too GNU-ish that we want to use it only for some limited
purposes (e.g. embedded programming.)
[*] The encoding in the object file need not match, as long as the
> permitted set of options can map 1:1 to a linker script command.
> My experience with Arm Build Attributes, which are used to reason
> about compatibility of relocatable objects and not communication of
> options; is that users expect to be able to move binary only objects
> between projects, and information embedded in object files that isn't
> easily accessible to them that causes a link to fail is extremely
> unpopular. I'm definitely of the opinion that we should be cautious
> with what we allow to be put in.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev