From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22063 invoked by alias); 6 Jun 2008 18:47:25 -0000 Received: (qmail 22035 invoked by uid 9708); 6 Jun 2008 18:47:25 -0000 Date: Fri, 06 Jun 2008 18:47:00 -0000 Message-ID: <20080606184725.22020.qmail@sourceware.org> From: tthomas@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Synchronize fhpd, stepping engine and breakpoints. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 1cfab34772f780f0496b3d5007217b41c04264d6 X-Git-Newrev: 203393a2fbb9559a36f78993d292cf9ce5df9f13 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00347.txt.bz2 The branch, master has been updated via 203393a2fbb9559a36f78993d292cf9ce5df9f13 (commit) via a7035a11b80fac86845eb16e7d36145f7a136d9e (commit) from 1cfab34772f780f0496b3d5007217b41c04264d6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 203393a2fbb9559a36f78993d292cf9ce5df9f13 Author: Teresa Thomas Date: Fri Jun 6 14:42:02 2008 -0400 Synchronize fhpd, stepping engine and breakpoints. frysk-core/frysk/hpd/ChangeLog: 2008-06-06 Teresa Thomas * BreakpointCommand.java (*.updateHit): Use SteppingEngine.updateActionpointDoneEvent. * TestBreakpoints.java (testGoAfterSimultaneousBreaks): New. frysk-core/frysk/rt/ChangeLog: 2008-06-06 Teresa Thomas * Breakpoint.java (updateHit): Update log message. frysk-core/frysk/stepping/ChangeLog: 2008-06-06 Teresa Thomas * SteppingEngine.java (updateActionpointDoneEvent): New. (blockedByActionPoint): Use updateActionpointDoneEvent. (blockedByActionPoint(Task,TaskObserver)): Test if messages set empty. commit a7035a11b80fac86845eb16e7d36145f7a136d9e Author: Teresa Thomas Date: Fri Jun 6 12:49:00 2008 -0400 Additional logging messages. frysk-core/frysk/proc/live/ChangeLog: 2008-06-06 Teresa Thomas * LinuxPtraceTaskState.java: Additional logging messages. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/hpd/BreakpointCommand.java | 73 ++++++++------------ frysk-core/frysk/hpd/ChangeLog | 6 ++ frysk-core/frysk/hpd/TestBreakpoints.java | 24 ++++++- frysk-core/frysk/proc/live/ChangeLog | 4 + .../frysk/proc/live/LinuxPtraceTaskState.java | 2 + frysk-core/frysk/rt/Breakpoint.java | 5 +- frysk-core/frysk/rt/ChangeLog | 6 ++- frysk-core/frysk/stepping/ChangeLog | 8 ++- frysk-core/frysk/stepping/SteppingEngine.java | 69 +++++++++---------- 9 files changed, 112 insertions(+), 85 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/hpd/BreakpointCommand.java b/frysk-core/frysk/hpd/BreakpointCommand.java index a732c80..082c1d2 100644 --- a/frysk-core/frysk/hpd/BreakpointCommand.java +++ b/frysk-core/frysk/hpd/BreakpointCommand.java @@ -47,14 +47,13 @@ import java.util.List; import java.util.Map; import frysk.debuginfo.ObjectDeclarationSearchEngine; -import frysk.event.Event; -import frysk.proc.Manager; import frysk.proc.Task; import frysk.rt.BreakpointManager; import frysk.rt.FunctionBreakpoint; import frysk.rt.LineBreakpoint; import frysk.rt.SourceBreakpoint; import frysk.rt.SourceBreakpointObserver; +import frysk.stepping.SteppingEngine; import frysk.value.ObjectDeclaration; class BreakpointCommand extends ParameterizedCommand { @@ -100,6 +99,8 @@ class BreakpointCommand extends ParameterizedCommand { BreakpointManager bpManager = cli.getSteppingEngine() .getBreakpointManager(); final PrintWriter outWriter = cli.getPrintWriter(); + final SteppingEngine ste = cli.getSteppingEngine(); + Iterator taskIter = ptset.getTasks(); // Map between tasks and breakpoints to enable. HashMap bptMap = new HashMap(); @@ -118,20 +119,15 @@ class BreakpointCommand extends ParameterizedCommand { final long address) { // Output the message in an Event in order to // allow all actions, fired by events currently in - // the loop, to run. - Manager.eventLoop.add(new Event() { - public void execute() { - LineBreakpoint lbpt = (LineBreakpoint) bpt; - outWriter.print("Breakpoint "); - outWriter.print(lbpt.getId()); - outWriter.print(" #"); - outWriter.print(lbpt.getFileName()); - outWriter.print("#"); - outWriter.print(lbpt.getLineNumber()); - outWriter.print(" 0x"); - outWriter.println(Long.toHexString(address)); - } - }); + // the loop, to run. + LineBreakpoint lbpt = (LineBreakpoint) bpt; + String message = "Breakpoint " + lbpt.getId() + + " #" + lbpt.getFileName() + "#" + + lbpt.getLineNumber() + " 0x" + + Long.toHexString(address) + "\n"; + ste.updateActionpointDoneEvent(message, outWriter); + + } }); while (taskIter.hasNext()) { @@ -140,7 +136,8 @@ class BreakpointCommand extends ParameterizedCommand { } else { while (taskIter.hasNext()) { Task task = (Task) taskIter.next(); - ObjectDeclarationSearchEngine declarationSearchEngine = new ObjectDeclarationSearchEngine(task); + ObjectDeclarationSearchEngine declarationSearchEngine = + new ObjectDeclarationSearchEngine(task); if (declarationSearchEngine != null) { @@ -155,19 +152,14 @@ class BreakpointCommand extends ParameterizedCommand { actionpoint.addObserver(new CLIBreakpointObserver() { public void updateHit(final SourceBreakpoint bpt, Task task, final long address) { - // See comment in case above. - Manager.eventLoop.add(new Event() { - public void execute() { - FunctionBreakpoint fbpt - = (FunctionBreakpoint) bpt; - outWriter.print("Breakpoint "); - outWriter.print(fbpt.getId()); - outWriter.print(" "); - outWriter.print(fbpt.getName()); - outWriter.print(" 0x"); - outWriter.println(Long.toHexString(address)); - } - }); + // Output the message in an Event in order to + // allow all actions, fired by events currently in + // the loop, to run. + FunctionBreakpoint fbpt = (FunctionBreakpoint) bpt; + String message = "Breakpoint " + fbpt.getId() + + " " + fbpt.getName() + " 0x" + + Long.toHexString(address) + "\n"; + ste.updateActionpointDoneEvent(message, outWriter); } }); bptMap.put(task, actionpoint); @@ -177,19 +169,14 @@ class BreakpointCommand extends ParameterizedCommand { actionpoint.addObserver(new CLIBreakpointObserver() { public void updateHit(final SourceBreakpoint bpt, Task task, final long address) { - // See comment in case above. - Manager.eventLoop.add(new Event() { - public void execute() { - FunctionBreakpoint fbpt - = (FunctionBreakpoint) bpt; - outWriter.print("Breakpoint "); - outWriter.print(fbpt.getId()); - outWriter.print(" "); - outWriter.print(fbpt.getName()); - outWriter.print(" 0x"); - outWriter.println(Long.toHexString(address)); - } - }); + // Output the message in an Event in order to + // allow all actions, fired by events currently in + // the loop, to run. + FunctionBreakpoint fbpt = (FunctionBreakpoint) bpt; + String message = "Breakpoint " + fbpt.getId() + + " " + fbpt.getName() + " 0x" + + Long.toHexString(address) + "\n"; + ste.updateActionpointDoneEvent(message, outWriter); } }); bptMap.put(task, actionpoint); diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog index 417a8e9..99eba18 100644 --- a/frysk-core/frysk/hpd/ChangeLog +++ b/frysk-core/frysk/hpd/ChangeLog @@ -1,3 +1,9 @@ +2008-06-06 Teresa Thomas + + * BreakpointCommand.java (*.updateHit): + Use SteppingEngine.updateActionpointDoneEvent. + * TestBreakpoints.java (testGoAfterSimultaneousBreaks): New. + 2006-06-06 Rick Moseley * CoreCommand.java: Get args from commandline for run. diff --git a/frysk-core/frysk/hpd/TestBreakpoints.java b/frysk-core/frysk/hpd/TestBreakpoints.java index 5cb797b..2fe15a3 100644 --- a/frysk-core/frysk/hpd/TestBreakpoints.java +++ b/frysk-core/frysk/hpd/TestBreakpoints.java @@ -222,11 +222,33 @@ public class TestBreakpoints e.sendCommandExpectPrompt("step ", "Task stopped at line " + "[0-9]+ in file.*"); e.sendCommandExpectPrompt("step ", "Task stopped at line " + "[0-9]+ in file.*"); e.sendCommandExpectPrompt("step ", "Task stopped at line " + "[0-9]+ in file.*"); - e.sendCommandExpectPrompt("step ", "Task stopped at line " + "[0-9]+ in file.*"); e.send("quit\n"); e.expect("Quitting..."); e.close(); } + public void testGoAfterSimultaneousBreaks() { + e = new HpdTestbed(); + e.sendCommandExpectPrompt("load " + Prefix.pkgLibFile("funit-hello").getPath(), + "Loaded executable file.*"); + + e.sendCommandExpectPrompt("start", "Attached to process ([0-9]+).*"); + e.send("break main\n"); + e.expect("break.*" + prompt); + e.send("break main\n"); + e.expect("break.*" + prompt); + e.send("break print\n"); + e.expect("break.*" + prompt); + + e.send("go\n"); + e.expect("go.*" + prompt + "Breakpoint.*main.*"); + e.send("go\n"); + e.expect("go.*" + prompt + "Breakpoint.*print.*"); + + e.send("quit\n"); + e.expect("Quitting..."); + e.close(); + } + } diff --git a/frysk-core/frysk/proc/live/ChangeLog b/frysk-core/frysk/proc/live/ChangeLog index f9a12dd..eee24c5 100644 --- a/frysk-core/frysk/proc/live/ChangeLog +++ b/frysk-core/frysk/proc/live/ChangeLog @@ -1,3 +1,7 @@ +2008-06-06 Teresa Thomas + + * LinuxPtraceTaskState.java: Additional logging messages. + 2008-06-04 Andrew Cagney * LinuxPtraceProc.java: Delete AuxvBuilder.buildBuffer. diff --git a/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java b/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java index d8c61a3..a819b9a 100644 --- a/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java +++ b/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java @@ -691,6 +691,7 @@ abstract class LinuxPtraceTaskState extends State { } LinuxPtraceTaskState handleStoppedEvent(LinuxPtraceTask task, Signal signal) { + fine.log("handleStoppedEvent", task); if (signal == Signal.STOP || signal == Signal.TRAP) { // Attempt an attached continue. task.initializeAttachedState(); @@ -802,6 +803,7 @@ abstract class LinuxPtraceTaskState extends State { } LinuxPtraceTaskState handleStoppedEvent(LinuxPtraceTask task, Signal signal) { + fine.log("handleStoppedEvent", task); if (signal == Signal.STOP) { Collection pendingObservations = task.pendingObservations; if (pendingObservations.isEmpty()) { diff --git a/frysk-core/frysk/rt/Breakpoint.java b/frysk-core/frysk/rt/Breakpoint.java index f6214f4..13c205f 100644 --- a/frysk-core/frysk/rt/Breakpoint.java +++ b/frysk-core/frysk/rt/Breakpoint.java @@ -81,9 +81,8 @@ public class Breakpoint implements TaskObserver.Code { return Action.CONTINUE; } else { - fine.log(this, "updateHit adding instruction observer", task, - "address", address); - + fine.log(this, "updateHit calling blockedByActionPoint", task, + "address", address); this.steppingEngine.blockedByActionPoint(task, this); task.requestUnblock(this); } diff --git a/frysk-core/frysk/rt/ChangeLog b/frysk-core/frysk/rt/ChangeLog index 206bab1..5622595 100644 --- a/frysk-core/frysk/rt/ChangeLog +++ b/frysk-core/frysk/rt/ChangeLog @@ -1,7 +1,11 @@ +2008-06-06 Teresa Thomas + + * Breakpoint.java (updateHit): Update log message. + 2008-06-05 Andrew Cagney * FunctionBreakpoint.java: Use DwflDie. - + 2008-06-03 Andrew Cagney * FunctionBreakpoint.java: Do not use InlinedSubroutine. diff --git a/frysk-core/frysk/stepping/ChangeLog b/frysk-core/frysk/stepping/ChangeLog index e158c8a..014849c 100644 --- a/frysk-core/frysk/stepping/ChangeLog +++ b/frysk-core/frysk/stepping/ChangeLog @@ -1,4 +1,10 @@ -2008-05-23 Teresa Thomas +2008-06-06 Teresa Thomas + + * SteppingEngine.java (updateActionpointDoneEvent): New. + (blockedByActionPoint): Use updateActionpointDoneEvent. + (blockedByActionPoint(Task,TaskObserver)): Test if messages set empty. + +2008-05-23 Teresa Thomas * SteppingEngine.java (messages): New. (blockedByActionPoint(Task,TaskObserver,String,PrintWriter)): New. diff --git a/frysk-core/frysk/stepping/SteppingEngine.java b/frysk-core/frysk/stepping/SteppingEngine.java index 796d0b6..7dab132 100644 --- a/frysk-core/frysk/stepping/SteppingEngine.java +++ b/frysk-core/frysk/stepping/SteppingEngine.java @@ -995,43 +995,8 @@ public class SteppingEngine { */ public void blockedByActionPoint(Task task, TaskObserver to) { - // Requests the addition of the stepping observer to task if - // not inserted already. - if (!(task.isInstructionObserverAdded(this.steppingObserver))) { - task.requestAddInstructionObserver(this.steppingObserver); - } - - // Add the observer to the task's blockers list - addBlocker(task, to); - - TaskStepEngine tse = null; - tse = (TaskStepEngine) this.taskStateMap.get(task); - if (!tse.isStopped()) { - // Set the state of task as stopped - tse.setState(new StoppedState(task)); - // Remove the task from the running tasks list - this.runningTasks.remove(task); - } - } - - /** - * Sets the stepping engine on being hit by an action point. - * - * to - Observer that causes task to block. - * message - message describing the cause of program block - * writer - writer to print message to - */ - public void blockedByActionPoint(Task task, TaskObserver to, - String message, PrintWriter writer) { - - /* Set messages being empty implies the fist action point being hit. - */ if (messages.isEmpty()) { - // Schedule a done event on the first sight of an action point - Event e = new ActionPointEvent(messages, writer); - Manager.eventLoop.add(e); - // Requests the addition of the stepping observer to task if // not inserted already. if (!(task.isInstructionObserverAdded(this.steppingObserver))) { @@ -1050,10 +1015,42 @@ public class SteppingEngine { this.runningTasks.remove(task); } } - messages.add(message); } /** + * Sets the stepping engine on being hit by an action point. + * + * to - Observer that causes task to block. + * message - message describing the cause of program block + * writer - writer to print message to + */ + public void blockedByActionPoint(Task task, TaskObserver to, + String message, PrintWriter writer) { + blockedByActionPoint(task, to); + // Schedule a done event + updateActionpointDoneEvent(message, writer); + } + + /** + * Creates an actionpoint done event at the first sight of an + * action point. This event process the action point messages + * to be outputted. + * + * @param message - Actionpoint information message to be added + * @param writer - writer to print message to + */ + public void updateActionpointDoneEvent (String message, PrintWriter writer) { + + // Schedule event only for the first actionpoint hit. + // For others, just add message to the messages set. + if (messages.isEmpty()) { + Event e = new ActionPointEvent(messages, writer); + Manager.eventLoop.add(e); + } + messages.add(message); + } + + /** * Adds the given Observer to this.steppingObserver's Observer list. * * @param o The Observer to be added. hooks/post-receive -- frysk system monitor/debugger