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: [gold commit] PR 19823: Don't allow COPY relocs to protected symbols


On Thu, May 19, 2016 at 03:13:07PM -0700, Cary Coutant wrote:
> 2016-05-19  Cary Coutant  <ccoutant@gmail.com>
> 
>         PR gold/19823
>         * copy-relocs.cc (Copy_relocs::make_copy_reloc): Add object
>         parameter; check for protected symbol.
>         * copy-relocs.h (Copy_relocs::make_copy_reloc): Add object parameter.
>         * mips.cc (Mips_copy_relocs): Adjust call to make_copy_reloc.
>         * symtab.cc (Symbol::init_fields): Initialize is_protected_.
>         (Symbol_table::add_from_dynobj): Mark protected symbols.
>         * symtab.h (Symbol::is_protected): New method.
>         (Symbol::set_is_protected): New method.
>         (Symbol::is_protected_): New data member.
> 
>         * testsuite/Makefile.am (copy_test_protected): New test.
>         * testsuite/Makefile.in: Regenerate.
>         * testsuite/copy_test.cc (main): Add legal reference to protected
>         symbol.
>         * testsuite/copy_test_v1.cc (main): Likewise.
>         * testsuite/copy_test_2.cc (ip): Add protected symbol.
>         * testsuite/copy_test_protected.cc: New test source file.
>         * testsuite/copy_test_protected.sh: New test script.

Cary, this test fails on powerpc64 and powerpc64le because no copy
relocs are needed with a PIC executable, and powerpc64 is PIC by
default.

One way to force a non-PIC reference to the protected visibility
variable in a read-only section, and thus require a copy reloc is:

int* __attribute__ ((section (".rodata"))) ipp = &ip;

It isn't really clean though, and results in assembler warnings about
attributes of .rodata.  Using

int* const ipp = &ip;

doesn't work because even at -O1 gcc looks through a *ipp reference
and omits ipp.

Do you have any suggestions?

-- 
Alan Modra
Australia Development Lab, IBM


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