public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM] master: Add frysk.rsl loggin.
@ 2008-02-12 20:03 pmuldoon
0 siblings, 0 replies; only message in thread
From: pmuldoon @ 2008-02-12 20:03 UTC (permalink / raw)
To: frysk-cvs
The branch, master has been updated
via 26e3bdf51680d9aea0dac71a9813543f3e1e1f49 (commit)
from 34a1f7390e8fbdac0f50d42b6ac21829be6ef993 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email.
- Log -----------------------------------------------------------------
commit 26e3bdf51680d9aea0dac71a9813543f3e1e1f49
Author: Phil Muldoon <pmuldoon@redhat.com>
Date: Tue Feb 12 20:03:13 2008 +0000
Add frysk.rsl loggin.
-----------------------------------------------------------------------
Summary of changes:
frysk-core/frysk/proc/dead/CorefileByteBuffer.java | 29 ++++-
frysk-core/frysk/proc/dead/LinuxCoreHost.java | 5 +-
frysk-core/frysk/proc/dead/LinuxCoreProc.java | 120 ++++++++++++++++----
frysk-core/frysk/proc/dead/LinuxCoreTask.java | 4 +
4 files changed, 129 insertions(+), 29 deletions(-)
First 500 lines of diff:
diff --git a/frysk-core/frysk/proc/dead/CorefileByteBuffer.java b/frysk-core/frysk/proc/dead/CorefileByteBuffer.java
index 3ef2164..ca2fa92 100644
--- a/frysk-core/frysk/proc/dead/CorefileByteBuffer.java
+++ b/frysk-core/frysk/proc/dead/CorefileByteBuffer.java
@@ -1,6 +1,6 @@
// This file is part of the program FRYSK.
//
-// Copyright 2007 Red Hat Inc.
+// Copyright 2007, 2008 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
@@ -53,6 +53,7 @@ import lib.dwfl.ElfPHeader;
import inua.eio.ByteBuffer;
import inua.eio.ByteOrder;
+import frysk.rsl.Log;
public class CorefileByteBuffer
extends ByteBuffer
@@ -65,6 +66,8 @@ public class CorefileByteBuffer
File exeFile = null;
StatelessFile coreFileRaw = null;
boolean fileOpen = false;
+
+ private static final Log finest = Log.finest(CorefileByteBuffer.class);
private CorefileByteBuffer(File file, long lowerExtreem,
long upperExtreem,
@@ -104,6 +107,8 @@ public class CorefileByteBuffer
protected int peek(long address)
{
+
+ finest.log(this,"peek() address 0x" + Long.toHexString(address));
byte[] buffer = new byte[1];
MapAddressHeader metaLine = findMetaData(address);
@@ -120,6 +125,10 @@ public class CorefileByteBuffer
StatelessFile temp = new StatelessFile(new File(metaLine.name));
long offset = metaLine.solibOffset + (address - metaLine.vaddr);
temp.pread(offset, buffer,0,1);
+ finest.log(this,"peek'ed() 0x"+Integer.toHexString(buffer[0] & 0xff) +
+ " from address 0x"+Long.toHexString(address) +
+ " offset 0x"+Long.toHexString(offset) +
+ " from file: " +metaLine.name);
}
}
@@ -180,18 +189,28 @@ public class CorefileByteBuffer
data = offsetList[i];
if ((address >= data.vaddr) &&
- (address <= (data.vaddr_end)))
+ (address <= (data.vaddr_end))) {
+ finest.log(this, "findMetaData() memory location 0x" +
+ Long.toHexString(address)+ " found at " +
+ "0x"+Long.toHexString(data.vaddr)+"-"+
+ "0x"+Long.toHexString(data.vaddr_end)+
+ " Name: "+data.name);
+
return data;
+ }
}
+ finest.log(this, "findMetaData() cannot find metadata for addr 0x"+Long.toHexString(address));
return null;
}
private boolean checkCorefileAddress(MapAddressHeader data)
{
+ boolean isCoreFile = false;
if (data.fileSize > 0)
- return true;
- else
- return false;
+ isCoreFile = true;
+
+ finest.log(this,"checkCorefileAddress()= " + isCoreFile);
+ return isCoreFile;
}
diff --git a/frysk-core/frysk/proc/dead/LinuxCoreHost.java b/frysk-core/frysk/proc/dead/LinuxCoreHost.java
index 926175a..3af1cc7 100644
--- a/frysk-core/frysk/proc/dead/LinuxCoreHost.java
+++ b/frysk-core/frysk/proc/dead/LinuxCoreHost.java
@@ -110,8 +110,9 @@ public class LinuxCoreHost extends DeadHost {
if (exeSetToNull == false)
if (exeFile.canRead() && exeFile.exists()) {
try {
- this.exeFile = exeFile.getCanonicalFile();
- } catch (IOException e) {
+ //this.exeFile = exeFile.getCanonicalFile();
+ this.exeFile = exeFile;
+ } catch (Exception e) {
status.hasExe = false;
status.hasExeProblem = true;
}
diff --git a/frysk-core/frysk/proc/dead/LinuxCoreProc.java b/frysk-core/frysk/proc/dead/LinuxCoreProc.java
index bfd753c..09f0b44 100644
--- a/frysk-core/frysk/proc/dead/LinuxCoreProc.java
+++ b/frysk-core/frysk/proc/dead/LinuxCoreProc.java
@@ -61,6 +61,7 @@ import frysk.proc.Auxv;
import frysk.proc.MemoryMap;
import frysk.isa.ISA;
import frysk.isa.ElfMap;
+import frysk.rsl.Log;
public class LinuxCoreProc extends DeadProc {
@@ -73,10 +74,13 @@ public class LinuxCoreProc extends DeadProc {
// Segment and solib metadata
private MapAddressHeader metaData[];
private boolean metaDataBuilt = false;
+
+ private static final Log fine = Log.fine(LinuxCoreProc.class);
public LinuxCoreProc(ElfData data, LinuxCoreHost host, ProcId procId ) {
super(host, null, procId);
+ fine.log(this, "LinuxCoreProc(ElfData, LinuxCoreHost, ProcId)");
this.elfData = data;
this.elfProc = ElfPrpsinfo.decode(elfData);
this.corefileBackEnd = host.coreFile;
@@ -93,28 +97,36 @@ public class LinuxCoreProc extends DeadProc {
}
public String getCommand() {
+ fine.log(this,"getCommand()", elfProc.getPrFname());
return elfProc.getPrFname();
}
public String getExe() {
- if (this.exefileBackEnd != null)
+ if (this.exefileBackEnd != null) {
+ fine.log(this,"getExe()", this.exefileBackEnd.getPath());
return this.exefileBackEnd.getPath();
+ }
// Only place to find full path + exe is
// in the args list. Remove ./ if present.
String[] args = getCmdLine();
if (args.length > 0) {
if (args[0].startsWith("./"))
args[0]=args[0].substring(2);
+ fine.log(this, "getExe()", args[0]);
return args[0];
- } else
+ } else {
+ fine.log(this, "getExe()", elfProc.getPrFname());
return elfProc.getPrFname();
+ }
}
public int getUID() {
+ fine.log(this,"getUID()", elfProc.getPrUid());
return (int) elfProc.getPrUid();
}
public int getGID() {
+ fine.log(this,"getGID()", elfProc.getPrGid());
return (int) elfProc.getPrGid();
}
@@ -124,6 +136,7 @@ public class LinuxCoreProc extends DeadProc {
String rawArgs = elfProc.getPrPsargs();
String args[] = rawArgs.split(" ");
+ fine.log(this,"getCmdLine()", args);
return args;
}
@@ -144,6 +157,7 @@ public class LinuxCoreProc extends DeadProc {
throw new RuntimeException(e);
}
+ fine.log(this,"getMemory() caller: ", fine.caller());
return memory;
}
@@ -216,28 +230,51 @@ public class LinuxCoreProc extends DeadProc {
private MemoryMap[] memoryMaps;
public MemoryMap[] getMaps () {
+ fine.log(this,"getMaps()");
if (memoryMaps == null) {
+ fine.log(this,"getMaps() - Maps need to be built");
ArrayList maps = new ArrayList ();
// Build meta data if not already built.
if (!metaDataBuilt)
constructMetaData ();
+
// Refactor metadata into format expected by clients of
// sendrecMaps.
- for (int i=0; i<metaData.length; i++)
+ for (int i=0; i<metaData.length; i++) {
+ fine.log(this,"getMaps() maps ",
+
+ "0x"+Long.toHexString(metaData[i].vaddr)+
+ "-0x" + Long.toHexString(metaData[i].vaddr_end)+
+ " read: " + metaData[i].permRead +
+ " write: " + metaData[i].permWrite +
+ " execute: " + metaData[i].permExecute +
+ " false" +
+ " 0x" + Long.toHexString(metaData[i].solibOffset) +
+ " -1,-1,-1,-1,-1, " +
+ " " + metaData[i].name+"\n");
+
maps.add(new MemoryMap(metaData[i].vaddr, metaData[i].vaddr_end,
metaData[i].permRead, metaData[i].permWrite,
metaData[i].permExecute,false,
metaData[i].solibOffset,-1,-1,-1,-1,-1,
metaData[i].name));
-
+ }
memoryMaps = (MemoryMap[]) maps.toArray(new MemoryMap[maps.size()]);
- }
+ } else { fine.log("getMaps() - maps already built, returning cache");}
+
+
+ fine.log(this,"getMaps() - Completed metadata.");
+
return memoryMaps;
}
private Auxv[] auxv;
public Auxv[] getAuxv() {
+
+ fine.log(this,"getAuxv()",fine.caller());
+
if (auxv == null) {
+ fine.log(this,"Auxv is null, building");
final ElfPrAuxv prAuxv = ElfPrAuxv.decode(elfData);
class BuildAuxv extends AuxvBuilder {
Auxv[] vec;
@@ -254,7 +291,7 @@ public class LinuxCoreProc extends DeadProc {
BuildAuxv auxv = new BuildAuxv ();
auxv.construct (prAuxv.getAuxvBuffer());
this.auxv = auxv.vec;
- }
+ } else {fine.log(this,"Returning cached Auxv");}
return auxv;
}
@@ -273,12 +310,18 @@ public class LinuxCoreProc extends DeadProc {
*/
private void constructMetaData () {
+ fine.log(this,"constructMetaData()");
+
// We'll bake basic meta data for all corefiles
metaData = constructBasicMapMetadata ();
+
if (exefileBackEnd != null) {
+ fine.log(this,"constructMetaData() - exe backend is not " +
+ "null, bake enhanced data");
// If an executable is available that is paired with
// the corefile, much richer metadata can be constructed.
metaData = constructEnhancedMapMetadata (metaData);
+ fine.log(this,"constructMetaData() - Enhanced metadata complete.");
}
}
@@ -293,6 +336,7 @@ public class LinuxCoreProc extends DeadProc {
*/
private MapAddressHeader[] constructBasicMapMetadata () {
+ fine.log(this,"constructBasicMapMetaData()");
String name = "";
ArrayList tempMetaData = new ArrayList ();
// Read in contents of the corefile
@@ -345,14 +389,15 @@ public class LinuxCoreProc extends DeadProc {
*
*/
private MapAddressHeader[] constructEnhancedMapMetadata(MapAddressHeader[] basicMetaData) {
-
+
+ fine.log(this,"constructEnhancedMapMetadata()");
// Clone data. Don't use data that the caller passed.
MapAddressHeader[] tempMaps = new MapAddressHeader[basicMetaData.length];
System.arraycopy(basicMetaData,0,tempMaps,0,basicMetaData.length);
// Find Dynamic Segment
DynamicSegmentTuple dynamicTuple = getDynamicSegmentAddress();
-
+
// From that segment address, find linkmap table.
long linkmapAddress = getLinkmapAddress(dynamicTuple);
@@ -367,20 +412,24 @@ public class LinuxCoreProc extends DeadProc {
// Edge case: Get interp address so when we traverse the linkmap
// it can be paired with its name
long interpAddr = getExeInterpreterAddress ();
-
+
// Build the linkmap table from the linkmap tabl address
class BuildLinkMap extends LinkmapBuilder {
public ArrayList list = new ArrayList();
public void buildMap (long l_addr, long l_ld, long saddr, String name) {
-
+ fine.log(this, "New linkmap item: l_addr = 0x"+Long.toHexString(l_addr) +
+ " l_ld = 0x"+Long.toHexString(l_ld) +
+ " s_addr = 0x"+Long.toHexString(l_addr) +
+ " name = " + name);
list.add(new Linkmap(l_addr, l_ld, saddr, name));
}
}
// Create a temporary, noncache resetting view into the corefile
- // memory. We can pass metadata as basic metadata has already been constructed.
+ // memory. We can pass metadata as basic metadata has already
+ // been constructed.
CorefileByteBuffer tempMemory = null;
try {
tempMemory = new CorefileByteBuffer(this.corefileBackEnd, metaData);
@@ -388,13 +437,16 @@ public class LinuxCoreProc extends DeadProc {
throw new RuntimeException(e);
}
+ fine.log(this, "Building linkmap");
BuildLinkMap linkMap = new BuildLinkMap();
linkMap.construct(linkmapAddress,tempMemory);
Iterator linkMapIterator = linkMap.list.iterator();
while (linkMapIterator.hasNext()) {
Linkmap tempMap = (Linkmap) linkMapIterator.next();
- if (tempMap.s_addr == interpAddr)
+ if (tempMap.s_addr == interpAddr) {
+ fine.log("Found interpretator at linkmap address 0x"+Long.toHexString(tempMap.s_addr));
tempMap.name = interpName;
+ }
}
// From the list of solibs in the linkamp, build
@@ -427,9 +479,8 @@ public class LinuxCoreProc extends DeadProc {
// Add in case for executables maps.
- SOMaps.construct(this.exefileBackEnd,0,this.getMainTask().getISA().wordSize());
+ SOMaps.construct(this.exefileBackEnd,0,this.getMainTask().getISA().wordSize());
-
// Reconcile maps
Iterator i = SOMaps.list.iterator();
while (i.hasNext()) {
@@ -463,10 +514,14 @@ public class LinuxCoreProc extends DeadProc {
* executable has been provided
*/
private boolean isExeProvided () {
+ boolean provided = false;
+
if (this.exefileBackEnd != null)
if ((this.exefileBackEnd.isFile()) && (this.exefileBackEnd.canRead()))
- return true;
- return false;
+ provided = true;
+ fine.log(this, "isExeProvided()" + provided);
+
+ return provided;
}
/**
@@ -475,6 +530,7 @@ public class LinuxCoreProc extends DeadProc {
*/
private DynamicSegmentTuple getDynamicSegmentAddress() {
+ fine.log(this,"getDynamicSegmentAddress()");
// If we do not have an executable, we cannot find
// the dynamic segment in the corefile.
if (!isExeProvided ())
@@ -489,6 +545,9 @@ public class LinuxCoreProc extends DeadProc {
exeDynamicTuple.addr = exeDynamicTuple.addr +
coreEntryPoint - exeEntryPoint;
+ fine.log(this,"getDynamicSegmentAddress() tuple: 0x" +
+ Long.toHexString(exeDynamicTuple.addr) +
+ " Size " + exeDynamicTuple.size);
return exeDynamicTuple;
}
@@ -499,12 +558,12 @@ public class LinuxCoreProc extends DeadProc {
**/
private DynamicSegmentTuple getExeDynamicSegmentAddress () {
+ fine.log(this,"getExeDynamicSegmentAddress()");
DynamicSegmentTuple exeDynamicAddr = null;
Elf exeElf = openElf(this.exefileBackEnd);
if (exeElf != null) {
ElfEHeader eHeader = exeElf.getEHeader();
-
-
+
// Find dynamic segment by iterating through program segment
// headers
for(int headerCount=0; headerCount<eHeader.phnum; headerCount++) {
@@ -519,7 +578,11 @@ public class LinuxCoreProc extends DeadProc {
}
exeElf.close();
- }
+ }
+
+ fine.log(this,"getDynamicExeSegmentAddress() tuple: 0x" +
+ Long.toHexString(exeDynamicAddr.addr) +
+ " Size " + exeDynamicAddr.size);
return exeDynamicAddr;
}
@@ -530,10 +593,15 @@ public class LinuxCoreProc extends DeadProc {
* at the address specified by the DT_DEBUG field.
*/
private long getLinkmapAddress(DynamicSegmentTuple tuple) {
+
+ fine.log(this,"getLinkmapAddress()");
final int DT_DEBUG = 21;
- if (tuple == null)
+ if (tuple == null) {
+ fine.log(this,"Dynamic segment is null, linkmap set to 0");
return 0;
+ }
+
long dynSegmentEndAddress = tuple.addr + tuple.size;
long dtDebugAddress = 0;
long actualAddress = 0;
@@ -583,6 +651,7 @@ public class LinuxCoreProc extends DeadProc {
actualAddress = internalMem.getUWord();
}
+ fine.log(this,"Linkmap address is: 0x"+Long.toHexString(actualAddress));
return actualAddress;
}
@@ -609,6 +678,8 @@ public class LinuxCoreProc extends DeadProc {
* interpeters address
*/
private long getExeInterpreterAddress () {
+
+ fine.log(this,"getExeInterpreterAddress()");
Elf exeElf = openElf(this.exefileBackEnd);
long interpreterAddress = 0;
if (exeElf != null) {
@@ -626,6 +697,7 @@ public class LinuxCoreProc extends DeadProc {
exeElf.close();
}
+ fine.log(this,"Interpreter Addr: 0x"+Long.toHexString(interpreterAddress));
return interpreterAddress;
}
@@ -634,6 +706,7 @@ public class LinuxCoreProc extends DeadProc {
* interpeters name
*/
private String getExeInterpreterName () {
+ fine.log(this,"getExeInterpreterName()");
Elf exeElf = openElf(this.exefileBackEnd);
String interpName = "";
if (exeElf != null) {
@@ -654,7 +727,7 @@ public class LinuxCoreProc extends DeadProc {
exeElf.close();
}
-
+ fine.log(this,"Interpreter name:", interpName);
return interpName;
}
@@ -663,6 +736,7 @@ public class LinuxCoreProc extends DeadProc {
* entry point
*/
private long getCorefileEntryPoint () {
+ fine.log(this,"getCorefileEntryPoint()");
// Need auxv data
Auxv[] auxv = getAuxv ();
long entryPoint = 0;
@@ -677,6 +751,7 @@ public class LinuxCoreProc extends DeadProc {
break;
}
+ fine.log(this,"Corefile Entrypoint: 0x"+Long.toHexString(entryPoint));
return entryPoint;
}
@@ -685,6 +760,7 @@ public class LinuxCoreProc extends DeadProc {
* VDSO address
*/
private long getCorefileVDSOAddress () {
+ fine.log(this,"getCorefileVDSOAddress()");
Auxv[] auxv = getAuxv();
long vdsoEntryPoint = 0;
@@ -697,7 +773,7 @@ public class LinuxCoreProc extends DeadProc {
vdsoEntryPoint = auxv[i].val;
break;
}
-
+ fine.log(this,"Corefile VDSO Address 0x"+Long.toHexString(vdsoEntryPoint));
return vdsoEntryPoint;
}
hooks/post-receive
--
frysk system monitor/debugger
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-02-12 20:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-02-12 20:03 [SCM] master: Add frysk.rsl loggin pmuldoon
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).