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.
This commit is contained in:
parent
40f77f827b
commit
a2c59f280d
@ -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
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…
Reference in New Issue
Block a user