PR ld/1353
authorAlan Modra <amodra@gmail.com>
Mon, 19 Sep 2005 23:17:47 +0000 (23:17 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 19 Sep 2005 23:17:47 +0000 (23:17 +0000)
* ldlang.c (lang_size_sections_1): Process addr_tree earlier,
so that unused output section statements affect dot.

ld/ChangeLog
ld/ldlang.c

index 582ab6f78ad12f9230a56096d6b267bc2a33747f..c888d6846dd16b3c4501b17a244bb0954a4c9fa1 100644 (file)
@@ -1,3 +1,9 @@
+2005-09-20  Alan Modra  <amodra@bigpond.net.au>
+
+       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  <jakub@redhat.com>
 
        * ld.texinfo: Document -z {no,}execstack, -z {no,}relro
index fb5454c75a81acab8973fff800a9b556f84403b3..09e5f56f07591826682d2e476127b4e660a38e16 100644 (file)
@@ -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.  */