Hi,
On Thu, 20 Oct 2016 01:30:39 +0200, Jakub Jelinek wrote:
> This patch adds support for DWARF5 .debug_line{,_str} section format,
> though only if !DWARF2_ASM_LINE_DEBUG_INFO, because otherwise
> .debug_line is emitted by the assembler.
with current GCC trunk (with the GCC patch above) binutils readelf DWARF-5
patch being prepared outputs:
The File name Table (offset 0x30):
Entry Name Dir
0 (indirect line string, offset: 0x0): /home/jkratoch/t/classic.C 0
1 (indirect line string, offset: 0x11): classic.C 1
Please see the tabs there.
After this GCC patch below readelf would output:
The File name Table (offset 0x30):
Entry Dir Name
0 0 (indirect line string, offset: 0x0): /home/jkratoch/t/classic.C
1 1 (indirect line string, offset: 0x11): classic.C
That 'indirect line string' may get removed, that is irrelevant for this mail.
I could reorder that in readelf but I find it easier to do in GCC.
Also binutils has not switched to C++ yet so I have found the reordering not
trivial to do in readelf itself.
The readelf patch being prepared - not yet submitted:
https://people.redhat.com/jkratoch/readelf-dwarf5.patch
OK for GCC trunk?
Sorry I have not regression tested it, I would handle that before a check-in.
Thanks,
Jan
gcc/
2016-11-24 Jan Kratochvil <[email protected]>
* dwarf2out.c (output_file_names) Reorder DW_LNCT_directory_index and
DW_LNCT_path.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 1dfff38..ff4318c 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -11592,8 +11592,7 @@ output_file_names (void)
#else
dw2_asm_output_data (1, 2, "File name entry format count");
#endif
- dw2_asm_output_data_uleb128 (DW_LNCT_path, "DW_LNCT_path");
- dw2_asm_output_data_uleb128 (str_form, get_DW_FORM_name (str_form));
+ /* Keep DW_LNCT_path last for better binutils readelf readability. */
dw2_asm_output_data_uleb128 (DW_LNCT_directory_index,
"DW_LNCT_directory_index");
dw2_asm_output_data_uleb128 (idx_form, get_DW_FORM_name (idx_form));
@@ -11603,9 +11602,10 @@ output_file_names (void)
dw2_asm_output_data_uleb128 (DW_LNCT_size, "DW_LNCT_size");
dw2_asm_output_data_uleb128 (DW_FORM_udata, "DW_FORM_udata");
#endif
- dw2_asm_output_data_uleb128 (numfiles + 1, "File names count");
+ dw2_asm_output_data_uleb128 (DW_LNCT_path, "DW_LNCT_path");
+ dw2_asm_output_data_uleb128 (str_form, get_DW_FORM_name (str_form));
- output_line_string (str_form, filename0, "File Entry", 0);
+ dw2_asm_output_data_uleb128 (numfiles + 1, "File names count");
/* Include directory index. */
if (dwarf_version >= 5 && idx_form != DW_FORM_udata)
@@ -11618,6 +11618,8 @@ output_file_names (void)
dw2_asm_output_data_uleb128 (0, NULL);
dw2_asm_output_data_uleb128 (0, NULL);
#endif
+
+ output_line_string (str_form, filename0, "File Entry", 0);
}
/* Now write all the file names. */
@@ -11644,7 +11646,8 @@ output_file_names (void)
snprintf (filebuf, maxfilelen, "%s;%d",
files[file_idx].path + dirs[dir_idx].length, ver);
- output_line_string (str_form, filebuf, "File Entry", (unsigned) i + 1);
+ if (dwarf_version < 5)
+ output_line_string (str_form, filebuf, "File Entry", (unsigned) i + 1);
/* Include directory index. */
if (dwarf_version >= 5 && idx_form != DW_FORM_udata)
@@ -11662,10 +11665,14 @@ output_file_names (void)
dw2_asm_output_data_uleb128 ((vms_file_stats_name (files[file_idx].path,
0, &siz, 0, 0) == 0)
? siz : 0, NULL);
+
+ if (dwarf_version >= 5)
+ output_line_string (str_form, filebuf, "File Entry", (unsigned) i + 1);
#else
- output_line_string (str_form,
- files[file_idx].path + dirs[dir_idx].length,
- "File Entry", (unsigned) i + 1);
+ if (dwarf_version < 5)
+ output_line_string (str_form,
+ files[file_idx].path + dirs[dir_idx].length,
+ "File Entry", (unsigned) i + 1);
/* Include directory index. */
if (dwarf_version >= 5 && idx_form != DW_FORM_udata)
@@ -11675,13 +11682,17 @@ output_file_names (void)
dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
if (dwarf_version >= 5)
- continue;
-
- /* Modification time. */
- dw2_asm_output_data_uleb128 (0, NULL);
+ output_line_string (str_form,
+ files[file_idx].path + dirs[dir_idx].length,
+ "File Entry", (unsigned) i + 1);
+ else
+ {
+ /* Modification time. */
+ dw2_asm_output_data_uleb128 (0, NULL);
- /* File length in bytes. */
- dw2_asm_output_data_uleb128 (0, NULL);
+ /* File length in bytes. */
+ dw2_asm_output_data_uleb128 (0, NULL);
+ }
#endif /* VMS_DEBUGGING_INFO */
}