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