Document -z unique/-z nounique in the ld man page and help output
authorVivek Das Mohapatra <vivek@collabora.com>
Mon, 14 Dec 2020 17:25:52 +0000 (17:25 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 15 Dec 2020 08:15:03 +0000 (18:45 +1030)
* ld.texi (Options): Document -z unique and -z nounique.
* lexsup.c (elf_shlib_list_options): Likewise.

ld/ChangeLog
ld/ld.texi
ld/lexsup.c

index 3db7fc6a864cce5b291703227fd937322c64a76b..9a0ff59dfce6df7ca5a8df8e531607c779c8f7de 100644 (file)
@@ -2,6 +2,8 @@
 
        * emultempl/elf.em (gld${EMULATION_NAME}_handle_option):
        Parse -z unique / -z nounique options.
+       * ld.texi (Options): Document -z unique and -z nounique.
+       * lexsup.c (elf_shlib_list_options): Likewise.
 
 2020-12-14  Howard Chu  <hyc@symas.com>
 
index 51c51a3ec1f9874d533c4a93061f58b0ad45fac2..88b1687f1bb34f9843c9e8e671a56b89e16cacce 100644 (file)
@@ -1306,6 +1306,16 @@ Specify that the dynamic loader should modify its symbol search order
 so that symbols in this shared library interpose all other shared
 libraries not so marked.
 
+@item unique
+@itemx nounique
+When generating a shared library or other dynamically loadable ELF
+object mark it as one that should (by default) only ever be loaded once,
+and only in the main namespace (when using @code{dlmopen}). This is
+primarily used to mark fundamental libraries such as libc, libpthread et
+al which do not usually function correctly unless they are the sole instances
+of themselves. This behaviour can be overridden by the @code{dlmopen} caller
+and does not apply to certain loading mechanisms (such as audit libraries).
+
 @item lazy
 When generating an executable or shared library, mark it to tell the
 dynamic linker to defer function call resolution to the point when
index 78b1834e61e679b7a6983b377aaa55ad2b1c644a..1d01833b31026d2d2a6656024117d8bed477e68a 100644 (file)
@@ -2022,6 +2022,10 @@ elf_shlib_list_options (FILE *file)
   fprintf (file, _("\
   -z interpose                Mark object to interpose all DSOs but executable\n"));
   fprintf (file, _("\
+  -z unique                   Mark DSO to be loaded at most once by default, and only in the main namespace\n"));
+  fprintf (file, _("\
+  -z nounique                 Don't mark DSO as a loadable at most once\n"));
+  fprintf (file, _("\
   -z lazy                     Mark object lazy runtime binding (default)\n"));
   fprintf (file, _("\
   -z loadfltr                 Mark object requiring immediate process\n"));