[llvm-dev] [lld][ELF] Add option to make .dynamic read only

Jake Ehrlich via llvm-dev llvm-dev at lists.llvm.org
Tue May 16 16:31:13 PDT 2017


Hi,

This is a proposal to add an option to lld that forces .dynamic sections to
be read-only.

The .dynamic section is almost read-only except for the DT_DEBUG entry
which requires the dynamic linker to modify a word. MIPS has long since had
a solution to this using the DT_MIPS_RLD_MAP entry to give a pointer to
another section which is writable. It would be nice to have this
functionality on other targets as well however. Right now many dynamic
linkers do not support this layer of indirection so this can't happen by
default, it must be an option. Currently .dynamic gets mapped to a
PT_GNU_RELRO section. PT_GNU_RELRO sections are not shared between
instances of a executable however. It would be a nice optimization to share
the .dynamic section of an application where possible. In particular we
would like to have this option for Fuchsia. Other dynamic linkers, like
musl, already have some support for this on non-MIPS targets as seen here:
http://git.musl-libc.org/cgit/musl/tree/ldso/dynlink.c#n1629. In particular
the DT_DEBUG_INDIRECT entry is recognized.

This change would refactor code that already exists for MIPS specific
.dynamic sections and make them available to other targets. Mostly this
would just require renaming some things and moving a few lines around. The
biggest part of this change would be to add the flag. I propose it be a -z
keyword called "rodynamic".

I have already made a patch for this change which can be seen here:
https://reviews.llvm.org/D33251

Best,
Jake
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170516/710a1200/attachment.html>


More information about the llvm-dev mailing list