This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] gcore: ignore no protection segments


Andrew Cagney writes:
 > +
 > +  if (read == 0 && write == 0 && exec == 0)
 > +    {
 > +      if (info_verbose)
 > +        {
 > +          fprintf_filtered (gdb_stdout, "Ignore segment, %lld bytes at 
 > 0x%s\n",+                           (long long) size, paddr_nz (vaddr));
 > +        }
 > +
 > +      return 0;
 > +    }
 > 
 > Makes sense.  Suggest adding a few details in a comment, and 
 > paddr_d(size) for the length.
 > 
 > Andrew
 > 

OK, I fixed the rest of the file as well.

committed.

2004-01-14  Elena Zannoni  <ezannoni@redhat.com>

	* gcore.c (gcore_copy_callback): Use paddr_d to print size
	variable.
	(gcore_create_callback): Ditto.  Skip any memory segment that has
	no permissions set.


Index: gcore.c
===================================================================
RCS file: /cvs/src/src/gdb/gcore.c,v
retrieving revision 1.13
diff -u -p -r1.13 gcore.c
--- gcore.c	11 Oct 2003 01:56:53 -0000	1.13
+++ gcore.c	14 Jan 2004 18:37:17 -0000
@@ -1,6 +1,6 @@
 /* Generate a core file for the inferior process.
 
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -314,6 +314,20 @@ gcore_create_callback (CORE_ADDR vaddr, 
   asection *osec;
   flagword flags = SEC_ALLOC | SEC_HAS_CONTENTS | SEC_LOAD;
 
+  /* If the memory segment has no permissions set, ignore it, otherwise
+     when we later try to access it for read/write, we'll get an error
+     or jam the kernel.  */
+  if (read == 0 && write == 0 && exec == 0)
+    {
+      if (info_verbose)
+        {
+          fprintf_filtered (gdb_stdout, "Ignore segment, %s bytes at 0x%s\n",
+                           paddr_d (size), paddr_nz (vaddr));
+        }
+
+      return 0;
+    }
+
   if (write == 0)
     {
       /* See if this region of memory lies inside a known file on disk.
@@ -364,8 +378,8 @@ gcore_create_callback (CORE_ADDR vaddr, 
 
   if (info_verbose)
     {
-      fprintf_filtered (gdb_stdout, "Save segment, %lld bytes at 0x%s\n",
-			(long long) size, paddr_nz (vaddr));
+      fprintf_filtered (gdb_stdout, "Save segment, %s bytes at 0x%s\n",
+			paddr_d (size), paddr_nz (vaddr));
     }
 
   bfd_set_section_size (obfd, osec, size);
@@ -450,8 +464,8 @@ gcore_copy_callback (bfd *obfd, asection
 
   if (target_read_memory (bfd_section_vma (obfd, osec),
 			  memhunk, size) != 0)
-    warning ("Memory read failed for corefile section, %ld bytes at 0x%s\n",
-	     (long) size, paddr (bfd_section_vma (obfd, osec)));
+    warning ("Memory read failed for corefile section, %s bytes at 0x%s\n",
+	     paddr_d (size), paddr (bfd_section_vma (obfd, osec)));
   if (!bfd_set_section_contents (obfd, osec, memhunk, 0, size))
     warning ("Failed to write corefile contents (%s).",
 	     bfd_errmsg (bfd_get_error ()));


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]