summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elflink.c12
-rw-r--r--include/ChangeLog4
-rw-r--r--include/bfdlink.h3
-rw-r--r--ld/ChangeLog10
-rw-r--r--ld/NEWS3
-rw-r--r--ld/ld.texinfo4
-rw-r--r--ld/lexsup.c7
8 files changed, 48 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index b0a62b4be5..679211b1b8 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2009-04-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elflink.c (elf_link_add_object_symbols): Warn alternate ELF
+ machine code.
+
2009-04-07 DJ Delorie <dj@redhat.com>
* archures.c: Add bfd_mach_mep_c5.
diff --git a/bfd/elflink.c b/bfd/elflink.c
index b699b922f6..3f70d915fc 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 fe68874638..dfe9fcee96 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,7 @@
+2009-04-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * bfdlink.h (bfd_link_info): Add warn_alternate_em.
+
2009-03-18 Alan Modra <amodra@bigpond.net.au>
* alloca-conf.h: Revise based on autoconf-2.61, autoconf-2.13
diff --git a/include/bfdlink.h b/include/bfdlink.h
index 51c5b15cd6..910281ad53 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 316130761b..7f97b49915 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,13 @@
+2009-04-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * 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 <dj@redhat.com>
* emulparams/elf32mep.sh: Change default endian to little.
diff --git a/ld/NEWS b/ld/NEWS
index 440534ac83..621b489331 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 37c36b0071..ca460b3bdc 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 3ddde61c4a..f1b5b4c0ff 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;
OpenPOWER on IntegriCloud