+2020-05-04 Nick Clifton <nickc@redhat.com>
+
+ PR 25917
+ * dwarf.c (display_debug_lines_decoded): Warn if encountering a
+ supicious number of entries for DWARF-5 format directory and file
+ name tables. Do not display file name table header if the table
+ is empty. Do not allocate space for empty tables.
+
2020-05-04 Alan Modra <amodra@gmail.com>
* readelf.c (process_nds32_specific): Check size of .nds32_e_flags
/* Skip directories format. */
SAFE_BYTE_GET_AND_INC (format_count, data, 1, end);
+ if (format_count > 1)
+ warn ("Unexpectedly large number of columns in the directory name table (%u)\n", format_count);
format_start = data;
for (formati = 0; formati < format_count; formati++)
{
break;
}
- directory_table = (unsigned char **)
- xmalloc (n_directories * sizeof (unsigned char *));
+ if (n_directories == 0)
+ directory_table = NULL;
+ else
+ directory_table = (unsigned char **)
+ xmalloc (n_directories * sizeof (unsigned char *));
for (entryi = 0; entryi < n_directories; entryi++)
{
/* Skip files format. */
SAFE_BYTE_GET_AND_INC (format_count, data, 1, end);
+ if (format_count > 5)
+ warn ("Unexpectedly large number of columns in the file name table (%u)\n", format_count);
+ format_count = 2;
format_start = data;
for (formati = 0; formati < format_count; formati++)
{
}
READ_ULEB (n_files, data, end);
- if (data == end)
+ if (data == end && n_files > 0)
{
warn (_("Corrupt file name list\n"));
break;
}
- file_table = (File_Entry *) xcalloc (1, n_files
- * sizeof (File_Entry));
+ if (n_files == 0)
+ file_table = NULL;
+ else
+ file_table = (File_Entry *) xcalloc (1, n_files
+ * sizeof (File_Entry));
for (entryi = 0; entryi < n_files; entryi++)
{
/* Print the Compilation Unit's name and a header. */
if (file_table == NULL)
- ;
+ printf (_("CU: No directory table\n"));
else if (directory_table == NULL)
printf (_("CU: %s:\n"), file_table[0].name);
else
printf ("%s:\n", file_table[0].name);
}
- printf (_("File name Line number Starting address View Stmt\n"));
+ if (n_files > 0)
+ printf (_("File name Line number Starting address View Stmt\n"));
+ else
+ printf (_("CU: Empty file name table\n"));
saved_linfo = linfo;
}
+2020-05-04 Nick Clifton <nickc@redhat.com>
+
2020-05-04 Andre Vieira <andre.simoesdiasvieira@arm.com>
PR gas/25863
PR 25917
* dwarf2dbg.c (out_dir_and_file_list): Check for the directory
table's existence before looking at its entries.
+ Also do not emit a default directory entry if there are no
+ directories in use.
+
* testsuite/gas/elf/pr25917.s: New test source file.
* testsuite/gas/elf/pr25917.d: New test driver.
* testsuite/gas/elf/elf.exp (run_elf_list_test): Run the new test.
bfd_boolean emit_filesize = TRUE;
/* Output the Directory Table. */
-
if (DWARF2_LINE_VERSION >= 5)
{
out_byte (1);
}
/* Emit directory list. */
- if (DWARF2_LINE_VERSION >= 5)
+ if (DWARF2_LINE_VERSION >= 5 && dirs_in_use > 0)
{
if (dirs == NULL || dirs[0] == NULL)
dir = remap_debug_filename (".");
out_byte ('\0');
/* Output the File Name Table. */
-
if (DWARF2_LINE_VERSION >= 5)
{
unsigned int columns = 4;
/* The number of format entries to follow. */
out_byte (columns);
-
/* The format of the file name. */
out_uleb128 (DW_LNCT_path);
/* FIXME: it would be better to store these strings in