From: Alan Modra Date: Wed, 28 May 2025 08:50:17 +0000 (+0930) Subject: PR 33029 segv in dwarf2_finish with --gdwarf-5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f601ffb52199a883f16df385b73a14e756b3e19a;p=thirdparty%2Fbinutils-gdb.git PR 33029 segv in dwarf2_finish with --gdwarf-5 Specifying --gdwarf-5 with a source lacking a ".file 0" directive results in this segfault. * dwarf2dbg.c (out_debug_str): Use files[1] if files[0] is empty regardless of dwarf level. --- diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c index fd1f96d80c5..a40fe6967d5 100644 --- a/gas/dwarf2dbg.c +++ b/gas/dwarf2dbg.c @@ -3019,6 +3019,11 @@ out_debug_str (segT str_seg, symbolS **name_sym, symbolS **comp_dir_sym, int len; int first_file = DWARF2_LINE_VERSION > 4 ? 0 : 1; + if (files_in_use == 0) + abort (); + if (first_file == 0 && files[first_file].filename == NULL) + first_file = 1; + subseg_set (str_seg, 0); /* DW_AT_name. We don't have the actual file name that was present @@ -3026,8 +3031,7 @@ out_debug_str (segT str_seg, symbolS **name_sym, symbolS **comp_dir_sym, We're not supposed to get called unless at least one line number entry was emitted, so this should always be defined. */ *name_sym = symbol_temp_new_now_octets (); - if (files_in_use == 0) - abort (); + if (files[first_file].dir) { char *dirname = remap_debug_filename (dirs[files[first_file].dir]);