Fix ld/PR25316 for the ia64 target by refusing to support binary merging.
authorSergei Trofimovich <siarheit@google.com>
Fri, 3 Jan 2020 11:21:00 +0000 (11:21 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 3 Jan 2020 11:21:00 +0000 (11:21 +0000)
ld/PR25316
* elfnn-ia64.c (elfNN_ia64_merge_private_bfd_data): don't fail
        on binary inputs ld/PR25316.
        (is_ia64_elf): new helper to filter on ia64 objects.

bfd/ChangeLog
bfd/elfnn-ia64.c

index 1880bd484dfede38c99414693f02ca48d3d0238b..2b988667966fdb16a821e50b27f92654ef794819 100644 (file)
@@ -1,3 +1,9 @@
+2020-01-03  Sergei Trofimovich  <siarheit@google.com>
+
+        * elfnn-ia64.c (elfNN_ia64_merge_private_bfd_data): don't fail
+        on binary inputs ld/PR25316.
+        (is_ia64_elf): new helper to filter on ia64 objects.
+
 2020-01-03  Jan Beulich  <jbeulich@suse.com>
 
        * mach-o.c (cpusubtype, bfd_mach_o_header_p): Insert underscore
index 7612d29aa6b0280b7185607fc9c9057f6f9f5604..2ba9608e34973a653e453891c3d3cf8ddc73d6fe 100644 (file)
 #define        LOG_SECTION_ALIGN       2
 #endif
 
+#define is_ia64_elf(bfd)                          \
+  (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
+   && elf_object_id (bfd) == IA64_ELF_DATA)
+
 typedef struct bfd_hash_entry *(*new_hash_entry_func)
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
 
@@ -4732,6 +4736,7 @@ elfNN_ia64_set_private_flags (bfd *abfd, flagword flags)
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
+
 static bfd_boolean
 elfNN_ia64_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
@@ -4740,10 +4745,8 @@ elfNN_ia64_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
   flagword in_flags;
   bfd_boolean ok = TRUE;
 
-  /* Don't even pretend to support mixed-format linking.  */
-  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
-      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return FALSE;
+  if (!is_ia64_elf (ibfd) || !is_ia64_elf (obfd))
+    return TRUE;
 
   in_flags  = elf_elfheader (ibfd)->e_flags;
   out_flags = elf_elfheader (obfd)->e_flags;