From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30237 invoked by alias); 11 Mar 2008 00:18:22 -0000 Received: (qmail 30187 invoked by uid 367); 11 Mar 2008 00:18:11 -0000 Date: Tue, 11 Mar 2008 00:18:00 -0000 Message-ID: <20080311001811.30162.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Extract frysk.solib.MemoryMapFactory from LinuxCoreInfo; use. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 5b6dc0b96a065dc4273f08b4be598be4377e2837 X-Git-Newrev: 888e1d2496bced5836e9662d640fcb2055fa61a1 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q1/txt/msg00323.txt.bz2 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 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 * LinuxCoreInfo.java (addEnhancedMapData): Use MemoryMapFactory. frysk-core/frysk/solib/ChangeLog 2008-03-10 Andrew Cagney * 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 + * 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.addressLow) + && (map.vaddr + * 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