bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gold/18703] Symbol version and Version script incompatibility with


From: cvs-commit at gcc dot gnu.org
Subject: [Bug gold/18703] Symbol version and Version script incompatibility with BFD ld
Date: Wed, 19 Aug 2015 02:25:34 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=18703

--- Comment #20 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot 
gnu.org> ---
The master branch has been updated by Cary Coutant <address@hidden>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b45e00b3ed40589af75b8a36a67905ae265a20f8

commit b45e00b3ed40589af75b8a36a67905ae265a20f8
Author: Cary Coutant <address@hidden>
Date:   Mon Jul 27 15:09:08 2015 -0700

    Fix symbol versioning problems in PR 18703.

    If a symbol is defined with ".symver foo,address@hidden", the assembler
    creates two symbols in the object: one unversioned, and one with
    the (non-default) version "VER". If foo is listed in a version
    script, gold would then make the first of those symbols the
    default version, and would ignore the second symbol as a
    duplicate, without making it a non-default version. While this is
    arguably reasonable behavior, it doesn't match Gnu ld behavior,
    so this patch fixes that by allowing the second definition to
    override the first by resetting the "default version" indication.

    Several test cases from the Gnu ld testsuite also exposed another
    related problem, where a symbol defined with ".symver foo,foo@",
    placed into a shared library, is not handled properly by gold.
    This patch also fixes that case, binding the symbol to the base
    version.

    gold/
        PR gold/18703
        * dynobj.cc (Versions::record_version): Handle symbol defined with
        base version.
        (Versions::symbol_section_contents): Likewise.
        * symtab.h (Symbol::set_is_not_default): New class method.
        (Symbol_table::resolve): Add is_default_version parameter.
        (Symbol_table::should_override): Likewise.
        * resolve.cc (Symbol_table::resolve): Add is_default_version parameter,
        and pass to should_override. Adjust all callers and explicit
        instantiations.
        (Symbol_table::should_override): Add is_default_value parameter;
        allow default version in a dynamic object to override existing
        definition from same object.
        * symtab.cc (Symbol_table::add_from_object): Handle case where same
        symbol is defined as unversioned and non-default version in the same
        object.
        * testsuite/Makefile.am (ver_test_13): New test case.
        * testsuite/Makefile.in: Regenerate.
        * testsuite/ver_test_4.cc: Add test for symbol with base version.
        * testsuite/ver_test_4.sh: Likewise.
        * testsuite/ver_test_13.c: New source file.
        * testsuite/ver_test_13.script: New version script.
        * testsuite/ver_test_13.sh: New test case.

-- 
You are receiving this mail because:
You are on the CC list for the bug.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]