* ldlang.c (print_assignment): Use the symbol's section if we

use its value.
	* ldexp.c (exp_fold_tree_1): Skip self-assignment.  Expand
	comment on copying symbol type.
This commit is contained in:
Nathan Sidwell 2011-05-16 11:34:48 +00:00
parent 27d0bed645
commit f37a7048a8
3 changed files with 30 additions and 4 deletions

View file

@ -1,3 +1,10 @@
2010-05-16 Daniel Jacobowitz <dan@codesourcery.com>
* ldlang.c (print_assignment): Use the symbol's section if we
use its value.
* ldexp.c (exp_fold_tree_1): Skip self-assignment. Expand
comment on copying symbol type.
2011-05-16 H.J. Lu <hongjiu.lu@intel.com>
PR ld/12760

View file

@ -832,6 +832,8 @@ exp_fold_tree_1 (etree_type *tree)
}
else
{
etree_type *name;
struct bfd_link_hash_entry *h = NULL;
if (tree->type.node_class == etree_provide)
@ -849,6 +851,23 @@ exp_fold_tree_1 (etree_type *tree)
}
}
name = tree->assign.src;
if (name->type.node_class == etree_trinary)
{
exp_fold_tree_1 (name->trinary.cond);
if (expld.result.valid_p)
name = (expld.result.value
? name->trinary.lhs : name->trinary.rhs);
}
if (name->type.node_class == etree_name
&& name->type.node_code == NAME
&& strcmp (tree->assign.dst, name->name.name) == 0)
/* Leave it alone. Do not replace a symbol with its own
output address, in case there is another section sizing
pass. Folding does not preserve input sections. */
break;
exp_fold_tree_1 (tree->assign.src);
if (expld.result.valid_p
|| (expld.phase == lang_first_phase_enum
@ -876,7 +895,8 @@ exp_fold_tree_1 (etree_type *tree)
tree->type.node_class = etree_provided;
/* Copy the symbol type if this is a simple assignment of
one symbol to annother. */
one symbol to another. This could be more general
(e.g. a ?: operator with NAMEs in each branch). */
if (tree->assign.src->type.node_class == etree_name)
{
struct bfd_link_hash_entry *hsrc;

View file

@ -4048,9 +4048,8 @@ print_assignment (lang_assignment_statement_type *assignment,
if (h)
{
value = h->u.def.value;
if (expld.result.section != NULL)
value += expld.result.section->vma;
value += h->u.def.section->output_section->vma;
value += h->u.def.section->output_offset;
minfo ("[0x%V]", value);
}