This is the mail archive of the 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  <>
>         PR gold/19823
>         * (Copy_relocs::make_copy_reloc): Add object
>         parameter; check for protected symbol.
>         * copy-relocs.h (Copy_relocs::make_copy_reloc): Add object parameter.
>         * (Mips_copy_relocs): Adjust call to make_copy_reloc.
>         * (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/ (copy_test_protected): New test.
>         * testsuite/ Regenerate.
>         * testsuite/ (main): Add legal reference to protected
>         symbol.
>         * testsuite/ (main): Likewise.
>         * testsuite/ (ip): Add protected symbol.
>         * testsuite/ New test source file.
>         * testsuite/ 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

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]