[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER compone
From: |
i at maskray dot me |
Subject: |
[Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section |
Date: |
Wed, 23 Dec 2020 00:56:31 +0000 |
https://sourceware.org/bugzilla/show_bug.cgi?id=26256
--- Comment #15 from Fangrui Song <i at maskray dot me> ---
(In reply to H.J. Lu from comment #14)
> (In reply to Fangrui Song from comment #13)
> > (In reply to H.J. Lu from comment #12)
> > > (In reply to Fangrui Song from comment #10)
> > > > (In reply to H.J. Lu from comment #8)
> > > > > Created attachment 13070 [details]
> > > > > A patch with tests
> > > > >
> > > > > Try this.
> > > >
> > > > With a minor change, it'll match LLD (I place ordered sections before
> > > > unordered sections because Solaris folks said they did so).
> > > >
> > > > + /* Place ordered sections before unordered sections. */
> > > > + if (bsec != NULL)
> > > > + return 1;
> > > > + else if (asec != NULL)
> > > > + return -1;
> > > > + return 0;
> > > >
> > > > For the test case lld/test/ELF/linkorder-mixed.s , ld-new produced %t,
> > > > %t1
> > > > and %t3 now match LLD.
> > > > %t2 and %t4 still don't, but they are probably corner cases and don't
> > > > matter
> > > > in practice.
> > >
> > > %t2 and %t4 are lld specific behavior.
> >
> >
> > I actually think %t2 and %t4 are generic: ordered .rodata.bar (.byte 3)
> > precedes unordered .rodata.bar (.byte 2)
> >
> > SECTIONS { .rodata : {*(.rodata.foo) *(.rodata.bar)} }
> >
> > What LLD does is to perform SHF_LINK_ORDER sorting within the input section
> > description *(.rodata.bar). I agree that this is a corner case which can
> > hardly do harm in practice.
>
> It is a bug:
>
> diff --git a/bfd/elflink.c b/bfd/elflink.c
> index a1e4635e96..ddff3bfe7b 100644
> --- a/bfd/elflink.c
> +++ b/bfd/elflink.c
> @@ -11988,9 +11988,7 @@ elf_fixup_link_order (struct bfd_link_info *info,
> bfd *abfd, asection *o)
> for (p = o->map_head.link_order; p != NULL; p = p->next)
> sections[seen_linkorder++] = p;
>
> - for (indirect_sections = sections, n = 0;
> - n < seen_linkorder;
> - indirect_sections++, n++)
> + for (indirect_sections = sections, n = 0; n < seen_linkorder;)
> {
> /* Find the first bfd_indirect_link_order section. */
> if (indirect_sections[0]->type == bfd_indirect_link_order)
> @@ -12012,6 +12010,11 @@ elf_fixup_link_order (struct bfd_link_info *info,
> bfd *abfd, asection *o)
> indirect_sections += n_indirect;
> n += n_indirect;
> }
> + else
> + {
> + indirect_sections++;
> + n++;
> + }
> }
Thanks. With this diff added, all the %t* tests are good now.
--
You are receiving this mail because:
You are on the CC list for the bug.
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, (continued)
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, hjl.tools at gmail dot com, 2020/12/19
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, i at maskray dot me, 2020/12/20
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, hjl.tools at gmail dot com, 2020/12/20
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, hjl.tools at gmail dot com, 2020/12/20
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, hkrzesin at redhat dot com, 2020/12/21
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, i at maskray dot me, 2020/12/21
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, i at maskray dot me, 2020/12/21
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, hjl.tools at gmail dot com, 2020/12/21
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, i at maskray dot me, 2020/12/22
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section, hjl.tools at gmail dot com, 2020/12/22
- [Bug ld/26256] Support mixed SHF_LINK_ORDER & non-SHF_LINK_ORDER components in an output section,
i at maskray dot me <=