public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Enable TestCoreRegs. Rewrite FP corefile strategy using BankRegisters.
@ 2008-01-03 19:12 pmuldoon
  0 siblings, 0 replies; only message in thread
From: pmuldoon @ 2008-01-03 19:12 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  a3e5b92b48251724a597a2c727cc193bb8fa28c1 (commit)
      from  c6df012a11ded1aea17d10a8b20484a054ec95f4 (commit)

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

- Log -----------------------------------------------------------------
commit a3e5b92b48251724a597a2c727cc193bb8fa28c1
Author: Phil Muldoon <pmuldoon@redhat.com>
Date:   Thu Jan 3 19:12:03 2008 +0000

    Enable TestCoreRegs. Rewrite FP corefile strategy using BankRegisters.
    
    2008-01-03  Phil Muldoon  <pmuldoon@redhat.com>
    
            * TestCoreRegs.java (testFloatingRegisters): Enable.
            (testVectorRegisters): Enable.
    
    2008-01-03  Phil Muldoon  <pmuldoon@redhat.com>
    
            * TestCoredumpAction.java (testGeneralPurposeRegisters): Delete. Replaced by
            frysk.proc.dead.TestCoreRegs.
            (testFloatingPointRegisters): Ditto.
            (testXFloatingPointRegisters): Ditto.
            * IA32LinuxElfCorefile.java (writeNotePRXFPRegSet): Rewrite and
            use BankRegisters.
            (writeNotePRFPRegSet): Ditto.
            * X8664LinuxElfCorefile.java (writeNotePRFPRegSet): Ditto.

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

Summary of changes:
 frysk-core/frysk/proc/dead/ChangeLog             |    5 +
 frysk-core/frysk/proc/dead/TestCoreRegs.java     |   13 +--
 frysk-core/frysk/util/ChangeLog                  |   11 ++
 frysk-core/frysk/util/IA32LinuxElfCorefile.java  |   86 +++++++-----
 frysk-core/frysk/util/TestCoredumpAction.java    |  159 +---------------------
 frysk-core/frysk/util/X8664LinuxElfCorefile.java |   43 ++++--
 6 files changed, 103 insertions(+), 214 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/proc/dead/ChangeLog b/frysk-core/frysk/proc/dead/ChangeLog
index 9488b1f..4fecae0 100644
--- a/frysk-core/frysk/proc/dead/ChangeLog
+++ b/frysk-core/frysk/proc/dead/ChangeLog
@@ -1,3 +1,8 @@
+2008-01-03  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* TestCoreRegs.java (testFloatingRegisters): Enable.
+	(testVectorRegisters): Enable.
+
 2008-01-02  Andrew Cagney  <cagney@redhat.com>
 
 	* LinuxCoreHost.java: Rename LinuxHost.java.
diff --git a/frysk-core/frysk/proc/dead/TestCoreRegs.java b/frysk-core/frysk/proc/dead/TestCoreRegs.java
index a911268..6305257 100644
--- a/frysk-core/frysk/proc/dead/TestCoreRegs.java
+++ b/frysk-core/frysk/proc/dead/TestCoreRegs.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
@@ -45,7 +45,6 @@ import frysk.proc.Proc;
 import frysk.testbed.CoreFileAtSignal;
 import frysk.util.Util;
 import java.io.File;
-import frysk.isa.ISA;
 
 /**
  * Check all register values.
@@ -72,21 +71,11 @@ public class TestCoreRegs extends RegsCase {
 	return task().getRegister(register);
     }
 
-    // XXX: Delete this once the unresolved cases are fixed.
     public void testFloatRegisters() {
-	if (isa() == ISA.IA32 && unresolved(4911))
-	    return;
-        if (isa() == ISA.X8664 && unresolved(5195))
-            return;
 	super.testFloatRegisters();
     }
 
-    // XXX: Delete this once the unresolved cases are fixed.
     public void testVectorRegisters() {
-	if (isa() == ISA.IA32 && unresolved(4911))
-	    return;
-        if (isa() == ISA.X8664 && unresolved(5195))
-            return;
 	super.testVectorRegisters();
     }
 }
diff --git a/frysk-core/frysk/util/ChangeLog b/frysk-core/frysk/util/ChangeLog
index 88207f3..ee709e4 100644
--- a/frysk-core/frysk/util/ChangeLog
+++ b/frysk-core/frysk/util/ChangeLog
@@ -1,3 +1,14 @@
+2008-01-03  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* TestCoredumpAction.java (testGeneralPurposeRegisters): Delete. Replaced by
+	frysk.proc.dead.TestCoreRegs.
+	(testFloatingPointRegisters): Ditto.
+	(testXFloatingPointRegisters): Ditto. 
+	* IA32LinuxElfCorefile.java (writeNotePRXFPRegSet): Rewrite and
+	use BankRegisters.
+	(writeNotePRFPRegSet): Ditto.
+	* X8664LinuxElfCorefile.java (writeNotePRFPRegSet): Ditto.
+
 2008-01-02  Andrew Cagney  <cagney@redhat.com>
 
 	* TestCoredumpAction.java: Update frysk.proc.dead.LinuxHost
diff --git a/frysk-core/frysk/util/IA32LinuxElfCorefile.java b/frysk-core/frysk/util/IA32LinuxElfCorefile.java
index be6bdfc..1c0b16d 100644
--- a/frysk-core/frysk/util/IA32LinuxElfCorefile.java
+++ b/frysk-core/frysk/util/IA32LinuxElfCorefile.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
@@ -39,25 +39,29 @@
 
 package frysk.util;
 
-import frysk.proc.Proc;
-import frysk.proc.Task;
-import inua.eio.ByteBuffer;
+import inua.eio.ArrayByteBuffer;
+
+import java.util.Iterator;
 
+import lib.dwfl.ElfEHeader;
+import lib.dwfl.ElfEMachine;
 import lib.dwfl.ElfNhdr;
 import lib.dwfl.ElfNhdrType;
-import lib.dwfl.ElfEMachine;
-import lib.dwfl.ElfEHeader;
 import lib.dwfl.ElfPrAuxv;
-import lib.dwfl.ElfPrpsinfo;
-import lib.dwfl.ElfPrstatus;
 import lib.dwfl.ElfPrFPRegSet;
 import lib.dwfl.ElfPrXFPRegSet;
+import lib.dwfl.ElfPrpsinfo;
+import lib.dwfl.ElfPrstatus;
+import frysk.bank.BankRegister;
+import frysk.bank.LinuxIA32RegisterBanks;
+import frysk.isa.IA32Registers;
+import frysk.isa.Register;
+import frysk.proc.Proc;
+import frysk.proc.Task;
 import frysk.sys.proc.AuxvBuilder;
 import frysk.sys.proc.CmdLineBuilder;
 import frysk.sys.proc.Stat;
 import frysk.sys.proc.Status;
-import frysk.isa.IA32Registers;
-import frysk.isa.Register;
 
 
 /**
@@ -236,15 +240,25 @@ public class IA32LinuxElfCorefile extends LinuxElfCorefile {
      * @see frysk.util.LinuxElfCorefile#writeNoteFPRegset(lib.dwfl.ElfNhdr, frysk.proc.Task)
      */
     protected void writeNoteFPRegset(ElfNhdr nhdrEntry, Task task) {
+	
+    	final int bankSize = 108;
+    	byte[] scratch = new byte[10];
+    	byte[] byteOrderedRegister= new byte[bankSize];
+    	ArrayByteBuffer byteOrderedBuffer = new ArrayByteBuffer(byteOrderedRegister);
+    	
+    	Iterator registerIterator =  LinuxIA32RegisterBanks.FPREGS.entryIterator();
+    	while (registerIterator.hasNext()) {
+	    BankRegister bankRegister = ((BankRegister)registerIterator.next());
+	    Register register = bankRegister.getRegister();
+	    task.access(register, 0, register.getType().getSize(), scratch, 0, false);
+	    bankRegister.access(byteOrderedBuffer, 0, register.getType().getSize(), scratch, 0, true);
+    	}
+	
+	byteOrderedBuffer.get(byteOrderedRegister);
+	
 	ElfPrFPRegSet fpRegSet = new ElfPrFPRegSet();
-
-	// Write FP Register info over wholesae. Do not interpret.
-	ByteBuffer registerMaps[] = task.getRegisterBuffersFIXME();
-	byte[] regBuffer = new byte[(int) registerMaps[1].capacity()];
-	registerMaps[1].get(regBuffer);
-
-	fpRegSet.setFPRegisterBuffer(regBuffer);
-
+	fpRegSet.setFPRegisterBuffer(byteOrderedRegister);
+	
 	// Write it
 	nhdrEntry.setNhdrDesc(ElfNhdrType.NT_FPREGSET, fpRegSet);
     }
@@ -252,24 +266,30 @@ public class IA32LinuxElfCorefile extends LinuxElfCorefile {
     /* (non-Javadoc)
      * @see frysk.util.LinuxElfCorefile#writeNotePRXFPRegset(lib.dwfl.ElfNhdr, frysk.proc.Task)
      */
-    protected boolean writeNotePRXFPRegset(ElfNhdr nhdrEntry, Task task)
-    {
+    protected boolean writeNotePRXFPRegset(ElfNhdr nhdrEntry, Task task) {
 	ElfPrXFPRegSet xfpRegSet = new ElfPrXFPRegSet();
-
-	// Write FP Register info over wholesae. Do not interpret.
-	ByteBuffer registerMaps[] = task.getRegisterBuffersFIXME();
-	if (registerMaps[2].capacity() <=0)
-	  {
-	    return false;
-	  }
-	byte[] regBuffer = new byte[(int) registerMaps[2].capacity()];
-	registerMaps[2].get(regBuffer);
-
-	xfpRegSet.setXFPRegisterBuffer(regBuffer);
-
+	
+	final int bankSize = 512;
+	final int maxRegSize = 16;
+	byte[] scratch = new byte[maxRegSize];
+	byte[] byteOrderedRegister= new byte[bankSize];
+	ArrayByteBuffer byteOrderedBuffer = new ArrayByteBuffer(byteOrderedRegister);
+	
+	Iterator registerIterator =  LinuxIA32RegisterBanks.XFPREGS.entryIterator();
+	while (registerIterator.hasNext()) {
+	    BankRegister bankRegister = ((BankRegister)registerIterator.next());
+	    Register register = bankRegister.getRegister();
+	    task.access(register, 0, register.getType().getSize(), scratch, 0, false);
+	    bankRegister.access(byteOrderedBuffer, 0, register.getType().getSize(), scratch, 0, true);
+	}
+	
+	byteOrderedBuffer.get(byteOrderedRegister);
+	
+	xfpRegSet.setXFPRegisterBuffer(byteOrderedRegister);
+	
 	// Write it
 	nhdrEntry.setNhdrDesc(ElfNhdrType.NT_PRXFPREG, xfpRegSet);
-
+	
 	return true;
     }
 
diff --git a/frysk-core/frysk/util/TestCoredumpAction.java b/frysk-core/frysk/util/TestCoredumpAction.java
index 7dcd05d..12c3e4d 100644
--- a/frysk-core/frysk/util/TestCoredumpAction.java
+++ b/frysk-core/frysk/util/TestCoredumpAction.java
@@ -40,10 +40,10 @@
 
 package frysk.util;
 
-import inua.eio.ByteBuffer;
 import inua.eio.ByteOrder;
-import frysk.isa.ISA;
+
 import java.io.File;
+
 import lib.dwfl.Elf;
 import lib.dwfl.ElfCommand;
 import lib.dwfl.ElfEHeader;
@@ -53,13 +53,13 @@ import lib.dwfl.ElfFileException;
 import lib.dwfl.ElfKind;
 import frysk.event.Event;
 import frysk.event.RequestStopEvent;
+import frysk.isa.ISA;
 import frysk.proc.Auxv;
 import frysk.proc.Manager;
 import frysk.proc.MemoryMap;
 import frysk.proc.Proc;
 import frysk.proc.ProcBlockAction;
 import frysk.proc.ProcId;
-import frysk.proc.Task;
 import frysk.proc.dead.LinuxCoreHost;
 import frysk.testbed.DaemonBlockedAtEntry;
 import frysk.testbed.SlaveOffspring;
@@ -199,159 +199,6 @@ public class TestCoredumpAction
     testCore.delete();
   }
 
-  
-  public void testGeneralPurposeRegisters () {
-      if (unresolvedOn32On64(5525))
-	  return;
-
-      // Construct a process
-      Proc ackProc = giveMeABlockedProc();
-      assertNotNull("Found Process",ackProc);
-      
-      // Get main task
-      Task mainLiveTask = ackProc.getMainTask();
-      assertNotNull("Found main live task",mainLiveTask);
-      
-      // Get the live process register banks and store them
-      ByteBuffer liveRegisterMaps[] = mainLiveTask.getRegisterBuffersFIXME();
-      long bankSize = liveRegisterMaps[0].capacity();
-      byte[] liveRegBuffer = new byte[(int)bankSize];
-      liveRegisterMaps[0].get(0,liveRegBuffer,0,(int) liveRegisterMaps[0].capacity());
-      
-      // Create a corefile from process
-      String coreFileName = constructCore(ackProc);
-      File testCore = new File(coreFileName);
-      assertTrue("Checking core file " + coreFileName + " exists.",
-                 testCore.exists());
-
-      // Model the corefile, and get the Process.
-      LinuxCoreHost lcoreHost = new LinuxCoreHost(Manager.eventLoop, 
-		   testCore);      
-      assertNotNull("Checking core file Host", lcoreHost);
-      
-      // Get corefile process
-      Proc coreProc = lcoreHost.getProc(new ProcId(ackProc.getPid())); 
-      assertNotNull("Checking core file process", coreProc);
-      
-      // Get Main tasks of corefile
-      Task mainCoreTask = coreProc.getMainTask();
-      assertNotNull("Checking core main task", mainCoreTask);
- 
-      // Get corefile registers
-      ByteBuffer coreRegisterMaps[] = mainCoreTask.getRegisterBuffersFIXME(); 
-      byte[] coreRegBuffer = new byte[(int) coreRegisterMaps[0].capacity()];
-      coreRegisterMaps[0].get(coreRegBuffer);
-      
-      // Compare
-      for (int i=0; i<liveRegBuffer.length; i++)
-	assertEquals("General Purpose Register buffer postion "+i,coreRegBuffer[i],liveRegBuffer[i]);
-
-
-      testCore.delete();
- }
-
-  public void testFloatingPointRegisters ()
-  {
-      
-      // PowerPc doesnt have a bank for Floating Point registers
-      // this registers are with all others in the main bank
-      if (unresolvedOnPPC(4890))
-         return;	
-
-      // Construct a process
-      Proc ackProc = giveMeABlockedProc();
-      assertNotNull("Found Process",ackProc);
-      
-      // Get main task
-      Task mainLiveTask = ackProc.getMainTask();
-      assertNotNull("Found main live task",mainLiveTask);
-      
-      // Get the live process register banks and store them
-      ByteBuffer liveRegisterMaps[] = mainLiveTask.getRegisterBuffersFIXME();
-      byte[] liveRegBuffer = new byte[(int) liveRegisterMaps[1].capacity()];
-      liveRegisterMaps[1].get(0,liveRegBuffer,0,(int) liveRegisterMaps[1].capacity());
-      
-      // Create a corefile from process
-      String coreFileName = constructCore(ackProc);
-      File testCore = new File(coreFileName);
-      assertTrue("Checking core file " + coreFileName + " exists.",
-                 testCore.exists());
-
-      // Model the corefile, and get the Process.
-      LinuxCoreHost lcoreHost = new LinuxCoreHost(Manager.eventLoop, 
-		   testCore);      
-      assertNotNull("Checking core file Host", lcoreHost);
-      
-      // Get corefile process
-      Proc coreProc = lcoreHost.getProc(new ProcId(ackProc.getPid())); 
-      assertNotNull("Checking core file process", coreProc);
-      
-      // Get Main tasks of corefile
-      Task mainCoreTask = coreProc.getMainTask();
-      assertNotNull("Checking core main task", mainCoreTask);
- 
-      // Get corefile registers
-      ByteBuffer coreRegisterMaps[] = mainCoreTask.getRegisterBuffersFIXME(); 
-      byte[] coreRegBuffer = new byte[(int) coreRegisterMaps[1].capacity()];
-      coreRegisterMaps[1].get(coreRegBuffer);
-      
-      // Compare
-      for (int i=0; i<coreRegBuffer.length; i++)
-	  assertEquals("Floating Point Register buffer postion "+i,coreRegBuffer[i],liveRegBuffer[i]);
-
-      testCore.delete();
- }
-
-  
-  public void testXFloatingPointRegisters ()
-  {
-      
-      if (unresolvedOnPPC(4890) || unresolvedOnx8664(4890))
-	  return;
-      // Construct a process
-      Proc ackProc = giveMeABlockedProc();
-      assertNotNull("Found Process",ackProc);
-      
-      // Get main task
-      Task mainLiveTask = ackProc.getMainTask();
-      assertNotNull("Found main live task",mainLiveTask);
-      
-      // Get the live process register banks and store them
-      ByteBuffer liveRegisterMaps[] = mainLiveTask.getRegisterBuffersFIXME();
-      byte[] liveRegBuffer = new byte[(int) liveRegisterMaps[2].capacity()];
-      liveRegisterMaps[2].get(0,liveRegBuffer,0,(int) liveRegisterMaps[2].capacity());
-      
-      // Create a corefile from process
-      String coreFileName = constructCore(ackProc);
-      File testCore = new File(coreFileName);
-      assertTrue("Checking core file " + coreFileName + " exists.",
-                 testCore.exists());
-
-      // Model the corefile, and get the Process.
-      LinuxCoreHost lcoreHost = new LinuxCoreHost(Manager.eventLoop, 
-		   testCore);      
-      assertNotNull("Checking core file Host", lcoreHost);
-      
-      // Get corefile process
-      Proc coreProc = lcoreHost.getProc(new ProcId(ackProc.getPid())); 
-      assertNotNull("Checking core file process", coreProc);
-      
-      // Get Main tasks of corefile
-      Task mainCoreTask = coreProc.getMainTask();
-      assertNotNull("Checking core main task", mainCoreTask);
- 
-      // Get corefile registers
-      ByteBuffer coreRegisterMaps[] = mainCoreTask.getRegisterBuffersFIXME(); 
-      byte[] coreRegBuffer = new byte[(int) coreRegisterMaps[2].capacity()];
-      coreRegisterMaps[2].get(coreRegBuffer);
-      
-      // Compare
-      for (int i=0; i<coreRegBuffer.length; i++)
-	  assertEquals("X Floating Point Register buffer postion "+i,coreRegBuffer[i],liveRegBuffer[i]);
-  
-      testCore.delete();
- }
-
   public void testAuxv ()
   {
       // Construct a process
diff --git a/frysk-core/frysk/util/X8664LinuxElfCorefile.java b/frysk-core/frysk/util/X8664LinuxElfCorefile.java
index 7d4fb1c..2b0f238 100644
--- a/frysk-core/frysk/util/X8664LinuxElfCorefile.java
+++ b/frysk-core/frysk/util/X8664LinuxElfCorefile.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
@@ -39,7 +39,10 @@
 
 package frysk.util;
 
-import inua.eio.ByteBuffer;
+import inua.eio.ArrayByteBuffer;
+
+import java.util.Iterator;
+
 import lib.dwfl.ElfEHeader;
 import lib.dwfl.ElfEMachine;
 import lib.dwfl.ElfNhdr;
@@ -48,6 +51,8 @@ import lib.dwfl.ElfPrAuxv;
 import lib.dwfl.ElfPrFPRegSet;
 import lib.dwfl.ElfPrpsinfo;
 import lib.dwfl.ElfPrstatus;
+import frysk.bank.BankRegister;
+import frysk.bank.LinuxX8664RegisterBanks;
 import frysk.isa.Register;
 import frysk.isa.X8664Registers;
 import frysk.proc.Proc;
@@ -242,17 +247,29 @@ public class X8664LinuxElfCorefile extends LinuxElfCorefile {
      * @see frysk.util.LinuxElfCorefile#writeNoteFPRegset(lib.dwfl.ElfNhdr, frysk.proc.Task)
      */
     protected void writeNoteFPRegset(ElfNhdr nhdrEntry, Task task) {
-	ElfPrFPRegSet fpRegSet = new ElfPrFPRegSet();
-
-	// Write FP Register info over wholesae. Do not interpret.
-	ByteBuffer registerMaps[] = task.getRegisterBuffersFIXME();
-	byte[] regBuffer = new byte[(int) registerMaps[1].capacity()];
-	registerMaps[1].get(regBuffer);
-
-	fpRegSet.setFPRegisterBuffer(regBuffer);
-
-	// Write it
-	nhdrEntry.setNhdrDesc(ElfNhdrType.NT_FPREGSET, fpRegSet);
+	
+    	ElfPrFPRegSet xfpRegSet = new ElfPrFPRegSet();
+	
+    	final int bankSize = 512;
+    	final int maxRegSize = 16;
+    	byte[] scratch = new byte[maxRegSize];
+    	byte[] byteOrderedRegister= new byte[bankSize];
+    	ArrayByteBuffer byteOrderedBuffer = new ArrayByteBuffer(byteOrderedRegister);
+    	
+    	Iterator registerIterator =  LinuxX8664RegisterBanks.FPREGS.entryIterator();
+    	while (registerIterator.hasNext()) {
+	    BankRegister bankRegister = ((BankRegister)registerIterator.next());
+	    Register register = bankRegister.getRegister();
+	    task.access(register, 0, register.getType().getSize(), scratch, 0, false);
+	    bankRegister.access(byteOrderedBuffer, 0, register.getType().getSize(), scratch, 0, true);
+    	}
+	
+    	byteOrderedBuffer.get(byteOrderedRegister);
+	
+    	xfpRegSet.setFPRegisterBuffer(byteOrderedRegister);
+	
+    	// Write it
+    	nhdrEntry.setNhdrDesc(ElfNhdrType.NT_FPREGSET, xfpRegSet);
     }
 
     /* (non-Javadoc)


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


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

only message in thread, other threads:[~2008-01-03 19:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-01-03 19:12 [SCM] master: Enable TestCoreRegs. Rewrite FP corefile strategy using BankRegisters 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).