aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2016-09-14 10:42:10 +0100
committerNick Clifton <nickc@redhat.com>2016-09-14 10:42:10 +0100
commit29063f8bfb9d68a213efd1d0ab7a66f97ed9a013 (patch)
treee3dc42be85b5b08d1854d6b174d359670a4eebdf
parentd68ff01f176038a3a1f21bd2a60dd3d5a2ea0343 (diff)
downloadgdb-29063f8bfb9d68a213efd1d0ab7a66f97ed9a013.zip
gdb-29063f8bfb9d68a213efd1d0ab7a66f97ed9a013.tar.gz
gdb-29063f8bfb9d68a213efd1d0ab7a66f97ed9a013.tar.bz2
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.
-rw-r--r--ld/ChangeLog10
-rw-r--r--ld/NEWS3
-rw-r--r--ld/emultempl/elf32.em27
-rw-r--r--ld/ld.texinfo7
-rw-r--r--ld/lexsup.c2
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"));