ASSERT in empty output section with address

* ldlang.c (lang_do_assignments_1): Correct "dot" inside ignored
	sections.
	* testsuite/ld-scripts/empty-address-4.d,
	* testsuite/ld-scripts/empty-address-4.s,
	* testsuite/ld-scripts/empty-address-4.t: New test.
	* testsuite/ld-scripts/empty-address.exp: Run it.
This commit is contained in:
Alan Modra 2021-10-28 09:03:00 +10:30
parent 9fc9dbc28b
commit 1cba418d26
5 changed files with 32 additions and 8 deletions

View File

@ -6481,32 +6481,34 @@ lang_do_assignments_1 (lang_statement_union_type *s,
os = &(s->output_section_statement);
os->after_end = *found_end;
init_opb (os->bfd_section);
if (os->bfd_section != NULL && !os->ignored)
newdot = dot;
if (os->bfd_section != NULL)
{
if ((os->bfd_section->flags & SEC_ALLOC) != 0)
if (!os->ignored && (os->bfd_section->flags & SEC_ALLOC) != 0)
{
current_section = os;
prefer_next_section = false;
}
dot = os->bfd_section->vma;
newdot = os->bfd_section->vma;
}
newdot = lang_do_assignments_1 (os->children.head,
os, os->fill, dot, found_end);
os, os->fill, newdot, found_end);
if (!os->ignored)
{
if (os->bfd_section != NULL)
{
newdot = os->bfd_section->vma;
/* .tbss sections effectively have zero size. */
if (!IS_TBSS (os->bfd_section)
|| bfd_link_relocatable (&link_info))
dot += TO_ADDR (os->bfd_section->size);
newdot += TO_ADDR (os->bfd_section->size);
if (os->update_dot_tree != NULL)
exp_fold_tree (os->update_dot_tree,
bfd_abs_section_ptr, &dot);
bfd_abs_section_ptr, &newdot);
}
else
dot = newdot;
dot = newdot;
}
}
break;

View File

@ -0,0 +1,6 @@
#ld: -T empty-address-4.t
#nm: -n
#...
0+0 [AT] _start
#pass

View File

@ -0,0 +1,4 @@
.text
.global _start
_start:
.dc.a 0, 0

View File

@ -0,0 +1,11 @@
SECTIONS
{
.text 0: { *(.text .pr) }
.data 0x200:
{
*(.data)
ASSERT (. < 0x400, oops);
}
.bss : { *(.bss) }
/DISCARD/ : { *(.*) }
}

View File

@ -32,5 +32,6 @@ run_dump_test empty-address-2b
run_dump_test empty-address-3a
run_dump_test empty-address-3b
run_dump_test empty-address-3c
run_dump_test empty-address-4
set LDFLAGS $old_LDFLAGS