Fix --defsym to copy symbol attributes.
authorCary Coutant <ccoutant@google.com>
Wed, 9 Jul 2014 05:34:27 +0000 (22:34 -0700)
committerCary Coutant <ccoutant@google.com>
Wed, 9 Jul 2014 05:52:37 +0000 (22:52 -0700)
commite051745c838bf29e564fb2665339f97c8383b9e8
treef95cb0a6f37660cfa33bacef128b335f4dc678e3
parentecf3e831f71257e8ff7bf794f394f23b26d75137
Fix --defsym to copy symbol attributes.

Alan Modra committed a patch to Gnu ld to fix a problem encountered on
PPC where the --defsym option wasn't copying the st_other bits to the
newly-defined symbol.

    https://sourceware.org/ml/binutils/2014-07/msg00094.html

Gold has the same problem, and additionally wasn't copying the symbol type.
This patch fixes both problems, by copying the symbol type, visibility, and
the remaining st_other bits to the new symbol for --defsym=sym1=sym2
assignments.

gold/
* expression.cc (struct Expression::Expression_eval_info): Add
new fields type_pointer, vis_pointer, and nonvis_pointer.
(Expression::eval_maybe_dot): Add type_pointer, vis_pointer, and
nonvis_pointer parameters. Adjust all calls.
(Symbol_expression::value): Update type, visibility, and nonvis bits
in caller.
* script.cc (Symbol_assignment::sized_finalize): Update type,
visibility, and remaining st_other bits for new symbol.
* script.h: (Expression::eval_maybe_dot): Add type_pointer,
vis_pointer, and nonvis_pointer parameters.
* symtab.h (Symbol::set_type): New method.

* testsuite/Makefile.am (defsym_test): New test.
* testsuite/Makefile.in: Regenerate.
* testsuite/defsym_test.c: New file.
* testsuite/defsym_test.sh: New file.
gold/ChangeLog
gold/expression.cc
gold/script.cc
gold/script.h
gold/symtab.h
gold/testsuite/Makefile.am
gold/testsuite/Makefile.in
gold/testsuite/defsym_test.c [new file with mode: 0644]
gold/testsuite/defsym_test.sh [new file with mode: 0755]