aboutsummaryrefslogtreecommitdiff
path: root/gas/dwarf2dbg.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/dwarf2dbg.c')
-rw-r--r--gas/dwarf2dbg.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
index 7384a17..1814013 100644
--- a/gas/dwarf2dbg.c
+++ b/gas/dwarf2dbg.c
@@ -794,17 +794,27 @@ dwarf2_directive_filename (void)
}
num = get_absolute_expression ();
- filename = demand_copy_C_string (&filename_len);
- if (filename == NULL)
- return NULL;
- demand_empty_rest_of_line ();
- if ((offsetT) num < 1)
+ if ((offsetT) num < 1 && dwarf_level < 5)
{
as_bad (_("file number less than one"));
+ ignore_rest_of_line ();
return NULL;
}
+ if (num == 0)
+ {
+ demand_empty_rest_of_line ();
+ return NULL;
+ }
+
+ filename = demand_copy_C_string (&filename_len);
+ if (filename == NULL)
+ /* demand_copy_C_string will have already generated an error message. */
+ return NULL;
+
+ demand_empty_rest_of_line ();
+
/* A .file directive implies compiler generated debug information is
being supplied. Turn off gas generated debug info. */
debug_type = DEBUG_NONE;
@@ -821,7 +831,7 @@ dwarf2_directive_filename (void)
return NULL;
}
- get_filenum (filename, (unsigned int) num);
+ (void) get_filenum (filename, (unsigned int) num);
return filename;
}