From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10619 invoked by alias); 6 Dec 2007 12:41:08 -0000 Received: (qmail 10557 invoked by uid 9514); 6 Dec 2007 12:41:03 -0000 Date: Thu, 06 Dec 2007 12:41:00 -0000 Message-ID: <20071206124103.10542.qmail@sourceware.org> From: pmuldoon@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Add auxv fhpd command X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: abf779095e5f0032dd63a47ff641faed580989fa X-Git-Newrev: 92c63ef33c7b802db6fee1c0f46c091b5a8ba0f4 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: 2007-q4/txt/msg00532.txt.bz2 The branch, master has been updated via 92c63ef33c7b802db6fee1c0f46c091b5a8ba0f4 (commit) from abf779095e5f0032dd63a47ff641faed580989fa (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 92c63ef33c7b802db6fee1c0f46c091b5a8ba0f4 Author: Phil Muldoon Date: Thu Dec 6 12:40:26 2007 +0000 Add auxv fhpd command 2007-12-06 Phil Muldoon * TopLevelCommand.java(TopLevelCommand): add auxv command. * TestAuxvCommand.java: New. * AuxvCommand.java: New. ----------------------------------------------------------------------- Summary of changes: .../hpd/{LoadCommand.java => AuxvCommand.java} | 129 +++++++++++--------- frysk-core/frysk/hpd/ChangeLog | 6 + ...CompletionFactory.java => TestAuxvCommand.java} | 57 +++++----- frysk-core/frysk/hpd/TopLevelCommand.java | 1 + 4 files changed, 105 insertions(+), 88 deletions(-) copy frysk-core/frysk/hpd/{LoadCommand.java => AuxvCommand.java} (53%) copy frysk-core/frysk/hpd/{TestCompletionFactory.java => TestAuxvCommand.java} (70%) First 500 lines of diff: diff --git a/frysk-core/frysk/hpd/LoadCommand.java b/frysk-core/frysk/hpd/AuxvCommand.java similarity index 53% copy from frysk-core/frysk/hpd/LoadCommand.java copy to frysk-core/frysk/hpd/AuxvCommand.java index 312c084..79f52fd 100644 --- a/frysk-core/frysk/hpd/LoadCommand.java +++ b/frysk-core/frysk/hpd/AuxvCommand.java @@ -39,70 +39,81 @@ package frysk.hpd; -import java.io.File; +import inua.elf.AT; import java.util.Iterator; -import frysk.debuginfo.DebugInfo; -import frysk.debuginfo.DebugInfoFrame; -import frysk.debuginfo.DebugInfoStackFactory; -import frysk.proc.Host; -import frysk.proc.dead.LinuxExeHost; -import frysk.proc.Manager; -import frysk.proc.Proc; -import frysk.proc.Task; import java.util.List; +import frysk.proc.Auxv; +import frysk.proc.Proc; -/** - * LoadCommand handles the "load path-to-executable" command on the fhpd - * commandline. - * - */ - -public class LoadCommand extends ParameterizedCommand { - - LoadCommand() { - super("load", "load path-to-executable", "load an executable file"); - } - - public void interpret(CLI cli, Input cmd, Object options) { - if (cmd.size() > 2) { - throw new InvalidCommandException("Too many parameters"); - } - - File executableFile = new File(cmd.parameter(0)); - - if (!executableFile.exists() || !executableFile.canRead() - || !executableFile.isFile()) { - throw new InvalidCommandException - ("File does not exist or is not readable or is not a file."); - } - - Host exeHost = new LinuxExeHost(Manager.eventLoop, executableFile); - Proc exeProc = frysk.util.Util.getProcFromExeFile(exeHost); - - int procID = cli.idManager.reserveProcID(); - cli.idManager.manageProc(exeProc, procID); - - Iterator foo = cli.targetset.getTasks(); - while (foo.hasNext()) { - Task task = (Task) foo.next(); - if (task.getTid() == exeProc.getMainTask().getTid()) { - DebugInfoFrame frame = DebugInfoStackFactory - .createDebugInfoStackTrace(task); - cli.setTaskFrame(task, frame); - cli.setTaskDebugInfo(task, new DebugInfo( - frame)); - } - } - synchronized (cli) { - cli.getLoadedProcs().put(exeProc, new Integer(procID)); +public class AuxvCommand extends ParameterizedCommand { + + boolean verbose = false; + + public AuxvCommand() { + super("Print process auxiliary", "auxv [-verbose]", + "Print out the process auxiliary data for this " + + "process."); + + add(new CommandOption("verbose", "Print out known auxv descriptions ") { + void parse(String argument, Object options) { + verbose = true; } + }); - cli.addMessage("Loaded executable file: " + cmd.parameter(0), - Message.TYPE_NORMAL); + } + + void interpret(CLI cli, Input cmd, Object options) { + PTSet ptset = cli.getCommandPTSet(cmd); + Iterator taskDataIterator = ptset.getTaskData(); + if (taskDataIterator.hasNext() == false) + cli.addMessage("Cannot find main task. Cannot print out auxv", Message.TYPE_ERROR); + Proc mainProc = ((TaskData) taskDataIterator.next()).getTask().getProc(); + Auxv[] liveAux = mainProc.getAuxv(); + + class BuildAuxv extends AuxvStringBuilder { + + public StringBuffer auxvData = new StringBuffer(); + public void buildLine(String type, String desc, String value) { + if (verbose) + auxvData.append(type+" (" + desc+") : " + value+"\n"); + else + auxvData.append(type+" : " + value+"\n"); + } } - - int completer(CLI cli, Input input, int cursor, List completions) { - return CompletionFactory.completeFileName(cli, input, cursor, - completions); + + BuildAuxv buildAuxv = new BuildAuxv(); + buildAuxv.construct(liveAux); + + cli.outWriter.println(buildAuxv.auxvData.toString()); + } + + int completer(CLI cli, Input input, int cursor, List completions) { + return -1; + } + + abstract class AuxvStringBuilder + { + protected AuxvStringBuilder() { } + + public final void construct (Auxv[] rawAuxv) { + String value; + for (int i=0; i < rawAuxv.length; i++) { + switch (rawAuxv[i].type) { + case 33: + case 16: + case 3: + case 9: + case 15: + value = "0x"+Long.toHexString(rawAuxv[i].val); + break; + default: + value = ""+rawAuxv[i].val; + } + buildLine(AT.toString(rawAuxv[i].type), AT.toPrintString(rawAuxv[i].type), value); + } + } + + abstract public void buildLine(String type, String desc, String value); + } } diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog index 2f4412a..7e612de 100644 --- a/frysk-core/frysk/hpd/ChangeLog +++ b/frysk-core/frysk/hpd/ChangeLog @@ -1,3 +1,9 @@ +2007-12-06 Phil Muldoon + + * TopLevelCommand.java(TopLevelCommand): add auxv command. + * TestAuxvCommand.java: New. + * AuxvCommand.java: New. + 2007-12-04 Andrew Cagney Merge frysk.sys.Sig into frysk.sys.Signal. diff --git a/frysk-core/frysk/hpd/TestCompletionFactory.java b/frysk-core/frysk/hpd/TestAuxvCommand.java similarity index 70% copy from frysk-core/frysk/hpd/TestCompletionFactory.java copy to frysk-core/frysk/hpd/TestAuxvCommand.java index 3f595bd..35fad72 100644 --- a/frysk-core/frysk/hpd/TestCompletionFactory.java +++ b/frysk-core/frysk/hpd/TestAuxvCommand.java @@ -41,33 +41,32 @@ package frysk.hpd; import frysk.Config; -public class TestCompletionFactory extends TestLib { - - public void setUp() { - super.setUp(); - e = new HpdTestbed(); - } - - /** - * At least two expansions of "funit-stack-" are - * "funit-stack-inlined" and "funit-stack-outlined"; there might - * also be .o files, but ignore that. - */ - private void checkFunitStackCompletion() { - e.send(Config.getPkgLibFile("funit-stack-").getAbsolutePath()); - e.send("\t"); - e.expect("funit-stack-inlined\\r\\n"); - e.expect("funit-stack-outlined\\r\\n"); - e.expectPrompt(); - } - - public void testCompleteFirstFileNameArg() { - e.send("run "); - checkFunitStackCompletion(); - } - - public void testCompleteSecondFileNameArg() { - e.send("run a "); - checkFunitStackCompletion(); - } +public class TestAuxvCommand extends TestLib { + + public void testAuxVCoreCommand() { + e = new HpdTestbed(); + e.send("core " + Config.getPkgDataFile("test-core-x86").getPath() + + " -noexe\n"); + e.expect(5, "Attached to core file.*"); + e.send("auxv\n"); + e.expect("AT_SYSINFO : 6464512"); + e.expect("AT_SYSINFO_EHDR : 0x62a000"); + e.expect("AT_HWCAP : 0xafe9f1bf"); + e.expect("AT_PAGESZ : 4096"); + e.expect("AT_CLKTCK : 100"); + e.expect("AT_PHDR : 0x8048034"); + e.expect("AT_PHENT : 32"); + e.expect("AT_PHNUM : 8"); + e.expect("AT_BASE : 0"); + e.expect("AT_FLAGS : 0"); + e.expect("AT_ENTRY : 0x80483e0"); + e.expect("AT_UID : 500"); + e.expect("AT_EUID : 500"); + e.expect("AT_GID : 500"); + e.expect("AT_EGID : 500"); + e.expect("AT_0x17 : 0"); + e.expect("AT_PLATFORM : 0xbfcfee4b"); + e.expect("AT_NULL : 0"); + e.close(); + } } diff --git a/frysk-core/frysk/hpd/TopLevelCommand.java b/frysk-core/frysk/hpd/TopLevelCommand.java index 4289903..875836a 100644 --- a/frysk-core/frysk/hpd/TopLevelCommand.java +++ b/frysk-core/frysk/hpd/TopLevelCommand.java @@ -80,6 +80,7 @@ public class TopLevelCommand extends MultiLevelCommand { add(new AliasCommands.Alias(), "alias"); add(new AliasCommands.Unalias(), "unalias"); add(new AttachCommand(), "attach"); + add(new AuxvCommand(), "auxv"); add(new BreakpointCommand(), "b|reak"); add(new CoreCommand(), "core"); add(new DbgVariableCommands.Set(), "set"); hooks/post-receive -- frysk system monitor/debugger