public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Extract frysk.solib.MemoryMapFactory from LinuxCoreInfo; use.
@ 2008-03-11  0:18 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-03-11  0:18 UTC (permalink / raw)
  To: frysk-cvs

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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-03-11  0:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-03-11  0:18 [SCM] master: Extract frysk.solib.MemoryMapFactory from LinuxCoreInfo; use cagney

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).