From a0c402a5641d9229b552066d526190252b0ee968 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 8 Apr 2009 16:04:50 +0000 Subject: [PATCH] bfd/ 2009-04-08 H.J. Lu * elflink.c (elf_link_add_object_symbols): Warn alternate ELF machine code. include/ 2009-04-08 H.J. Lu * bfdlink.h (bfd_link_info): Add warn_alternate_em. ld/ 2009-04-08 H.J. Lu * lexsup.c (option_values): Add OPTION_WARN_ALTERNATE_EM. (ld_options): Likewise. (parse_args): Likewise. * ld.texinfo: Document --warn-alternate-em. * NEWS: Mention --warn-alternate-em. --- bfd/ChangeLog | 5 +++++ bfd/elflink.c | 12 ++++++++++++ include/ChangeLog | 4 ++++ include/bfdlink.h | 3 +++ ld/ChangeLog | 10 ++++++++++ ld/NEWS | 3 +++ ld/ld.texinfo | 4 ++++ ld/lexsup.c | 7 +++++++ 8 files changed, 48 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b0a62b4be5c..679211b1b87 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-04-08 H.J. Lu + + * elflink.c (elf_link_add_object_symbols): Warn alternate ELF + machine code. + 2009-04-07 DJ Delorie * archures.c: Add bfd_mach_mep_c5. diff --git a/bfd/elflink.c b/bfd/elflink.c index b699b922f6d..3f70d915fc9 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -3425,6 +3425,7 @@ _bfd_elf_relocs_compatible (const bfd_target *input, static bfd_boolean elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) { + Elf_Internal_Ehdr *ehdr; Elf_Internal_Shdr *hdr; bfd_size_type symcount; bfd_size_type extsymcount; @@ -3480,6 +3481,17 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) } } + ehdr = elf_elfheader (abfd); + if (info->warn_alternate_em + && bed->elf_machine_code != ehdr->e_machine + && ((bed->elf_machine_alt1 != 0 + && ehdr->e_machine == bed->elf_machine_alt1) + || (bed->elf_machine_alt2 != 0 + && ehdr->e_machine == bed->elf_machine_alt2))) + info->callbacks->einfo + (_("%P: alternate ELF machine code found (%d) in %B, expecting %d\n"), + ehdr->e_machine, abfd, bed->elf_machine_code); + /* As a GNU extension, any input sections which are named .gnu.warning.SYMBOL are treated as warning symbols for the given symbol. This differs from .gnu.warning sections, which generate diff --git a/include/ChangeLog b/include/ChangeLog index fe68874638b..dfe9fcee963 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,7 @@ +2009-04-08 H.J. Lu + + * bfdlink.h (bfd_link_info): Add warn_alternate_em. + 2009-03-18 Alan Modra * alloca-conf.h: Revise based on autoconf-2.61, autoconf-2.13 diff --git a/include/bfdlink.h b/include/bfdlink.h index 51c5b15cd68..910281ad536 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -322,6 +322,9 @@ struct bfd_link_info /* TRUE if we should warn when adding a DT_TEXTREL to a shared object. */ unsigned int warn_shared_textrel: 1; + /* TRUE if we should warn alternate ELF machine code. */ + unsigned int warn_alternate_em: 1; + /* TRUE if unreferenced sections should be removed. */ unsigned int gc_sections: 1; diff --git a/ld/ChangeLog b/ld/ChangeLog index 316130761b7..7f97b499156 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,13 @@ +2009-04-08 H.J. Lu + + * lexsup.c (option_values): Add OPTION_WARN_ALTERNATE_EM. + (ld_options): Likewise. + (parse_args): Likewise. + + * ld.texinfo: Document --warn-alternate-em. + + * NEWS: Mention --warn-alternate-em. + 2009-04-07 DJ Delorie * emulparams/elf32mep.sh: Change default endian to little. diff --git a/ld/NEWS b/ld/NEWS index 440534ac83f..621b489331c 100644 --- a/ld/NEWS +++ b/ld/NEWS @@ -1,5 +1,8 @@ -*- text -*- +* ELF: --warn-alternate-em option to warn if an object has alternate + ELF machine code. + * New script function REGION_ALIAS to add alias names to memory regions. * PE targets no longer make use of the long section names PE extension to diff --git a/ld/ld.texinfo b/ld/ld.texinfo index 37c36b00712..ca460b3bdc4 100644 --- a/ld/ld.texinfo +++ b/ld/ld.texinfo @@ -1941,6 +1941,10 @@ the section (@pxref{SECTIONS}). @item --warn-shared-textrel Warn if the linker adds a DT_TEXTREL to a shared object. +@kindex --warn-alternate-em +@item --warn-alternate-em +Warn if an object has alternate ELF machine code. + @kindex --warn-unresolved-symbols @item --warn-unresolved-symbols If the linker is going to report an unresolved symbol (see the option diff --git a/ld/lexsup.c b/ld/lexsup.c index 3ddde61c4ab..f1b5b4c0ffe 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -163,6 +163,7 @@ enum option_values OPTION_WARN_UNRESOLVED_SYMBOLS, OPTION_ERROR_UNRESOLVED_SYMBOLS, OPTION_WARN_SHARED_TEXTREL, + OPTION_WARN_ALTERNATE_EM, OPTION_REDUCE_MEMORY_OVERHEADS, OPTION_DEFAULT_SCRIPT }; @@ -555,6 +556,9 @@ static const struct ld_option ld_options[] = { {"warn-shared-textrel", no_argument, NULL, OPTION_WARN_SHARED_TEXTREL}, '\0', NULL, N_("Warn if shared object has DT_TEXTREL"), TWO_DASHES }, + { {"warn-alternate-em", no_argument, NULL, OPTION_WARN_ALTERNATE_EM}, + '\0', NULL, N_("Warn if an object has alternate ELF machine code"), + TWO_DASHES }, { {"warn-unresolved-symbols", no_argument, NULL, OPTION_WARN_UNRESOLVED_SYMBOLS}, '\0', NULL, N_("Report unresolved symbols as warnings"), TWO_DASHES }, @@ -1359,6 +1363,9 @@ parse_args (unsigned argc, char **argv) case OPTION_WARN_SHARED_TEXTREL: link_info.warn_shared_textrel = TRUE; break; + case OPTION_WARN_ALTERNATE_EM: + link_info.warn_alternate_em = TRUE; + break; case OPTION_WHOLE_ARCHIVE: whole_archive = TRUE; break; -- 2.30.2