public inbox for frysk@sourceware.org
 help / color / mirror / Atom feed
From: Mark Wielaard <mark@klomp.org>
To: frysk@sourceware.org
Cc: rmosely@redhat.com
Subject: Quick pc hack for exe loading
Date: Fri, 23 Nov 2007 11:35:00 -0000	[thread overview]
Message-ID: <1195817730.2981.21.camel@dijkstra.wildebeest.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 1070 bytes --]

Hi Rick,

I wanted to test some libunwind lookup changes I made locally and the
exe target is nice for that since it is so simple. The attached patch
sets up the PC value and makes it possible to see where the exe would
start:

(fhpd) load /bin/bash
Loaded executable file: /bin/bash
(fhpd) where
[0.0]
DebugInfoStackFactory.printStackTrace() numberOfFrames 0
#0 0x0000000000419150 in _start () from /bin/bash

It still cannot actually do the other way around though:

(fhpd) print _start
[0.0]
Error: Object _start was not found

Haven't looked into why that was since I was only interested in the
stack thing.

2007-11-23  Mark Wielaard  <mwielaard@redhat.com>

        * LinuxExeTask.java (bankBuffers): New final field.
        (LinuxExeTask): Setup bankBuffers and explicitly set pc.
        (sendrecRegisterBanks): Use cached bankBuffers.

It is a bit of a hack (as the comment explains), but it seems to work
great and all tests still pass with this applied. Feel free to rip it
out and completely replace with a real, less hacky, solution though.

Cheers,

Mark

[-- Attachment #2: exe-pc.patch --]
[-- Type: text/x-patch, Size: 1541 bytes --]

diff --git a/frysk-core/frysk/proc/dead/LinuxExeTask.java b/frysk-core/frysk/proc/dead/LinuxExeTask.java
index 3eb584c..1302be5 100644
--- a/frysk-core/frysk/proc/dead/LinuxExeTask.java
+++ b/frysk-core/frysk/proc/dead/LinuxExeTask.java
@@ -47,17 +47,44 @@ import frysk.proc.TaskId;
 import frysk.proc.TaskState;
 import frysk.isa.ISA;
 
+import lib.dwfl.*;
 
 public class LinuxExeTask extends DeadTask
 {
 
   LinuxExeProc proc = null;
   TaskId id = null;
+
+  // Holds all the register values, setup once in the constructor.
+  private final ByteBuffer[] bankBuffers;
   
   protected LinuxExeTask(LinuxExeProc proc, TaskId id, TaskState state) {
       super(proc, id, state);
       this.proc = proc;
       this.id = id;
+      this.bankBuffers = sendrecRegisterBuffersFIXME();
+
+      // Fake PC.  XXX should be done in Proc instead of creating Elf
+      // object in the Task itself.
+      long pc;
+      Elf e = null;
+      try
+	{
+	  e = new Elf(getProc().getExe(), ElfCommand.ELF_C_READ);
+	  ElfEHeader h = e.getEHeader();
+	  pc = h.entry;
+	}
+      catch (ElfException ee)
+	{
+	  // Nice try, just give up.
+	  pc = 0;
+	}
+      finally
+	{
+	  if (e != null)
+	    e.close();
+	}
+      getIsa().setPC(this, pc);
   }
   
   protected ISA sendrecISA() {
@@ -93,6 +120,6 @@ public class LinuxExeTask extends DeadTask
 
   protected RegisterBanks sendrecRegisterBanks() {
       return CorefileRegisterBanksFactory.create
-      	  (getISA(), sendrecRegisterBuffersFIXME());
+      	  (getISA(), bankBuffers);
   }
 }

             reply	other threads:[~2007-11-23 11:35 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-23 11:35 Mark Wielaard [this message]
2007-11-23 17:14 ` Rick Moseley
2007-11-23 17:30   ` Andrew Cagney
2007-11-26 10:40     ` Mark Wielaard
2007-11-26 16:52       ` Andrew Cagney
2007-11-27  8:25         ` Mark Wielaard
2007-11-27 14:40           ` Andrew Cagney
2007-11-28  9:15             ` Mark Wielaard

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=1195817730.2981.21.camel@dijkstra.wildebeest.org \
    --to=mark@klomp.org \
    --cc=frysk@sourceware.org \
    --cc=rmosely@redhat.com \
    /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).