[SCM] master: Adds fmaps command

pmuldoon@sourceware.org pmuldoon@sourceware.org
Mon Dec 10 14:49:00 GMT 2007


The branch, master has been updated
       via  4684fc99d954edfb96985ac678d4c1e8b45a8a2c (commit)
      from  898a3b520202dc904f4dbd2863380842bcf0e727 (commit)

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

- Log -----------------------------------------------------------------
commit 4684fc99d954edfb96985ac678d4c1e8b45a8a2c
Author: Phil Muldoon <pmuldoon@redhat.com>
Date:   Mon Dec 10 14:49:33 2007 +0000

    Adds fmaps command
    
    2007-12-10  Phil Muldoon  <pmuldoon@redhat.com>
    
    	* fmaps.java: New.
    	* fmaps.xml: New.
    	* TestFmaps.java: New.

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

Summary of changes:
 frysk-core/frysk/bindir/ChangeLog                  |    6 ++
 .../frysk/bindir/{TestFexe.java => TestFmaps.java} |   47 +++++++---
 .../dead/ExeByteBuffer.java => bindir/fmaps.java}  |   94 ++++++++++----------
 frysk-core/frysk/bindir/{fstack.xml => fmaps.xml}  |   41 ++++-----
 4 files changed, 106 insertions(+), 82 deletions(-)
 copy frysk-core/frysk/bindir/{TestFexe.java => TestFmaps.java} (65%)
 copy frysk-core/frysk/{proc/dead/ExeByteBuffer.java => bindir/fmaps.java} (61%)
 copy frysk-core/frysk/bindir/{fstack.xml => fmaps.xml} (82%)

First 500 lines of diff:
diff --git a/frysk-core/frysk/bindir/ChangeLog b/frysk-core/frysk/bindir/ChangeLog
index c9fcddd..8e19593 100644
--- a/frysk-core/frysk/bindir/ChangeLog
+++ b/frysk-core/frysk/bindir/ChangeLog
@@ -1,3 +1,9 @@
+2007-12-10  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* fmaps.java: New.
+	* fmaps.xml: New.
+	* TestFmaps.java: New.
+
 2007-11-30  Petr Machata  <pmachata@redhat.com>
 
 	* ftrace.xml: Updated.
diff --git a/frysk-core/frysk/bindir/TestFexe.java b/frysk-core/frysk/bindir/TestFmaps.java
similarity index 65%
copy from frysk-core/frysk/bindir/TestFexe.java
copy to frysk-core/frysk/bindir/TestFmaps.java
index adb9a70..c4dc03e 100644
--- a/frysk-core/frysk/bindir/TestFexe.java
+++ b/frysk-core/frysk/bindir/TestFmaps.java
@@ -43,21 +43,40 @@ import frysk.junit.TestCase;
 import frysk.expunit.Expect;
 import frysk.Config;
 import java.io.File;
+import frysk.testbed.TearDownExpect;
+import frysk.testbed.CoreFileAtSignal;
 
-public class TestFexe
-    extends TestCase
+public class TestFmaps
+  extends TestCase
 {
-    Expect e;
-    public void tearDown () {
-	if (e != null)
-	    e.close ();
-	e = null;
+  
+  /**
+   * Start fmaps with both a core file and an executable; avoids
+   * problems with Linux's bone-head COREFILE format storing only
+   * the first 50 characters of the executable.
+   */
+  private Expect fmaps(String program, String[] args) {
+    File coreExe = Config.getPkgLibFile(program);
+    File coreFile = CoreFileAtSignal.constructCore(coreExe);
+    String[] argv = new String[args.length + 3];
+    int argc = 0;
+    argv[argc++] = Config.getBinFile("fmaps").getAbsolutePath();
+    argv[argc++] = coreFile.getAbsolutePath();
+    argv[argc++] = coreExe.getAbsolutePath();
+    for (int i = 0; i < args.length; i++) {
+      argv[argc + i] = args[i];
     }
-    
-    public void testExeOfPid() {
-	File fexe = Config.getBinFile("fexe");
-	e = new Expect(fexe.getAbsolutePath () + " $$");
-	e.expect(fexe + "\r\n");
-    }
-
+    Expect e = new Expect(argv);
+    TearDownExpect.add(e);
+    return e;
+  }
+  
+  // Basic sniff test, are we getting output that looks like a map?
+  // getMaps is tested in the frysk-core/proc namespalce
+  public void testExeOfPid() {
+    Expect e  = fmaps("funit-stack-outlined", new String[0]);
+    e.expect("frysk/pkglibdir/funit-stack-outlined");
+    e.expect("ld-");
+    e.expect("libc");
+  }
 }
diff --git a/frysk-core/frysk/proc/dead/ExeByteBuffer.java b/frysk-core/frysk/bindir/fmaps.java
similarity index 61%
copy from frysk-core/frysk/proc/dead/ExeByteBuffer.java
copy to frysk-core/frysk/bindir/fmaps.java
index cde7b8d..82766e6 100644
--- a/frysk-core/frysk/proc/dead/ExeByteBuffer.java
+++ b/frysk-core/frysk/bindir/fmaps.java
@@ -37,60 +37,62 @@
 // version and license this file solely under the GPL without
 // exception.
 
-package frysk.proc.dead;
+package frysk.bindir;
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import frysk.sys.StatelessFile;
+import frysk.util.CommandlineParser;
+import frysk.util.Util;
+import frysk.proc.Proc;
+import frysk.proc.ProcId;
 import frysk.proc.MemoryMap;
+import java.io.File;
+import frysk.util.CoreExePair;
 
-import inua.eio.ByteBuffer;
-
-public class ExeByteBuffer extends ByteBuffer {
-
-    ArrayList metaData = new ArrayList();
+public class fmaps {
+  
+  public static void main (String[] args) {
+    // Parse command line. Check pid provided.
     
-    protected ExeByteBuffer(long lowWater, long highWater) {
-	super(lowWater, highWater);
-    }
-
-    public ExeByteBuffer(ArrayList metaData)
-    {
-	super(0,-1);
+    CommandlineParser parser = new CommandlineParser("fexe") {
 	
-	this.metaData = metaData;
-    }
-    
-    protected int peek(long caret) {
+	public void parseCores (CoreExePair[] corePairs) {
+	  for (int i = 0; i < corePairs.length; i++) {
+	    File coreFile = corePairs[i].coreFile;
+	    File exeFile = corePairs[i].exeFile;
+	    Proc proc;
+	    
+	    if (exeFile == null)
+	      proc = Util.getProcFromCoreFile(coreFile);
+	    else
+	      proc = Util.getProcFromCoreFile(coreFile, exeFile);
+	    printMaps(proc.getMaps());
+	  }
+	  
+	  System.exit(0);
+	}
 	
-	Iterator i = metaData.iterator();
-	MemoryMap line = null;
-	long offset = -1;
-	byte[] buffer = new byte[1];
+	public void parsePids (ProcId[] pids) {
+	  for (int i= 0; i< pids.length; i++) {
+	    ProcId id = pids[i];
+	    Proc proc = Util.getProcFromPid(id);
+	    printMaps(proc.getMaps());
+	  }
+	  System.exit(0);
+	}
 	
-	while (i.hasNext())
+	private void printMaps(MemoryMap[] maps)
 	{
-	    line = ((MemoryMap)i.next());
-	    if ((caret >= line.addressLow) && (caret<= line.addressHigh))
-		    {
-			offset = line.offset + (caret - line.addressLow);
-			break;
-		    }
+	  for(int i=0; i<maps.length; i++)
+	    System.out.println(maps[i].toString());
 	}
 	
-	if (offset == -1)
-	    throw new RuntimeException("Cannot find memory in exe file");
-
-	StatelessFile temp = new StatelessFile(new File(line.name));
-	temp.pread(offset, buffer,0,1);
-	
-	return buffer[0];
-    }
-
-    protected void poke(long caret, int val) {
-	throw new RuntimeException("Cannot poke into Executable. File bug.");
-    }
-
+      };
+    
+    parser.setHeader("Usage: fmaps <PID>  || fmaps <COREFILE> [<EXEFILE>]");
+    parser.parse(args);
+   
+    //If we got here, we didn't find a pid.
+    System.err.println("Error: No PID or COREFILE.");
+    parser.printHelp();
+    System.exit(1);
+  }
 }
diff --git a/frysk-core/frysk/bindir/fstack.xml b/frysk-core/frysk/bindir/fmaps.xml
similarity index 82%
copy from frysk-core/frysk/bindir/fstack.xml
copy to frysk-core/frysk/bindir/fmaps.xml
index e4eb9f5..ec08dad 100644
--- a/frysk-core/frysk/bindir/fstack.xml
+++ b/frysk-core/frysk/bindir/fmaps.xml
@@ -4,7 +4,7 @@
 
  This file is part of the program FRYSK.
 
- Copyright 2006, Red Hat Inc.
+ Copyright 2007, Red Hat Inc.
 
  FRYSK is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by
@@ -48,50 +48,47 @@
 
 <!-- http://docbook.sourceforge.net/snapshots/xsl/manpages/README -->
 
-<refentry id="fstack">
+<refentry id="fmaps">
 
   <refentryinfo>
-    <title>fstack</title>
-    <date>September 20 2006</date>
+    <title>fmaps</title>
+    <date>December 10 2007</date>
   </refentryinfo>
   
   <refmeta>
-    <refentrytitle>fstack</refentrytitle>
+    <refentrytitle>fmaps</refentrytitle>
     <manvolnum>1</manvolnum>
   </refmeta>
 
   <refnamediv>
-    <refname>fstack</refname>
-    <refpurpose>Runs the frysk stack trace utility</refpurpose>
+    <refname>fmaps</refname>
+    <refpurpose>Prints out a process or a corefile's maps.</refpurpose>
   </refnamediv>
   
   <refsynopsisdiv>
     <cmdsynopsis>
-      <command>fstack</command>
-       <arg choice="opt">
+      <command>fmaps</command>
+      <arg choice="opt">
         <option>--console <replaceable>LOG=LEVEL,...</replaceable></option>
       </arg>
       <arg choice="opt">
         <option>--log <replaceable>LOG=LEVEL,...</replaceable></option>
       </arg>
-      <arg rep="repeat" choice="plain">
-        <replaceable>pids</replaceable>
+     <arg rep="repeat" choice="plain">
+        <replaceable>pids corefile</replaceable>
       </arg>
-      <!-- arg choice="opt">
-        <option>-list of options</option>
-      </arg -->
     </cmdsynopsis>
   </refsynopsisdiv>
   
   <refsect1>
     <title>DESCRIPTION</title>
 
-    <para><function>fstack</function> Runs the frysk stack tracing utility.</para>
+    <para><function>fmaps</function> Executes the frysk map dump utility.</para>
 
-    <para>fstack is a small utility that uses the frysk engine to display a process stack in a similar manner to pstack. </para>
+    <para>fmaps is a utility that prints out a process or a corefile's maps. </para>
 
     <variablelist>
-    <varlistentry>
+      <varlistentry>
 	<term><option>--console <replaceable>LOG=LEVEL,...</replaceable></option></term>
 	<listitem>
           <para> Enable logging to the console and at the specified
@@ -103,7 +100,7 @@
 	<listitem>
           <para> Specify the file logging level. The log level can be: [ OFF | SEVERE | WARNING | INFO | CONFIG | FINE | FINER | FINEST].</para>
         </listitem>
-      </varlistentry>      
+      </varlistentry>
     </variablelist>
   </refsect1>
   
@@ -129,7 +126,7 @@
   
   <refsect1>
     <title>EXAMPLE</title>
-    <screen>fstack pid [...]</screen>
+    <screen>fcore pid [...]</screen>
   </refsect1>
    
   <!-- refsect1>
@@ -144,7 +141,7 @@
 
   <refsect1>
     <title>SEE ALSO</title>
-    <para>funit(8) fcatch(1) fstack(1) fstep(1) ftrace(1)</para>
+    <para>fexe(1) funit(8) fcatch(1) fhpd(1) fstack(1) fstep(1) ftrace(1)</para>
   </refsect1>
   
   <!-- refsect1>
@@ -164,8 +161,8 @@
   
   <refsect1>
     <title>BUGS</title>
-    <para>Report bugs to <ulink url="http:/sources.redhat.com/frysk">
-    http://sources.redhat.com/frysk/ </ulink>. </para>
+    <para>Report bugs to <ulink url="http://sources.redhat.com/frysk">
+    http://sources.redhat.com/frysk </ulink></para>
   </refsect1>
   
   <!-- refsect1>


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



More information about the Frysk-cvs mailing list