Correct logic for "defined by object"

H.J. Lu hjl.tools@gmail.com
Tue Dec 23 13:25:00 GMT 2014


On Tue, Dec 23, 2014 at 5:10 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Tue, Dec 23, 2014 at 5:06 AM, Alan Modra <amodra@gmail.com> wrote:
>> On Tue, Dec 23, 2014 at 04:46:29AM -0800, H.J. Lu wrote:
>>> No testcase?
>>
>> No.  This patch wasn't in response to a bug report or from observing
>> wrong linker behaviour myself.  In fact, I don't think you can write a
>> testcase that fails with the old code and passes with the new, due to
>> the way def->by_object is used.  The patch was really just a tidy.
>>
>
> So this patch won't change linker behavior in any way whatsoever.
> Basically the setting of def->by_object is unused.
>
> --
> H.J.

There are

         new_number (h != NULL
                      && (h->type == bfd_link_hash_defined
                          || h->type == bfd_link_hash_defweak
                          || h->type == bfd_link_hash_common)
                      && ((def = symbol_defined (tree->name.name)) == NULL
                          || def->by_object
                          || def->iteration == (lang_statement_iteration & 1)));

and

         if (!(h != NULL
                && (h->type == bfd_link_hash_defined
                    || h->type == bfd_link_hash_defweak)
                && h->u.def.section == bfd_abs_section_ptr
                && (def = symbol_defined (tree->name.name)) != NULL
                && def->iteration == (lang_statement_iteration & 1)))

One checks by_object and the other doesn't.   Should they be
consistent?  Can we find some real usage for by_object?  If not,
why don't we remove it?


H.J.

-- 
H.J.



More information about the Binutils mailing list