]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
C-SKY: Fix machine flag.
authorXianmiao Qu <cooper.qu@linux.alibaba.com>
Tue, 17 Jan 2023 11:43:16 +0000 (11:43 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 17 Jan 2023 11:43:16 +0000 (11:43 +0000)
* elf32-csky.c (elf32_csky_merge_attributes): Don't save and restore the ARCH attribute, it will actually clear the ARCH attribute. (csky_elf_merge_private_bfd_data): Store the machine flag correctly.

bfd/ChangeLog
bfd/elf32-csky.c

index ba44ea53cf789877dbef1721cea86d344bf7022f..75a2c4901e2711dadc46e0044c728b5913619b70 100644 (file)
@@ -1,3 +1,11 @@
+2023-01-17  Xianmiao Qu  <cooper.qu@linux.alibaba.com>
+
+       * elf32-csky.c (elf32_csky_merge_attributes): Don't save
+       and restore the ARCH attribute, it will actually clear
+       the ARCH attribute.
+       (csky_elf_merge_private_bfd_data): Store the machine flag
+       correctly.
+
 2023-01-13  Nick Clifton  <nickc@redhat.com>
 
        * po/ro.po: Updated Romainian translation.
index 7e03a3bc44d5d6f50d915e3a1689672aec47b9d8..3f4277b71db53ba7c4122e4dd6b0073beb1575c0 100644 (file)
@@ -2892,16 +2892,8 @@ elf32_csky_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
       /* This is the first object.  Copy the attributes.  */
       out_attr = elf_known_obj_attributes_proc (obfd);
 
-      /* If Tag_CSKY_CPU_NAME is already set, save it.  */
-      memcpy (&tattr, &out_attr[Tag_CSKY_ARCH_NAME], sizeof (tattr));
-
       _bfd_elf_copy_obj_attributes (ibfd, obfd);
 
-      out_attr = elf_known_obj_attributes_proc (obfd);
-
-      /* Restore Tag_CSKY_CPU_NAME.  */
-      memcpy (&out_attr[Tag_CSKY_ARCH_NAME], &tattr, sizeof (tattr));
-
       /* Use the Tag_null value to indicate the attributes have been
         initialized.  */
       out_attr[0].i = 1;
@@ -3066,12 +3058,14 @@ csky_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
   old_flags = elf_elfheader (obfd)->e_flags;
   out_attr = elf_known_obj_attributes_proc (obfd);
 
-  /* the flags like"e , f ,g ..." , we take collection.  */
-  newest_flag = (old_flags & (~CSKY_ARCH_MASK))
-   | (new_flags & (~CSKY_ARCH_MASK));
+  /* The flags like "e , f ,g ..." , we take collection.  */
+  newest_flag = old_flags | new_flags;
 
   sec_name = get_elf_backend_data (ibfd)->obj_attrs_section;
-  if (bfd_get_section_by_name (ibfd, sec_name) == NULL)
+
+  if (bfd_get_section_by_name (ibfd, sec_name) == NULL
+      || (new_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK) !=
+         old_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK)))
     {
       /* Input BFDs have no ".csky.attribute" section.  */
       new_arch = csky_find_arch_with_eflag (new_flags & CSKY_ARCH_MASK);
@@ -3110,9 +3104,6 @@ csky_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
              out_attr[Tag_CSKY_ARCH_NAME].s =
                _bfd_elf_attr_strdup (obfd, newest_arch->name);
            }
-         else
-           newest_flag |= ((new_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK))
-                           | (old_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK)));
        }
       else
        {