public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: cagney@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Extract frysk.solib.MemoryMapFactory from LinuxCoreInfo; use.
Date: Tue, 11 Mar 2008 00:18:00 -0000	[thread overview]
Message-ID: <20080311001811.30162.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  888e1d2496bced5836e9662d640fcb2055fa61a1 (commit)
      from  5b6dc0b96a065dc4273f08b4be598be4377e2837 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 888e1d2496bced5836e9662d640fcb2055fa61a1
Author: Andrew Cagney <cagney@redhat.com>
Date:   Mon Mar 10 20:16:46 2008 -0400

    Extract frysk.solib.MemoryMapFactory from LinuxCoreInfo; use.
    
    frysk-core/frysk/proc/dead/ChangeLog
    2008-03-10  Andrew Cagney  <cagney@redhat.com>
    
    	* LinuxCoreInfo.java (addEnhancedMapData): Use MemoryMapFactory.
    
    frysk-core/frysk/solib/ChangeLog
    2008-03-10  Andrew Cagney  <cagney@redhat.com>
    
    	* MemoryMapFactory.java: Extract from frysk.proc.dead.LinuxCoreInfo.

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/proc/dead/ChangeLog               |    2 +
 frysk-core/frysk/proc/dead/LinuxCoreInfo.java      |   45 ++---------
 frysk-core/frysk/solib/ChangeLog                   |    2 +
 .../MemoryMapFactory.java}                         |   79 +++++++++++--------
 4 files changed, 59 insertions(+), 69 deletions(-)
 copy frysk-core/frysk/{proc/dead/ExeByteBuffer.java => solib/MemoryMapFactory.java} (55%)

First 500 lines of diff:
diff --git a/frysk-core/frysk/proc/dead/ChangeLog b/frysk-core/frysk/proc/dead/ChangeLog
index 0ef222d..8587cc3 100644
--- a/frysk-core/frysk/proc/dead/ChangeLog
+++ b/frysk-core/frysk/proc/dead/ChangeLog
@@ -1,5 +1,7 @@
 2008-03-10  Andrew Cagney  <cagney@redhat.com>
 
+	* LinuxCoreInfo.java (addEnhancedMapData): Use MemoryMapFactory.
+	
 	* SOLibMapBuilder.java: Move to frysk.solib.
 	* LinuxExeFactory.java: Update.
 	* LinuxCoreInfo.java: Update.
diff --git a/frysk-core/frysk/proc/dead/LinuxCoreInfo.java b/frysk-core/frysk/proc/dead/LinuxCoreInfo.java
index 0fd0ff1..a31c4cf 100644
--- a/frysk-core/frysk/proc/dead/LinuxCoreInfo.java
+++ b/frysk-core/frysk/proc/dead/LinuxCoreInfo.java
@@ -39,7 +39,6 @@
 
 package frysk.proc.dead;
 
-import frysk.solib.SOLibMapBuilder;
 import java.util.List;
 import java.util.LinkedList;
 import java.io.File;
@@ -59,9 +58,9 @@ import frysk.rsl.Log;
 import frysk.proc.Auxv;
 import frysk.sys.proc.AuxvBuilder;
 import frysk.proc.MemoryMap;
-import java.util.Iterator;
 import frysk.solib.LinkMapFactory;
 import frysk.solib.LinkMap;
+import frysk.solib.MemoryMapFactory;
 
 /**
  * Extract from a core file all the information needed to construct
@@ -325,47 +324,21 @@ class LinuxCoreInfo {
 	    // still being used for things like the exe path.
 	    return;
 
-	// From the list of solibs in the linkamp,  build
-	// maps for each one.
-	class BuildSOMaps extends SOLibMapBuilder {
-	    List list = new LinkedList();
-	    public void buildMap (long addrLow, long addrHigh, 
-				  boolean permRead, boolean permWrite,
-				  boolean permExecute, long offset, 
-				  String name, long align) {
-		list.add(new MapAddressHeader(addrLow, addrHigh, permRead,
-					      permWrite, permExecute,
-					      0, offset, 0,0, name, align));
-	    }
-	}
-
-	BuildSOMaps SOMaps = new BuildSOMaps();
-	for (int i = 0; i < linkMaps.length; i++) {
-	    LinkMap singleLinkMap = linkMaps[i];
-	    if ((!singleLinkMap.name.equals(""))
-		&& (!singleLinkMap.name.equals("[vdso]")))
-		SOMaps.construct(new File(singleLinkMap.name),
-				 singleLinkMap.l_addr);
-	    if (singleLinkMap.name.equals("[vdso]"))
-		SOMaps.buildMap(singleLinkMap.l_addr,0,true,true,true,0,singleLinkMap.name,0x1000);
-	}
-
-
-	// Add in case for executables maps.
-	SOMaps.construct(exeElf, exeFile, 0);
+	MemoryMap[] memoryMaps
+	    = MemoryMapFactory.constructMemoryMaps(exeElf, exeFile, linkMaps);
 
 	// Reconcile maps.
-	for (Iterator i = SOMaps.list.iterator(); i.hasNext(); ) {
-	    MapAddressHeader localMap = (MapAddressHeader) i.next();
+	for (int i = 0; i < memoryMaps.length; i++) {
+	    MemoryMap localMap = memoryMaps[i];
 	    for (int j = 0; j < metaData.length; j++) {
 		MapAddressHeader map = metaData[j];
-		if ((map.vaddr == localMap.vaddr)
-		    || ((map.vaddr > localMap.vaddr)
-			&& (map.vaddr<localMap.vaddr_end))) {
+		if ((map.vaddr == localMap.addressLow)
+		    || ((map.vaddr > localMap.addressLow)
+			&& (map.vaddr<localMap.addressHigh))) {
 		    if (map.vaddr_end == 0) {
 			map.vaddr_end = ((map.vaddr + map.memSize) + 0x1000 -1) &~ (0x1000-1);
 		    }
-		    map.solibOffset = localMap.solibOffset;
+		    map.solibOffset = localMap.offset;
 		    map.name = localMap.name;
 		}
 	    }
diff --git a/frysk-core/frysk/solib/ChangeLog b/frysk-core/frysk/solib/ChangeLog
index a7bbfcf..0d3705e 100644
--- a/frysk-core/frysk/solib/ChangeLog
+++ b/frysk-core/frysk/solib/ChangeLog
@@ -1,5 +1,7 @@
 2008-03-10  Andrew Cagney  <cagney@redhat.com>
 
+	* MemoryMapFactory.java: Extract from frysk.proc.dead.LinuxCoreInfo.
+
 	* SOLibMapBuilder.java: Move to here from frysk.proc.dead.
 
 	* LinkMap.java: Extract from frysk.proc.dead.LinuxCoreInfo.
diff --git a/frysk-core/frysk/proc/dead/ExeByteBuffer.java b/frysk-core/frysk/solib/MemoryMapFactory.java
similarity index 55%
copy from frysk-core/frysk/proc/dead/ExeByteBuffer.java
copy to frysk-core/frysk/solib/MemoryMapFactory.java
index 59f6d09..432ccff 100644
--- a/frysk-core/frysk/proc/dead/ExeByteBuffer.java
+++ b/frysk-core/frysk/solib/MemoryMapFactory.java
@@ -37,49 +37,62 @@
 // version and license this file solely under the GPL without
 // exception.
 
-package frysk.proc.dead;
+package frysk.solib;
 
+import lib.dwfl.Elf;
 import java.io.File;
-import frysk.sys.StatelessFile;
+import java.util.LinkedList;
 import frysk.proc.MemoryMap;
-import inua.eio.ByteBuffer;
 
-public class ExeByteBuffer extends ByteBuffer {
+public class MemoryMapFactory {
 
-    private final MemoryMap[] memoryMaps;
-    private final StatelessFile[] statelessFiles;
-    private final byte[] buffer = new byte[1];
-    
-    public ExeByteBuffer(MemoryMap[] memoryMaps) {
-	super(0,-1);
-	this.memoryMaps = memoryMaps;
-	this.statelessFiles = new StatelessFile[memoryMaps.length];
+    private static class BuildSOMaps extends SOLibMapBuilder {
+	LinkedList list = new LinkedList();
+	public void buildMap(long addrLow, long addrHigh, 
+			     boolean permRead, boolean permWrite,
+			     boolean permExecute, long offset, 
+			     String name, long align) {
+	    list.add(new MemoryMap(addrLow, addrHigh,
+				   permRead, permWrite, permExecute,
+				   false, // shared
+				   offset,
+				   0, 0, 0, // major/minor
+				   0, 0, // path offset/length
+				   name));
+	}
     }
-    
-    protected int peek(long caret) {
-	long offset = -1;
-	int i;
-	MemoryMap line = null;
-	for (i = 0; i < memoryMaps.length; i++) {
-	    line = memoryMaps[i];
-	    if ((caret >= line.addressLow) && (caret<= line.addressHigh)) {
-		offset = line.offset + (caret - line.addressLow);
-		break;
+
+    private static BuildSOMaps buildSoMaps(LinkMap[] linkMaps) {
+	// From the list of solibs in the LinkMap table, build maps
+	// for each entry.
+	BuildSOMaps soMaps = new BuildSOMaps();
+	for (int i = 0; i < linkMaps.length; i++) {
+	    LinkMap singleLinkMap = linkMaps[i];
+	    if (singleLinkMap.name.equals("[vdso]")) {
+		soMaps.buildMap(singleLinkMap.l_addr, 0, true, true, true, 0,
+				singleLinkMap.name, 0x1000);
+	    } else if (!singleLinkMap.name.equals("")) {
+		soMaps.construct(new File(singleLinkMap.name),
+				 singleLinkMap.l_addr);
 	    }
 	}
-	if (i >= memoryMaps.length)
-	    throw new RuntimeException("Cannot find memory in exe file");
-	StatelessFile temp = statelessFiles[i];
-	if (temp == null) {
-	    temp = new StatelessFile(new File(line.name));
-	    statelessFiles[i] = temp;
-	}
-	temp.pread(offset, buffer,0,1);
-	return buffer[0];
+	return soMaps;
     }
 
-    protected void poke(long caret, int val) {
-	throw new RuntimeException("Cannot poke into Executable. File bug.");
+    public static MemoryMap[] constructMemoryMaps(Elf exeElf, File exeFile,
+						  LinkMap[] linkMaps) {
+	BuildSOMaps soMaps = buildSoMaps(linkMaps);
+	// Add in case for executables maps; needed?
+	soMaps.construct(exeElf, exeFile, 0);
+	MemoryMap[] memoryMaps = new MemoryMap[soMaps.list.size()];
+	soMaps.list.toArray(memoryMaps);
+	return memoryMaps;
     }
 
+    public static MemoryMap[] constructMemoryMaps(LinkMap[] linkMaps) {
+	BuildSOMaps soMaps = buildSoMaps(linkMaps);
+	MemoryMap[] memoryMaps = new MemoryMap[soMaps.list.size()];
+	soMaps.list.toArray(memoryMaps);
+	return memoryMaps;
+    }
 }


hooks/post-receive
--
frysk system monitor/debugger


                 reply	other threads:[~2008-03-11  0:18 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20080311001811.30162.qmail@sourceware.org \
    --to=cagney@sourceware.org \
    --cc=frysk-cvs@sourceware.org \
    --cc=frysk@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).