Add support for disabling automatic generation of .eh_frame_hdr sections in ELF based...
authorNick Clifton <nickc@redhat.com>
Wed, 14 Sep 2016 09:42:10 +0000 (10:42 +0100)
committerNick Clifton <nickc@redhat.com>
Wed, 14 Sep 2016 09:42:10 +0000 (10:42 +0100)
PR ld/20537
* emultempl/elf32.em: More OPTION_xxx values into an enum.  Add
OPTION_NO_EH_FRAME_HDR.
(_add_options): Add support for --no-eh-frame-hdr.
* ld.texinfo: Document new option.
* lexsup.c (elf_shlib_list_options): List new option.
* NEWS: Mention the new option.

ld/ChangeLog
ld/NEWS
ld/emultempl/elf32.em
ld/ld.texinfo
ld/lexsup.c

index 7d3e292a9441da015c90b54a1f5deb6653a9124a..58c888d34185f400d28621f49e3444a89ea98206 100644 (file)
@@ -1,3 +1,13 @@
+2016-09-14  Nick Clifton  <nickc@redhat.com>
+
+       PR ld/20537
+       * emultempl/elf32.em: More OPTION_xxx values into an enum.  Add
+       OPTION_NO_EH_FRAME_HDR.
+       (_add_options): Add support for --no-eh-frame-hdr.
+       * ld.texinfo: Document new option.
+       * lexsup.c (elf_shlib_list_options): List new option.
+       * NEWS: Mention the new option.
+
 2016-09-06  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/20550
diff --git a/ld/NEWS b/ld/NEWS
index 0f316bfcc248341200af14e5cb1a5c50787e9b1a..2bb429ff21671764a1043ad6d8c99d2ae3f82ae2 100644 (file)
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -2,6 +2,9 @@
 
 Changes in 2.28:
 
+* The command line option --no-eh-frame-hdr can now be used in ELF based
+  linkers to disable the automatic generation of .eh_frame_hdr sections.
+
 * Add --in-implib=<infile> to the ARM linker to enable specifying a set of
   Secure Gateway veneers that must exist in the output import library specified
   by --out-implib=<outfile> and the address they must have.  As such,
index dd4d35ab110c3edb086b49e3e32d81bfd2e42636..2153bf9a76a75ed47d45c554499bcbfbc8243544 100644 (file)
@@ -2199,15 +2199,19 @@ fi
 
 fragment <<EOF
 
-#define OPTION_DISABLE_NEW_DTAGS       (400)
-#define OPTION_ENABLE_NEW_DTAGS                (OPTION_DISABLE_NEW_DTAGS + 1)
-#define OPTION_GROUP                   (OPTION_ENABLE_NEW_DTAGS + 1)
-#define OPTION_EH_FRAME_HDR            (OPTION_GROUP + 1)
-#define OPTION_EXCLUDE_LIBS            (OPTION_EH_FRAME_HDR + 1)
-#define OPTION_HASH_STYLE              (OPTION_EXCLUDE_LIBS + 1)
-#define OPTION_BUILD_ID                        (OPTION_HASH_STYLE + 1)
-#define OPTION_AUDIT                   (OPTION_BUILD_ID + 1)
-#define OPTION_COMPRESS_DEBUG          (OPTION_AUDIT + 1)
+enum elf_options
+{
+  OPTION_DISABLE_NEW_DTAGS = 400,
+  OPTION_ENABLE_NEW_DTAGS,
+  OPTION_GROUP,
+  OPTION_EH_FRAME_HDR,
+  OPTION_NO_EH_FRAME_HDR,
+  OPTION_EXCLUDE_LIBS,
+  OPTION_HASH_STYLE,
+  OPTION_BUILD_ID,
+  OPTION_AUDIT,
+  OPTION_COMPRESS_DEBUG
+};
 
 static void
 gld${EMULATION_NAME}_add_options
@@ -2243,6 +2247,7 @@ fragment <<EOF
     {"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
     {"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
     {"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR},
+    {"no-eh-frame-hdr", no_argument, NULL, OPTION_NO_EH_FRAME_HDR},
     {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
     {"hash-style", required_argument, NULL, OPTION_HASH_STYLE},
 EOF
@@ -2322,6 +2327,10 @@ fragment <<EOF
       link_info.eh_frame_hdr_type = DWARF2_EH_HDR;
       break;
 
+    case OPTION_NO_EH_FRAME_HDR:
+      link_info.eh_frame_hdr_type = 0;
+      break;
+
     case OPTION_GROUP:
       link_info.flags_1 |= (bfd_vma) DF_1_GROUP;
       /* Groups must be self-contained.  */
index 021385166887a2d2bd49bdba379e833b9c67d906..5944b129b8fcb5b9d847c81d84c4a2f2ab7a32f9 100644 (file)
@@ -2270,9 +2270,12 @@ file as @code{__wrap_malloc}; if you do, the assembler may resolve the
 call before the linker has a chance to wrap it to @code{malloc}.
 
 @kindex --eh-frame-hdr
+@kindex --no-eh-frame-hdr
 @item --eh-frame-hdr
-Request creation of @code{.eh_frame_hdr} section and ELF
-@code{PT_GNU_EH_FRAME} segment header.
+@itemx --no-eh-frame-hdr
+Request (@option{--eh-frame-hdr}) or suppress
+(@option{--no-eh-frame-hdr}) the creation of @code{.eh_frame_hdr}
+section and ELF @code{PT_GNU_EH_FRAME} segment header.
 
 @kindex --ld-generated-unwind-info
 @item --no-ld-generated-unwind-info
index 6e279ae397e8173abfe9d804a0ca55f2697f037d..294c4b2d1b9fb481899fadf2f5d2a163fcd6ff14 100644 (file)
@@ -1724,6 +1724,8 @@ elf_shlib_list_options (FILE *file)
   fprintf (file, _("\
   --eh-frame-hdr              Create .eh_frame_hdr section\n"));
   fprintf (file, _("\
+  --no-eh-frame-hdr           Do not create .eh_frame_hdr section\n"));
+  fprintf (file, _("\
   --exclude-libs=LIBS         Make all symbols in LIBS hidden\n"));
   fprintf (file, _("\
   --hash-style=STYLE          Set hash style to sysv, gnu or both\n"));