Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Alexandre Oliva <aoliva@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: non-contiguous files break dwarf2 init-file recognition
Date: Wed, 11 Dec 2002 14:27:00 -0000	[thread overview]
Message-ID: <orznrcjj1l.fsf@free.redhat.lsd.ic.unicamp.br> (raw)

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

If an object file contains functions in CODE sections that are mapped
to different segments, or just non-contiguous memory areas, and the
entry point of the program happens to be in between such areas, we may
end up picking the wrong comp_unit as init file.  This patch fixes it
(as long as the code of the init file itself is contiguous, this
should be fine, otherwise the whole thing has to be redesigned).  Ok
to install?


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: gdb-non-contig-comp-unit.patch --]
[-- Type: text/x-patch, Size: 1901 bytes --]

Index: gdb/ChangeLog
from  Alexandre Oliva  <aoliva@redhat.com>

	* dwarf2read.c (read_file_scope): Handle non-contiguous
	comp_units, testing entry_point for every subprogram.

Index: gdb/dwarf2read.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2read.c,v
retrieving revision 1.78
diff -u -p -r1.78 dwarf2read.c
--- gdb/dwarf2read.c 11 Dec 2002 20:55:37 -0000 1.78
+++ gdb/dwarf2read.c 11 Dec 2002 21:42:29 -0000
@@ -1710,9 +1710,15 @@ read_file_scope (struct die_info *die, s
   struct die_info *child_die;
   bfd *abfd = objfile->obfd;
   struct line_header *line_header = 0;
+  CORE_ADDR entry_point = objfile->ei.entry_point - baseaddr;
+  int init_file = 0;
 
   if (!dwarf2_get_pc_bounds (die, &lowpc, &highpc, objfile))
     {
+      if (entry_point >= lowpc && entry_point < highpc
+	  && lowpc != ((CORE_ADDR) -1))
+	init_file = 1;
+      
       if (die->has_children)
 	{
 	  child_die = die->next;
@@ -1724,6 +1730,17 @@ read_file_scope (struct die_info *die, s
 
 		  if (dwarf2_get_pc_bounds (child_die, &low, &high, objfile))
 		    {
+		      /* We want to do this test per subprogram, so
+			 that, if the comp_unit is not contiguous
+			 (e.g., it has code in several sections that
+			 are not mapped to a single segment, such that
+			 there is code from other comp_units
+			 interspersed with code from this one), we
+			 don't get false positives.  */
+		      if (entry_point >= low && entry_point < high
+			  && lowpc != ((CORE_ADDR) -1))
+			init_file = 1;
+
 		      lowpc = min (lowpc, low);
 		      highpc = max (highpc, high);
 		    }
@@ -1760,8 +1777,7 @@ read_file_scope (struct die_info *die, s
 	}
     }
 
-  if (objfile->ei.entry_point >= lowpc &&
-      objfile->ei.entry_point < highpc)
+  if (init_file)
     {
       objfile->ei.entry_file_lowpc = lowpc;
       objfile->ei.entry_file_highpc = highpc;

[-- Attachment #3: Type: text/plain, Size: 289 bytes --]


-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

             reply	other threads:[~2002-12-11 22:19 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-12-11 14:27 Alexandre Oliva [this message]
2002-12-11 14:41 ` Elena Zannoni
2002-12-11 20:36   ` Alexandre Oliva

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=orznrcjj1l.fsf@free.redhat.lsd.ic.unicamp.br \
    --to=aoliva@redhat.com \
    --cc=gdb-patches@sources.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