diff options
author | Alan Modra <amodra@gmail.com> | 2021-10-28 09:03:00 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2021-10-28 10:51:03 +1030 |
commit | 1cba418d26929e0fa0f9c43b2323093b1c7fa9de (patch) | |
tree | 1bbdbfa1b7032e356b45f0e4fd9d634fd59a627b /ld | |
parent | 9fc9dbc28b4bd2363fb645f0b0260be8ba43fadf (diff) | |
download | gdb-1cba418d26929e0fa0f9c43b2323093b1c7fa9de.zip gdb-1cba418d26929e0fa0f9c43b2323093b1c7fa9de.tar.gz gdb-1cba418d26929e0fa0f9c43b2323093b1c7fa9de.tar.bz2 |
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.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ldlang.c | 18 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/empty-address-4.d | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/empty-address-4.s | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/empty-address-4.t | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/empty-address.exp | 1 |
5 files changed, 32 insertions, 8 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c index bc3f8b7..acd90fa 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -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; diff --git a/ld/testsuite/ld-scripts/empty-address-4.d b/ld/testsuite/ld-scripts/empty-address-4.d new file mode 100644 index 0000000..26b058b --- /dev/null +++ b/ld/testsuite/ld-scripts/empty-address-4.d @@ -0,0 +1,6 @@ +#ld: -T empty-address-4.t +#nm: -n + +#... +0+0 [AT] _start +#pass diff --git a/ld/testsuite/ld-scripts/empty-address-4.s b/ld/testsuite/ld-scripts/empty-address-4.s new file mode 100644 index 0000000..602a02f --- /dev/null +++ b/ld/testsuite/ld-scripts/empty-address-4.s @@ -0,0 +1,4 @@ + .text + .global _start +_start: + .dc.a 0, 0 diff --git a/ld/testsuite/ld-scripts/empty-address-4.t b/ld/testsuite/ld-scripts/empty-address-4.t new file mode 100644 index 0000000..f25bbfe --- /dev/null +++ b/ld/testsuite/ld-scripts/empty-address-4.t @@ -0,0 +1,11 @@ +SECTIONS +{ + .text 0: { *(.text .pr) } + .data 0x200: + { + *(.data) + ASSERT (. < 0x400, oops); + } + .bss : { *(.bss) } + /DISCARD/ : { *(.*) } +} diff --git a/ld/testsuite/ld-scripts/empty-address.exp b/ld/testsuite/ld-scripts/empty-address.exp index 1f62372..060c72d 100644 --- a/ld/testsuite/ld-scripts/empty-address.exp +++ b/ld/testsuite/ld-scripts/empty-address.exp @@ -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 |