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]

[gold][patch] Fix weak undef handling when resolving to defs in a shared library


This patch fixes a bug in gold where a definition in a shared library
would override a weak undef in a regular .o, causing it to be output
as a regular undef.

-cary

        * resolve.cc (Symbol_table::resolve): Remember whether undef was
        weak when resolving to a dynamic def.
        (Symbol_table::should_override): Add adjust_dyndef flag; set it
        for weak undef/dynamic def cases. Adjust callers.
        * symtab.cc (Symbol::init_fields): Initialize undef_binding_set_ and
        undef_binding_weak_.
        (Symbol_table::sized_write_globals): Adjust symbol binding.
        (Symbol_table::sized_write_symbol): Add binding parameter.
        * symtab.h (Symbol::set_undef_binding): New method.
        (Symbol::is_undef_binding_weak): New method.
        (Symbol::undef_binding_set_, Symbol::undef_binding_weak_): New members.
        (Symbol_table::should_override): Add new parameter.
        (Symbol_table::sized_write_symbol): Add new parameter.

        * testsuite/weak_undef_file1.cc: Add new test case.
        * testsuite/weak_undef_file2.cc: Fix header comment.
        * testsuite/weak_undef_test.cc: Add new test case.

Attachment: gold-weakundef-patch.txt
Description: Text document


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