diff options
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 6 | ||||
-rw-r--r-- | ld/ldexp.c | 17 |
2 files changed, 15 insertions, 8 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 8239873..30cb4eb 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2010-08-12 Alan Modra <amodra@gmail.com> + + * ldexp.c (new_rel): Remove "str". Update all call sites. + (exp_fold_tree_1): When assigning to dot, calculate nextdot + using expld.result.section rather than expld.section. + 2010-08-06 Alan Modra <amodra@gmail.com> PR ld/11887 @@ -1,6 +1,6 @@ /* This module handles expression trees. Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>. @@ -190,11 +190,11 @@ exp_relop (asection *section, bfd_vma value) } static void -new_rel (bfd_vma value, char *str, asection *section) +new_rel (bfd_vma value, asection *section) { expld.result.valid_p = TRUE; expld.result.value = value; - expld.result.str = str; + expld.result.str = NULL; expld.result.section = section; } @@ -561,7 +561,7 @@ fold_name (etree_type *tree) } else new_rel (h->u.def.value + h->u.def.section->output_offset, - NULL, output_section); + output_section); } } else if (expld.phase == lang_final_phase_enum @@ -591,7 +591,7 @@ fold_name (etree_type *tree) tree->name.name); } else if (os->processed_vma) - new_rel (0, NULL, os->bfd_section); + new_rel (0, os->bfd_section); } break; @@ -704,7 +704,8 @@ exp_fold_tree_1 (etree_type *tree) switch (tree->type.node_class) { case etree_value: - new_rel (tree->value.value, tree->value.str, expld.section); + new_rel (tree->value.value, expld.section); + expld.result.str = tree->value.str; break; case etree_rel: @@ -712,7 +713,7 @@ exp_fold_tree_1 (etree_type *tree) { asection *output_section = tree->rel.section->output_section; new_rel (tree->rel.value + tree->rel.section->output_offset, - NULL, output_section); + output_section); } else memset (&expld.result, 0, sizeof (expld.result)); @@ -766,7 +767,7 @@ exp_fold_tree_1 (etree_type *tree) { bfd_vma nextdot; - nextdot = expld.result.value + expld.section->vma; + nextdot = expld.result.value + expld.result.section->vma; if (nextdot < expld.dot && expld.section != bfd_abs_section_ptr) einfo (_("%F%S cannot move location counter backwards" |