diff options
author | Xianmiao Qu <cooper.qu@linux.alibaba.com> | 2023-01-17 11:43:16 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2023-01-17 11:43:16 +0000 |
commit | fd1b3e0e8dbf5313bededeab9c9c4ed2da5a0693 (patch) | |
tree | 7823321acac9e0db0dc3fdff4c6a0086aa8cbd23 /bfd/elf32-csky.c | |
parent | 1609cd6c5b189536d51ac98359b162061cb3bb1d (diff) | |
download | gdb-fd1b3e0e8dbf5313bededeab9c9c4ed2da5a0693.zip gdb-fd1b3e0e8dbf5313bededeab9c9c4ed2da5a0693.tar.gz gdb-fd1b3e0e8dbf5313bededeab9c9c4ed2da5a0693.tar.bz2 |
C-SKY: Fix machine flag.
* 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.
Diffstat (limited to 'bfd/elf32-csky.c')
-rw-r--r-- | bfd/elf32-csky.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/bfd/elf32-csky.c b/bfd/elf32-csky.c index 7e03a3b..3f4277b 100644 --- a/bfd/elf32-csky.c +++ b/bfd/elf32-csky.c @@ -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 { |