* 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:
parent
27d0bed645
commit
f37a7048a8
3 changed files with 30 additions and 4 deletions
|
@ -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
|
||||
|
|
22
ld/ldexp.c
22
ld/ldexp.c
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue