diff options
author | Nick Clifton <nickc@redhat.com> | 2016-09-14 10:42:10 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2016-09-14 10:42:10 +0100 |
commit | 29063f8bfb9d68a213efd1d0ab7a66f97ed9a013 (patch) | |
tree | e3dc42be85b5b08d1854d6b174d359670a4eebdf /ld | |
parent | d68ff01f176038a3a1f21bd2a60dd3d5a2ea0343 (diff) | |
download | gdb-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.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 10 | ||||
-rw-r--r-- | ld/NEWS | 3 | ||||
-rw-r--r-- | ld/emultempl/elf32.em | 27 | ||||
-rw-r--r-- | ld/ld.texinfo | 7 | ||||
-rw-r--r-- | 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 @@ -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")); |