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