public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: "Potharla, Rupesh" <Rupesh.Potharla@amd.com>
To: "Potharla, Rupesh via Binutils" <binutils@sourceware.org>
Cc: "George, Jini Susan" <JiniSusan.George@amd.com>,
	"Parasuraman, Hariharan" <Hariharan.Parasuraman@amd.com>,
	"Natarajan, Kavitha" <Kavitha.Natarajan@amd.com>
Subject: [PATCH] bfd: Fix issues with files in debug_line table with dwarf5.
Date: Mon, 9 May 2022 07:03:45 +0000	[thread overview]
Message-ID: <DM6PR12MB42190B91F7A2C38399EB2504E7C69@DM6PR12MB4219.namprd12.prod.outlook.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 3918 bytes --]

[Public]



While working on the implementation of DW_FORM_strx forms could not print file names even after the implementation of strx forms. I found an issue with adding the file names to the file table with dwarf5 and clang.

With dwarf5 debug line version the file index is starting with zero, but the code is expecting it to be 1 which is the case with other dwarf versions.

From the contents of .debug_line compiled with clang and dwarf5, the file names array index is starting with zero.

standard_opcode_lengths[DW_LNS_set_isa] = 1
include_directories[  0] = "/home/rupesh/addr2line"
file_names[  0]:
           name: "prog1.c"
      dir_index: 0
   md5_checksum: da4ea4c312af96d39b13557acdf23f05

Address            Line   Column File   ISA Discriminator Flags
------------------ ------ ------ ------ --- ------------- -------------


The below line skipping zero entry was added as part of commit 19d80e5fec548e681c453d15b4ae5b49bc080acc is ignoring the file names in the zeroth index. I have no idea why this line was added. Removing the line is working for programs compiled with clang using dwarf5. With my fix, I am not seeing any issues with GCC and dwarf5 moreover currently GCC's debug_line version is 3 even when compiled with dwarf5.

      /* Skip the first "zero entry", which is the compilation dir/file.  */
      if (datai != 0)
        if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
          return false;

Made code changes to fix this issue. Can you review the code changes and send in your comments/suggestions?

Regards,
Rupesh P



From 28e92539dfe5319e7bdfea32c4ee46f55ff51053 Mon Sep 17 00:00:00 2001
From: rupothar rupesh.potharla@amd.com<mailto:rupesh.potharla@amd.com>
Date: Mon, 9 May 2022 12:10:48 +0530
Subject: [PATCH] bfd: Fix issues with files in debug_line table with dwarf5.

---
bfd/dwarf2.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index fe6c0b907c4..3233d281275 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -1617,6 +1617,7 @@ struct line_info_table
   unsigned int                    num_files;
   unsigned int                    num_dirs;
   unsigned int                    num_sequences;
+  unsigned int                   version;
   char *                   comp_dir;
   char **                  dirs;
   struct fileinfo*        files;
@@ -1837,6 +1838,8 @@ concat_filename (struct line_info_table *table, unsigned int file)
{
   char *filename;

+  if (table->version >= 5)
+    file = file + 1;
   if (table == NULL || file - 1 >= table->num_files)
     {
       /* FILE == 0 means unknown.  */
@@ -2270,10 +2273,8 @@ read_formatted_entries (struct comp_unit *unit, bfd_byte **bufp,
             }
         }

-      /* Skip the first "zero entry", which is the compilation dir/file.  */
-      if (datai != 0)
-         if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
-           return false;
+      if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
+        return false;
     }

   *bufp = buf;
@@ -2438,6 +2439,7 @@ decode_line_info (struct comp_unit *unit)
   table->sequences = NULL;

   table->lcl_head = NULL;
+  table->version = lh.version;

   if (lh.version >= 5)
     {
@@ -2480,7 +2482,12 @@ decode_line_info (struct comp_unit *unit)
       /* State machine registers.  */
       bfd_vma address = 0;
       unsigned char op_index = 0;
-      char * filename = table->num_files ? concat_filename (table, 1) : NULL;
+      char *filename;
+      if (table->version >= 5)
+        filename = table->num_files ? concat_filename (table, 0) : NULL;
+      else
+        filename = table->num_files ? concat_filename (table, 1) : NULL;
+
       unsigned int line = 1;
       unsigned int column = 0;
       unsigned int discriminator = 0;
--
2.17.1


[-- Attachment #2: 0001-bfd-Fix-issues-with-files-in-debug_line-table-with-d.patch --]
[-- Type: application/octet-stream, Size: 2059 bytes --]

From 28e92539dfe5319e7bdfea32c4ee46f55ff51053 Mon Sep 17 00:00:00 2001
From: rupothar <rupesh.potharla@amd.com>
Date: Mon, 9 May 2022 12:10:48 +0530
Subject: [PATCH] bfd: Fix issues with files in debug_line table with dwarf5.

---
 bfd/dwarf2.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index fe6c0b907c4..3233d281275 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -1617,6 +1617,7 @@ struct line_info_table
   unsigned int		num_files;
   unsigned int		num_dirs;
   unsigned int		num_sequences;
+  unsigned int 		version;
   char *		comp_dir;
   char **		dirs;
   struct fileinfo*	files;
@@ -1837,6 +1838,8 @@ concat_filename (struct line_info_table *table, unsigned int file)
 {
   char *filename;
 
+  if (table->version >= 5)
+    file = file + 1;
   if (table == NULL || file - 1 >= table->num_files)
     {
       /* FILE == 0 means unknown.  */
@@ -2270,10 +2273,8 @@ read_formatted_entries (struct comp_unit *unit, bfd_byte **bufp,
 	    }
 	}
 
-      /* Skip the first "zero entry", which is the compilation dir/file.  */
-      if (datai != 0)
-	if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
-	  return false;
+      if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
+	return false;
     }
 
   *bufp = buf;
@@ -2438,6 +2439,7 @@ decode_line_info (struct comp_unit *unit)
   table->sequences = NULL;
 
   table->lcl_head = NULL;
+  table->version = lh.version;
 
   if (lh.version >= 5)
     {
@@ -2480,7 +2482,12 @@ decode_line_info (struct comp_unit *unit)
       /* State machine registers.  */
       bfd_vma address = 0;
       unsigned char op_index = 0;
-      char * filename = table->num_files ? concat_filename (table, 1) : NULL;
+      char *filename;
+      if (table->version >= 5)
+	filename = table->num_files ? concat_filename (table, 0) : NULL;
+      else
+	filename = table->num_files ? concat_filename (table, 1) : NULL;
+
       unsigned int line = 1;
       unsigned int column = 0;
       unsigned int discriminator = 0;
-- 
2.17.1


             reply	other threads:[~2022-05-09  7:03 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-09  7:03 Potharla, Rupesh [this message]
2022-05-18 12:36 ` Jan Beulich
2022-05-25  4:20   ` Potharla, Rupesh
2022-05-25  6:18     ` Jan Beulich
2022-05-31 18:07       ` Potharla, Rupesh
2022-07-05  5:05         ` Potharla, Rupesh
2022-07-05  6:06           ` Jan Beulich
2022-07-05  6:46 Potharla, Rupesh
2022-07-20  5:03 ` Potharla, Rupesh
2022-07-20  7:59   ` Jan Beulich
2022-07-25 14:30 ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DM6PR12MB42190B91F7A2C38399EB2504E7C69@DM6PR12MB4219.namprd12.prod.outlook.com \
    --to=rupesh.potharla@amd.com \
    --cc=Hariharan.Parasuraman@amd.com \
    --cc=JiniSusan.George@amd.com \
    --cc=Kavitha.Natarajan@amd.com \
    --cc=binutils@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).