This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] RISC-V: Optimize lui and auipc relaxations for undefweak symbols


Dear Jim,

> When doing some last minute testing, I got some LTO errors that were
> difficult to reproduce.  The problem turns out to be the part of the
> patch that does
> -         else if (h->root.u.def.section->output_section == NULL
> -                  || (h->root.type != bfd_link_hash_defined
> -                      && h->root.type != bfd_link_hash_defweak))
> +         else if (!undefined_weak
> +                  && (h->root.u.def.section->output_section == NULL
> +                      || (h->root.type != bfd_link_hash_defined
> +                          && h->root.type != bfd_link_hash_defweak)))
> This causes us to fall through to code that does
>     sym_sec = h->root.u.def.section
> but this isn't valid for an undefined variable.  def.section happens
> to overlap undef.abfd, and we end up with a abfd pointer instead of a
> section pointer, which can cause a crash we end up with the wrong
> garbage values there.  Usually it works, sometimes it crashes.  I
> changed the code to add an explicit else if for undefined_weak to set
> symval and sym_sec to reasonable values.
>
> I committed the patch with my change, which is attached below.

Thanks so much!  This modified patch is more reasonable.
I am grateful for your help :)

> I also rewrote the ChangeLog entries.  They are supposed to describe
> the textual changes you are making.  I'm old school; I prefer
> ChangeLog entries written like the ones I checked in.

OK I will pay special attention to this in the future :)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]