[binutils-gdb] Add support for disabling automatic generation of .eh_frame_hdr sections in ELF based linkers.

Nick Clifton nickc@sourceware.org
Wed Sep 14 09:43:00 GMT 2016


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=29063f8bfb9d68a213efd1d0ab7a66f97ed9a013

commit 29063f8bfb9d68a213efd1d0ab7a66f97ed9a013
Author: Nick Clifton <nickc@redhat.com>
Date:   Wed Sep 14 10:42:10 2016 +0100

    Add support for disabling automatic generation of .eh_frame_hdr sections in ELF based linkers.
    
    	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.

Diff:
---
 ld/ChangeLog          | 10 ++++++++++
 ld/NEWS               |  3 +++
 ld/emultempl/elf32.em | 27 ++++++++++++++++++---------
 ld/ld.texinfo         |  7 +++++--
 ld/lexsup.c           |  2 ++
 5 files changed, 38 insertions(+), 11 deletions(-)

diff --git a/ld/ChangeLog b/ld/ChangeLog
index 7d3e292..58c888d 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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 0f316bf..2bb429f 100644
--- 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,
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index dd4d35a..2153bf9 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -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.  */
diff --git a/ld/ld.texinfo b/ld/ld.texinfo
index 0213851..5944b12 100644
--- a/ld/ld.texinfo
+++ b/ld/ld.texinfo
@@ -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
diff --git a/ld/lexsup.c b/ld/lexsup.c
index 6e279ae..294c4b2 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -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"));



More information about the Binutils-cvs mailing list