Browse Source

Make ALIGN(x) behave as ALIGN(.,x)

Inside output sections, ALIGN(.,x) uses a section-relative value for
dot.  The unary ALIGN always used the absolute value of dot.

	* ldexp.c (align_dot_val): New function.
	(fold_unary <ALIGN_K, NEXT>): Use it.
users/ARM/embedded-binutils-2_26-branch
Alan Modra 11 years ago
parent
commit
a2c59f280d
  1. 5
      ld/ChangeLog
  2. 12
      ld/ldexp.c

5
ld/ChangeLog

@ -1,3 +1,8 @@
2015-07-10 Alan Modra <amodra@gmail.com>
* ldexp.c (align_dot_val): New function.
(fold_unary <ALIGN_K, NEXT>): Use it.
2015-07-03 Kai Tietz <ktietz@redhat.com>
PR ld/11539

12
ld/ldexp.c

@ -257,6 +257,14 @@ new_rel_from_abs (bfd_vma value)
expld.result.section = s;
}
static void
align_dot_val (bfd_vma align)
{
bfd_vma base = expld.section->vma;
new_rel_from_abs (base + align_n (expld.dot - base, align));
}
/* New-function for the definedness hash table. */
static struct bfd_hash_entry *
@ -335,7 +343,7 @@ fold_unary (etree_type *tree)
{
case ALIGN_K:
if (expld.phase != lang_first_phase_enum)
new_rel_from_abs (align_n (expld.dot, expld.result.value));
align_dot_val (expld.result.value);
else
expld.result.valid_p = FALSE;
break;
@ -365,7 +373,7 @@ fold_unary (etree_type *tree)
if (expld.phase != lang_first_phase_enum)
{
make_abs ();
expld.result.value = align_n (expld.dot, expld.result.value);
align_dot_val (expld.result.value);
}
else
expld.result.valid_p = FALSE;

Loading…
Cancel
Save