Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Raunaq 12 <raunaq12@in.ibm.com>
To: gdb-patches@sourceware.org
Cc: tromey@redhat.com
Subject: [PATCH 2/5] powerpc64-aix processing xlC generated line table
Date: Wed, 24 Jul 2013 12:37:00 -0000	[thread overview]
Message-ID: <OFC26EC5A9.CE7B0C7B-ON65257BB2.00453335-65257BB2.004557ED@in.ibm.com> (raw)


powerpc-ibm-aix: Fix line number handling for xlc compiled binaries.

xlc compiled binaries have a line table which is different from gcc
compiled ones.
It does not contain 1 extra entry which indicates the function start PC.

Because of this, listing functions, eg: 'list main' or
breaking at functions, eg: 'break function1' give wrong line numbers.

To fix this, we check if the function entry point has an entry in the
line table (in case of gcc, it does). If it does not have this entry, then
we retain
the function entry lines marked as line number equal to 0 and assign the
line number
equal to the succeeding line table entry.
---

ChangeLog :-
* xcoffread.c (process_linenos): Add fix to correctly process linenos in
case of xlc compiled binaries.

---
Index: ./gdb/xcoffread.c
===================================================================
--- ./gdb.orig/xcoffread.c
+++ ./gdb/xcoffread.c
@@ -602,7 +602,7 @@
 static void
 process_linenos (CORE_ADDR start, CORE_ADDR end)
 {
-  int offset, ii;
+ int offset, ii, jj;
   file_ptr max_offset
     = XCOFF_DATA (this_symtab_objfile)->max_lineno_offset;

@@ -698,10 +698,24 @@

       lv = main_subfile.line_vector;

+      /* xlc compiled binaries have one less entry in the line table.
+         So the function entry lines marked as line number equal to 0
+         will be retained in the line table with line numbers equal
+         to its succeeding line table entry. */
+
+      lineTb = lv;
+
+      for (jj = 0; jj < lineTb->nitems; jj++)
+        {
+          if (lineTb->item[jj].line == 0 && (lineTb->item[jj].pc
+			             != lineTb->item[jj + 1].pc))
+                    lineTb->item[jj].line = lineTb->item[jj + 1].line;
+        }
+
       /* Line numbers are not necessarily ordered.  xlc compilation will
          put static function to the end.  */

-      lineTb = arrange_linetable (lv);
+     lineTb = arrange_linetable (lineTb);
       if (lv == lineTb)
        {
          current_subfile->line_vector = (struct linetable *)
@@ -730,10 +744,24 @@

          lv = (inclTable[ii].subfile)->line_vector;

+          /* xlc compiled binaries have one less entry in the line table.
+             So the function entry lines marked as line number equal to 0
+             will be retained in the line table with line numbers equal
+             to its succeeding line table entry. */
+
+          lineTb = lv;
+
+          for (jj = 0; jj < lineTb->nitems; jj++)
+            {
+              if (lineTb->item[jj].line == 0 && (lineTb->item[jj].pc
+				 != lineTb->item[jj + 1].pc))
+                    lineTb->item[jj].line = lineTb->item[jj + 1].line;
+            }
+
          /* Line numbers are not necessarily ordered.  xlc compilation
will
             put static function to the end.  */

-         lineTb = arrange_linetable (lv);
+        lineTb = arrange_linetable (lineTb);

          push_subfile ();

---


             reply	other threads:[~2013-07-24 12:37 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-24 12:37 Raunaq 12 [this message]
2013-07-29  6:15 Raunaq 12
2013-07-29 16:58 ` Pedro Alves
2013-07-31  9:57   ` Raunaq 12
     [not found]   ` <OF668B9A7A.5414653D-ON65257BB9.00351B5A-65257BB9.003675D7@LocalDomain>
2013-07-31 10:03     ` Raunaq 12
2013-08-01 11:07 Raunaq 12
     [not found] <OF1EDEDB55.9DF54135-ON65257BBA.003B42B8-65257BBA.003D0F4D@LocalDomain>
2013-08-07 11:37 ` Raunaq 12
2013-08-07 15:23   ` Ulrich Weigand
2013-08-08 12:04     ` Raunaq 12
2013-08-08 22:01       ` Ulrich Weigand
2013-08-12  7:50         ` Raunaq 12
2013-08-26 15:30           ` Ulrich Weigand

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=OFC26EC5A9.CE7B0C7B-ON65257BB2.00453335-65257BB2.004557ED@in.ibm.com \
    --to=raunaq12@in.ibm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=tromey@redhat.com \
    /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