From a5df8c84e0691cfdf17acb6d69e1c2fd428a5f97 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 19 Sep 2005 23:17:47 +0000 Subject: [PATCH] PR ld/1353 * ldlang.c (lang_size_sections_1): Process addr_tree earlier, so that unused output section statements affect dot. --- ld/ChangeLog | 6 ++++++ ld/ldlang.c | 32 ++++++++++++++++---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 582ab6f78ad..c888d6846dd 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2005-09-20 Alan Modra + + PR ld/1353 + * ldlang.c (lang_size_sections_1): Process addr_tree earlier, + so that unused output section statements affect dot. + 2005-09-08 Jakub Jelinek * ld.texinfo: Document -z {no,}execstack, -z {no,}relro diff --git a/ld/ldlang.c b/ld/ldlang.c index fb5454c75a8..09e5f56f075 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -3974,6 +3974,21 @@ lang_size_sections_1 lang_output_section_statement_type *os; os = &s->output_section_statement; + if (os->addr_tree != NULL) + { + os->processed = -1; + exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot); + os->processed = 0; + + if (!expld.result.valid_p + && expld.phase != lang_mark_phase_enum) + einfo (_("%F%S: non constant or forward reference" + " address expression for section %s\n"), + os->name); + + dot = expld.result.value + expld.result.section->vma; + } + if (os->bfd_section == NULL) /* This section was removed or never actually created. */ break; @@ -4003,6 +4018,7 @@ lang_size_sections_1 break; } + newdot = dot; if (bfd_is_abs_section (os->bfd_section)) { /* No matter what happens, an abs section starts at zero. */ @@ -4074,22 +4090,6 @@ lang_size_sections_1 os->name, (unsigned long) (newdot - savedot)); } } - else - { - newdot = dot; - os->processed = -1; - exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, - &newdot); - os->processed = 0; - - if (!expld.result.valid_p - && expld.phase != lang_mark_phase_enum) - einfo (_("%F%S: non constant or forward reference" - " address expression for section %s\n"), - os->name); - - newdot = expld.result.value + expld.result.section->vma; - } /* The section starts here. First, align to what the section needs. */ -- 2.30.2