]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: move had_errors() invocation in finishing of subsegs
authorJan Beulich <jbeulich@suse.com>
Mon, 18 Nov 2024 10:37:31 +0000 (11:37 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 18 Nov 2024 10:37:31 +0000 (11:37 +0100)
Invoking this repeatedly in an inner loop is not only inefficient, but
may lead to inconsistencies in e.g. the listings that the original
comment author cared about. (Accept potential inconsistencies across
distinct sections though, to cover all invocations of the function.)

gas/write.c

index 41888156db36bb84182a619f6f3a98f5666c6981..51e67267fb80af8c0dccd0c240f2ff1502cc21dc 100644 (file)
@@ -1876,6 +1876,12 @@ subsegs_finish_section (asection *s)
   if (!seginfo)
     return;
 
+  /* This now gets called even if we had errors.  In that case, any alignment
+     is meaningless, and, moreover, will look weird if we are generating a
+     listing.  */
+  if (had_errors ())
+    do_not_pad_sections_to_alignment = 1;
+
   for (frchainP = seginfo->frchainP;
        frchainP != NULL;
        frchainP = frchainP->frch_next)
@@ -1884,12 +1890,6 @@ subsegs_finish_section (asection *s)
 
       subseg_set (s, frchainP->frch_subseg);
 
-      /* This now gets called even if we had errors.  In that case,
-        any alignment is meaningless, and, moreover, will look weird
-        if we are generating a listing.  */
-      if (had_errors ())
-       do_not_pad_sections_to_alignment = 1;
-
       alignment = SUB_SEGMENT_ALIGN (now_seg, frchainP);
       if ((bfd_section_flags (now_seg) & (SEC_MERGE | SEC_STRINGS))
          && now_seg->entsize)