gas: abort in new_logical_line_flags
Alan Modra
amodra@gmail.com
Mon Feb 16 23:33:50 GMT 2026
.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 --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;
--
Alan Modra
More information about the Binutils
mailing list