public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: pmuldoon@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Enable TestCoreRegs. Rewrite FP corefile strategy using BankRegisters.
Date: Thu, 03 Jan 2008 19:12:00 -0000	[thread overview]
Message-ID: <20080103191209.6569.qmail@sourceware.org> (raw)

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


                 reply	other threads:[~2008-01-03 19:12 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=20080103191209.6569.qmail@sourceware.org \
    --to=pmuldoon@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: link
Be 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).