[binutils-gdb] gas: abort in new_logical_line_flags

Alan Modra amodra@sourceware.org
Tue Feb 17 00:47:46 GMT 2026


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0231026a8f7cda932eb467862d30d07661ace966

commit 0231026a8f7cda932eb467862d30d07661ace966
Author: Alan Modra <amodra@gmail.com>
Date:   Tue Feb 17 09:59:37 2026 +1030

    gas: abort in new_logical_line_flags
    
    .linefile 0.
    
    hits the "case 1 << 3" abort in new_logical_line_flags with line_number
    of -1.
    
    Similar to commit b60f6a628897, this fixes the abort by extending the
    meaning of .linefile in user code to restore the physical line for
    ".linefile 0 .".
    
            * input-scrub.c (new_logical_line_flags <case 1<<3>): Don't
            abort on negative line number, instead restore physical line
            for ".linefile 0".

Diff:
---
 gas/input-scrub.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/gas/input-scrub.c b/gas/input-scrub.c
index afb80ef2ce0..2b90632040b 100644
--- a/gas/input-scrub.c
+++ b/gas/input-scrub.c
@@ -495,7 +495,12 @@ new_logical_line_flags (const char *fname, /* DON'T destroy it!  We point to it!
       /* FIXME: we could check that include nesting is correct.  */
       break;
     case 1 << 3:
-      if (line_number < 0 || fname != NULL)
+      /* s_linefile conditionally decrements the line depending on
+	 whether '\n' is seen.  */
+      if (line_number < 0
+	  || (line_number == 0 && input_line_pointer[-1] != '\n'))
+	line_number = physical_input_line;
+      if (fname != NULL)
 	abort ();
       if (next_saved_file == NULL)
 	fname = physical_input_file;


More information about the Binutils-cvs mailing list