/* This file is is generated by a shell script. DO NOT EDIT! */
/* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME}
- Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ Copyright (C) 1991-2015 Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
ELF support by Ian Lance Taylor <ian@cygnus.com>
/* Find an ELF input. */
for (abfd = link_info.input_bfds;
abfd != (bfd *) NULL; abfd = abfd->link.next)
- if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+ && bfd_count_sections (abfd) != 0)
break;
/* PR 10555: If there are no ELF input files do not try to
return;
}
- if (link_info.eh_frame_hdr
- && !link_info.traditional_format)
+ if (!link_info.traditional_format)
{
bfd *abfd, *elfbfd = NULL;
bfd_boolean warn_eh_frame = FALSE;
asection *s;
+ int seen_type = 0;
for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
{
- if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
- elfbfd = abfd;
- if (!warn_eh_frame)
+ int type = 0;
+ for (s = abfd->sections; s && type < COMPACT_EH_HDR; s = s->next)
{
- s = bfd_get_section_by_name (abfd, ".eh_frame");
- while (s != NULL
- && (s->size <= 8
- || bfd_is_abs_section (s->output_section)))
- s = bfd_get_next_section_by_name (s);
- warn_eh_frame = s != NULL;
+ const char *name = bfd_get_section_name (abfd, s);
+
+ if (bfd_is_abs_section (s->output_section))
+ continue;
+ if (CONST_STRNEQ (name, ".eh_frame_entry"))
+ type = COMPACT_EH_HDR;
+ else if (strcmp (name, ".eh_frame") == 0 && s->size > 8)
+ type = DWARF2_EH_HDR;
}
- if (elfbfd && warn_eh_frame)
- break;
+
+ if (type != 0)
+ {
+ if (seen_type == 0)
+ {
+ seen_type = type;
+ }
+ else if (seen_type != type)
+ {
+ einfo (_("%P%F: compact frame descriptions incompatible with"
+ " DWARF2 .eh_frame from %B\n"),
+ type == DWARF2_EH_HDR ? abfd : elfbfd);
+ break;
+ }
+
+ if (!elfbfd
+ && (type == COMPACT_EH_HDR || link_info.eh_frame_hdr_type != 0))
+ {
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ elfbfd = abfd;
+
+ warn_eh_frame = TRUE;
+ }
+ }
+
+ if (seen_type == COMPACT_EH_HDR)
+ link_info.eh_frame_hdr_type = COMPACT_EH_HDR;
+
+ if (bfd_count_sections (abfd) == 0)
+ continue;
}
if (elfbfd)
{
einfo ("%P: warning: %s, needed by %B, not found (try using -rpath or -rpath-link)\n",
l->name, l->by);
}
+
+ if (link_info.eh_frame_hdr_type == COMPACT_EH_HDR)
+ if (bfd_elf_parse_eh_frame_entries (NULL, &link_info) == FALSE)
+ einfo (_("%P%F: Failed to parse EH frame entries.\n"));
}
EOF
asection *sinterp;
bfd *abfd;
struct elf_link_hash_entry *ehdr_start = NULL;
+#if defined(__GNUC__) && GCC_VERSION < 4006
+ /* Work around a GCC uninitialized warning bug fixed in GCC 4.6. */
struct bfd_link_hash_entry ehdr_start_save = ehdr_start_save;
+#else
+ struct bfd_link_hash_entry ehdr_start_save;
+#endif
if (is_elf_hash_table (link_info.hash))
{
#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)
static void
gld${EMULATION_NAME}_add_options
fi
fragment <<EOF
{"build-id", optional_argument, NULL, OPTION_BUILD_ID},
+ {"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG},
EOF
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
fragment <<EOF
emit_note_gnu_build_id = xstrdup (optarg);
break;
+ case OPTION_COMPRESS_DEBUG:
+ if (strcasecmp (optarg, "none") == 0)
+ link_info.compress_debug = COMPRESS_DEBUG_NONE;
+ else if (strcasecmp (optarg, "zlib") == 0)
+ link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
+ else if (strcasecmp (optarg, "zlib-gnu") == 0)
+ link_info.compress_debug = COMPRESS_DEBUG_GNU_ZLIB;
+ else if (strcasecmp (optarg, "zlib-gabi") == 0)
+ link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
+ else
+ einfo (_("%P%F: invalid --compress-debug-sections option: \`%s'\n"),
+ optarg);
+ break;
EOF
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
break;
case OPTION_EH_FRAME_HDR:
- link_info.eh_frame_hdr = TRUE;
+ link_info.eh_frame_hdr_type = DWARF2_EH_HDR;
break;
case OPTION_GROUP:
}
EOF
-if test x"$BNDPLT" = xyes; then
-fragment <<EOF
- else if (strcmp (optarg, "bndplt") == 0)
- link_info.bndplt = TRUE;
-EOF
-fi
-
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
fragment <<EOF
else if (strcmp (optarg, "global") == 0)
EOF
fi
+if test -n "$PARSE_AND_LIST_ARGS_CASE_Z" ; then
+fragment <<EOF
+ $PARSE_AND_LIST_ARGS_CASE_Z
+EOF
+fi
+
fragment <<EOF
else
einfo (_("%P: warning: -z %s ignored.\n"), optarg);
EOF
if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
+gld_list_options="gld${EMULATION_NAME}_list_options"
+if test -n "$PARSE_AND_LIST_OPTIONS"; then
fragment <<EOF
static void
gld${EMULATION_NAME}_list_options (FILE * file)
{
EOF
-if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
-fragment <<EOF
- fprintf (file, _("\
- --audit=AUDITLIB Specify a library to use for auditing\n"));
- fprintf (file, _("\
- -Bgroup Selects group name lookup rules for DSO\n"));
-EOF
-fi
-fragment <<EOF
- fprintf (file, _("\
- --build-id[=STYLE] Generate build ID note\n"));
-EOF
-if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
-fragment <<EOF
- fprintf (file, _("\
- -P AUDITLIB, --depaudit=AUDITLIB\n" "\
- Specify a library to use for auditing dependencies\n"));
- fprintf (file, _("\
- --disable-new-dtags Disable new dynamic tags\n"));
- fprintf (file, _("\
- --enable-new-dtags Enable new dynamic tags\n"));
- fprintf (file, _("\
- --eh-frame-hdr 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"));
- fprintf (file, _("\
- -z combreloc Merge dynamic relocs into one section and sort\n"));
-EOF
-fi
-
-fragment <<EOF
- fprintf (file, _("\
- -z common-page-size=SIZE Set common page size to SIZE\n"));
- fprintf (file, _("\
- -z defs Report unresolved symbols in object files.\n"));
- fprintf (file, _("\
- -z execstack Mark executable as requiring executable stack\n"));
-EOF
-
-if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
-fragment <<EOF
- fprintf (file, _("\
- -z global Make symbols in DSO available for subsequently\n\
- loaded objects\n"));
- fprintf (file, _("\
- -z initfirst Mark DSO to be initialized first at runtime\n"));
- fprintf (file, _("\
- -z interpose Mark object to interpose all DSOs but executable\n"));
- fprintf (file, _("\
- -z lazy Mark object lazy runtime binding (default)\n"));
- fprintf (file, _("\
- -z loadfltr Mark object requiring immediate process\n"));
-EOF
-fi
-
-fragment <<EOF
- fprintf (file, _("\
- -z max-page-size=SIZE Set maximum page size to SIZE\n"));
- fprintf (file, _("\
- -z muldefs Allow multiple definitions\n"));
-EOF
-
-if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
-fragment <<EOF
- fprintf (file, _("\
- -z nocombreloc Don't merge dynamic relocs into one section\n"));
- fprintf (file, _("\
- -z nocopyreloc Don't create copy relocs\n"));
- fprintf (file, _("\
- -z nodefaultlib Mark object not to use default search paths\n"));
- fprintf (file, _("\
- -z nodelete Mark DSO non-deletable at runtime\n"));
- fprintf (file, _("\
- -z nodlopen Mark DSO not available to dlopen\n"));
- fprintf (file, _("\
- -z nodump Mark DSO not available to dldump\n"));
-EOF
-fi
-fragment <<EOF
- fprintf (file, _("\
- -z noexecstack Mark executable as not requiring executable stack\n"));
-EOF
-if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
-fragment <<EOF
- fprintf (file, _("\
- -z norelro Don't create RELRO program header\n"));
- fprintf (file, _("\
- -z now Mark object non-lazy runtime binding\n"));
- fprintf (file, _("\
- -z origin Mark object requiring immediate \$ORIGIN\n\
- processing at runtime\n"));
- fprintf (file, _("\
- -z relro Create RELRO program header\n"));
- fprintf (file, _("\
- -z stacksize=SIZE Set size of stack segment\n"));
-EOF
-fi
-
-if test x"$BNDPLT" = xyes; then
-fragment <<EOF
- fprintf (file, _("\
- -z bndplt Always generate BND prefix in PLT entries\n"));
-EOF
-fi
if test -n "$PARSE_AND_LIST_OPTIONS" ; then
fragment <<EOF
fragment <<EOF
}
EOF
+else
+ gld_list_options="NULL"
+fi
if test -n "$PARSE_AND_LIST_EPILOGUE" ; then
fragment <<EOF
gld${EMULATION_NAME}_add_options,
gld${EMULATION_NAME}_handle_option,
${LDEMUL_UNRECOGNIZED_FILE-NULL},
- ${LDEMUL_LIST_OPTIONS-gld${EMULATION_NAME}_list_options},
+ ${LDEMUL_LIST_OPTIONS-${gld_list_options}},
${LDEMUL_RECOGNIZED_FILE-gld${EMULATION_NAME}_load_symbols},
${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
${LDEMUL_NEW_VERS_PATTERN-NULL},