* ldlang.c (lang_size_sections_1): Correct backwards dot move
authorAlan Modra <amodra@gmail.com>
Thu, 8 Mar 2007 04:38:45 +0000 (04:38 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 8 Mar 2007 04:38:45 +0000 (04:38 +0000)
test to not trigger on overlays.  Only warn on backwards move
if non-default lma.

ld/ChangeLog
ld/ldlang.c

index f1118699a7d001a32ca65db9212a08dda2b7b8cc..a411f64bfc1998c1f4e2b3b9e87dfca54bf62915 100644 (file)
@@ -1,3 +1,9 @@
+2007-03-08  Alan Modra  <amodra@bigpond.net.au>
+
+       * ldlang.c (lang_size_sections_1): Correct backwards dot move
+       test to not trigger on overlays.  Only warn on backwards move
+       if non-default lma.
+
 2007-03-07  Joseph Myers  <joseph@codesourcery.com>
 
        * configure.in (REPORT_BUGS_TEXI): Define to Texinfo version of
 
        * pe-dll.c: (make_one) Conditionally include jump stubs.
        * emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Identify
-       redundant jump stubs from import libraries and exclude them from 
+       redundant jump stubs from import libraries and exclude them from
        link.
 
 2007-01-19  H.J. Lu  <hongjiu.lu@intel.com>
        symbolic_unset and command_line.dynamic_list to
        dynamic_list_unset.  Check -Bsymbolic, -Bsymbolic-functions and
        --dynamic-list* before setting link_info.symbolic,
-       link_info.dynamic and link_info.dynamic_data. 
+       link_info.dynamic and link_info.dynamic_data.
 
        * lexsup.c (option_values): Add OPTION_SYMBOLIC_FUNCTIONS.
        (ld_options): Use OPTION_SYMBOLIC_FUNCTIONS with
index fa597f3c057f8ae49c886a08455e96b6d50065fb..380f4875dad54c2bf6e84ae6b3b5cc6706d40f3a 100644 (file)
@@ -4411,19 +4411,21 @@ lang_size_sections_1
 
                /* A backwards move of dot should be accompanied by
                   an explicit assignment to the section LMA (ie.
-                  os->load_base set) because backwards moves normally
+                  os->load_base set) because backwards moves can
                   create overlapping LMAs.  */
                if (dot < last->vma
-                   && os->bfd_section->size != 0)
+                   && os->bfd_section->size != 0
+                   && dot + os->bfd_section->size <= last->vma)
                  {
-                   einfo (_("%P: warning: dot moved backwards before `%s'\n"),
-                          os->name);
-
                    /* If dot moved backwards then leave lma equal to
                       vma.  This is the old default lma, which might
                       just happen to work when the backwards move is
-                      sufficiently large.  Nag anyway, so people fix
-                      their linker scripts.  */
+                      sufficiently large.  Nag if this changes anything,
+                      so people can fix their linker scripts.  */
+
+                   if (last->vma != last->lma)
+                     einfo (_("%P: warning: dot moved backwards before `%s'\n"),
+                            os->name);
                  }
                else
                  {