Add support for -z nocopyreloc.
authorAlan Modra <amodra@gmail.com>
Wed, 3 Oct 2001 15:11:48 +0000 (15:11 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 3 Oct 2001 15:11:48 +0000 (15:11 +0000)
bfd/ChangeLog
bfd/elf32-i386.c
include/ChangeLog
include/bfdlink.h
ld/ChangeLog
ld/NEWS
ld/emultempl/elf32.em
ld/ld.texinfo

index c1ce396f59cf1e095ac26f9a6c6083af7c059e9a..d898b1d232c9acf4aeced9bdccc482ef5fb2553e 100644 (file)
@@ -1,3 +1,7 @@
+2001-10-03  Vassili Karpov  <malc@pulsesoft.com>
+
+       * elf32-i386.c (elf_i386_adjust_dynamic_symbol): Handle nocopyreloc.
+
 2001-10-03  Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
 
        * elf64-mips.c (elf_backend_may_use_rela_p): New define.
index 719a209491a87d03d264dab1dfe5f1637c2d3749..e249304476786f6df60a3c3dce63979ec524a045 100644 (file)
@@ -1127,6 +1127,13 @@ elf_i386_adjust_dynamic_symbol (info, h)
   if ((h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0)
     return true;
 
+  /* If -z nocopyreloc was given, we won't generate them either.  */
+  if (info->nocopyreloc)
+    {
+      h->elf_link_hash_flags &= ~ELF_LINK_NON_GOT_REF;
+      return true;
+    }
+
   eh = (struct elf_i386_link_hash_entry *) h;
   for (p = eh->dyn_relocs; p != NULL; p = p->next)
     {
index 99bd9320278820f1f331e083212afaee8b46e8c8..030ebfe788cf0fe4da9b3e064839d2305c35b7ba 100644 (file)
@@ -1,3 +1,7 @@
+2001-10-03  Vassili Karpov  <malc@pulsesoft.com>
+
+       * bfdlink.h (struct bfd_link_info): Add nocopyreloc field.
+
 2001-09-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * libiberty.h (reconcat): New function.
index 9ada606e31ddbd32e4f4eaa4536edcadd3e30567..0865594380dfafe150a23cd7648f5d99d35a132c 100644 (file)
@@ -294,6 +294,10 @@ struct bfd_link_info
      and sorted so that relocs against the same symbol come together.  */
   boolean combreloc;
 
+  /* True if executable should not contain copy relocs.
+     Setting this true may result in a non-sharable text segment.  */
+  boolean nocopyreloc;
+
   /* How many spare .dynamic DT_NULL entries should be added?  */
   unsigned int spare_dynamic_tags;
 };
index 29b2647526d59bc4ef36f7b500b08fbdfe25cdcf..819f5fab98fed8c048feef6fdff46a257c712f7e 100644 (file)
@@ -1,3 +1,9 @@
+2001-10-03  Vassili Karpov  <malc@pulsesoft.com>
+
+       * emultempl/elf32.em (parse_args): Handle -z nocopyreloc.
+       * NEWS: Mention -z nocopyreloc.
+       * ld.texinfo (Options): Describe nocopyreloc.
+
 2001-10-03  Alan Modra  <amodra@bigpond.net.au>
 
        * configure: Regenerate.
diff --git a/ld/NEWS b/ld/NEWS
index 27dc89105fd5e356252fac215612a193607b77c3..70997ef23eeedef6b873cbda96fb558573fc99b1 100644 (file)
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -1,4 +1,7 @@
 -*- text -*-
+* Support for -z nocopyreloc in the x86 ELF linker, which disables
+  production of copy relocs.  Warning: using this option may result in
+  non-sharable applications.
 
 * Support for -z combreloc in the ELF linker, which puts dynamic
   relocations against the same symbol together, so that dynamic linker
index f2011cece4b355814363b6d220e8e36da69d44aa..c9cf50d914c412c140cbe2706671c5695c8e171b 100644 (file)
@@ -1517,6 +1517,8 @@ cat >>e${EMULATION_NAME}.c <<EOF
        link_info.combreloc = true;
       else if (strcmp (optarg, "nocombreloc") == 0)
        link_info.combreloc = false;
+      else if (strcmp (optarg, "nocopyreloc") == 0)
+        link_info.nocopyreloc = true;
       /* What about the other Solaris -z options? FIXME.  */
       break;
 EOF
index 0b67ae10f7c391c3ff5d9748ad2c4268d9ee10ea..9b10cc6623455578ac2cb3952716bdd385546e51 100644 (file)
@@ -840,8 +840,9 @@ for Solaris compatibility.
 @item -z @var{keyword}
 The recognized keywords are @code{initfirst}, @code{interpose},
 @code{loadfltr}, @code{nodefaultlib}, @code{nodelete}, @code{nodlopen},
-@code{nodump}, @code{now}, @code{origin}, @code{combreloc} and
-@code{nocombreloc}. The other keywords are
+@code{nodump}, @code{now}, @code{origin}, @code{combreloc}, @code{nocombreloc} 
+and @code{nocopyreloc}.
+The other keywords are
 ignored for Solaris compatibility. @code{initfirst} marks the object
 to be initialized first at runtime before any other objects.
 @code{interpose} marks the object that its symbol table interposes
@@ -858,6 +859,7 @@ of this object will ignore any default library search paths.
 @code{combreloc} combines multiple reloc sections and sorts them
 to make dynamic symbol lookup caching possible.
 @code{nocombreloc} disables multiple reloc sections combining.
+@code{nocopyreloc} disables production of copy relocs.
 
 @kindex -(
 @cindex groups of archives