public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: cagney@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Eliminate RawData in ProcInfo.
Date: Sat, 24 May 2008 00:52:00 -0000	[thread overview]
Message-ID: <20080524005224.16523.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  df4ab58434351ad8d9d5faeea5a4828ada77aa7a (commit)
      from  4d63a560bb755dabf5d9caae90c527f36ea37ec2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit df4ab58434351ad8d9d5faeea5a4828ada77aa7a
Author: Andrew Cagney <cagney@redhat.com>
Date:   Fri May 23 20:50:43 2008 -0400

    Eliminate RawData in ProcInfo.
    
    frysk-sys/lib/unwind/ChangeLog
    2008-05-23  Andrew Cagney  <cagney@redhat.com>
    
    	* ProcInfo.java (unwProcInfo): Replace procInfo, a long.
    	* Unwind.java: Ditto.
    	* Cursor.java (getProcInfo()): Update.
    	* cni/UnwindH.hxx: Update.

-----------------------------------------------------------------------

Summary of changes:
 frysk-sys/lib/unwind/ChangeLog       |    5 ++
 frysk-sys/lib/unwind/ProcInfo.java   |   68 +++++++++++++++++----------------
 frysk-sys/lib/unwind/Unwind.java     |   26 ++++++------
 frysk-sys/lib/unwind/cni/UnwindH.hxx |   44 ++++++++++++----------
 4 files changed, 77 insertions(+), 66 deletions(-)

First 500 lines of diff:
diff --git a/frysk-sys/lib/unwind/ChangeLog b/frysk-sys/lib/unwind/ChangeLog
index 3ee9c4c..f8dc420 100644
--- a/frysk-sys/lib/unwind/ChangeLog
+++ b/frysk-sys/lib/unwind/ChangeLog
@@ -1,5 +1,10 @@
 2008-05-23  Andrew Cagney  <cagney@redhat.com>
 
+	* ProcInfo.java (unwProcInfo): Replace procInfo, a long.
+	* Unwind.java: Ditto.
+	* Cursor.java (getProcInfo()): Update.
+	* cni/UnwindH.hxx: Update.
+
 	* Unwind.java: For unwAddressSpace, pass a long, not RawData.
 	* AddressSpace.java (unwAddressSpace): Change type to jlong.
 	(getUnwinder()): Delete.
diff --git a/frysk-sys/lib/unwind/ProcInfo.java b/frysk-sys/lib/unwind/ProcInfo.java
index 0e91c9d..988db81 100644
--- a/frysk-sys/lib/unwind/ProcInfo.java
+++ b/frysk-sys/lib/unwind/ProcInfo.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,65 +39,63 @@
 
 package lib.unwind;
 
-import gnu.gcj.RawData;
-import gnu.gcj.RawDataManaged;
-
-public class ProcInfo
-{
+public class ProcInfo {
     final Unwind unwinder;
-    final RawDataManaged procInfo;
+    final long unwProcInfo;
     final int error;
   
+    ProcInfo(Unwind unwinder, long unwProcInfo) {
+	this.unwinder = unwinder;
+	this.error = 0;
+	this.unwProcInfo = unwProcInfo; 
+    }
+    ProcInfo(int error) {
+	this.error = error;
+	this.unwinder = null;
+	this.unwProcInfo = 0;
+    }
+    protected void finalize() {
+	unwinder.destroyProcInfo(unwProcInfo);
+    }
+  
     public int getError() {
 	return error;
     }
   
     public long getStartIP() {
-	return unwinder.getStartIP(procInfo);
+	return unwinder.getStartIP(unwProcInfo);
     }
   
     long getEndIP() {
-	return unwinder.getEndIP(procInfo);
+	return unwinder.getEndIP(unwProcInfo);
     }
   
     long getLSDA() {
-	return unwinder.getLSDA(procInfo);
+	return unwinder.getLSDA(unwProcInfo);
     }
   
     long getHandler() {
-	return unwinder.getHandler(procInfo);
+	return unwinder.getHandler(unwProcInfo);
     }
   
     long getGP() {
-	return unwinder.getGP(procInfo);
+	return unwinder.getGP(unwProcInfo);
     }
   
     long getFlags() {
-	return unwinder.getFlags(procInfo);
+	return unwinder.getFlags(unwProcInfo);
     }
   
     int getFormat() {
-	return unwinder.getFormat(procInfo);
+	return unwinder.getFormat(unwProcInfo);
     }
   
     int getUnwindInfoSize() {
-	return unwinder.getUnwindInfoSize(procInfo);
+	return unwinder.getUnwindInfoSize(unwProcInfo);
     }
   
-    RawData getUnwindInfo() {
-	return unwinder.getUnwindInfo(procInfo);
-    }
-  
-    ProcInfo(Unwind unwinder, RawDataManaged procInfo) {
-	this.unwinder = unwinder;
-	this.error = 0;
-	this.procInfo = procInfo; 
-    }
-  
-    public ProcInfo (int error) {
-	this.error = error;
-	this.unwinder = null;
-	this.procInfo = null;
+    long getUnwindInfo() {
+	return unwinder.getUnwindInfo(unwProcInfo);
     }
   
     public String toString() {
@@ -105,9 +103,13 @@ public class ProcInfo
 	    return "ProcInfo Error: " + error;
 
 	return "ProcInfo startIP: 0x" + Long.toHexString(getStartIP()) 
-	    + " endIP: 0x" + Long.toHexString(getEndIP()) + " lsda: " + getLSDA() + " handler: " +
-	    getHandler() + " gp: " + getGP() + " flags: " + getFlags()
-	    + " format: " + getFormat() + " unwindInfoSize: " + getUnwindInfoSize() 
-	    + " hasUnwindInfo?: " + (getUnwindInfo() != null);
+	    + " endIP: 0x" + Long.toHexString(getEndIP())
+	    + " lsda: " + getLSDA()
+	    + " handler: " + getHandler()
+	    + " gp: " + getGP()
+	    + " flags: " + getFlags()
+	    + " format: " + getFormat()
+	    + " unwindInfoSize: " + getUnwindInfoSize() 
+	    + " hasUnwindInfo: " + getUnwindInfo();
     }
 }
diff --git a/frysk-sys/lib/unwind/Unwind.java b/frysk-sys/lib/unwind/Unwind.java
index 6a8a6cf..4cffce7 100644
--- a/frysk-sys/lib/unwind/Unwind.java
+++ b/frysk-sys/lib/unwind/Unwind.java
@@ -42,7 +42,6 @@ package lib.unwind;
 import frysk.rsl.Log;
 import frysk.rsl.LogFactory;
 import gnu.gcj.RawDataManaged;
-import gnu.gcj.RawData;
 
 public abstract class Unwind {
     static final Log fine = LogFactory.fine(Unwind.class);
@@ -62,8 +61,6 @@ public abstract class Unwind {
   
     abstract int step (long unwCursor);
   
-    abstract ProcInfo getProcInfo (long unwCursor);
-  
     abstract void getRegister(long unwCursor, Number regNum,
 			      long offset, int length, byte[] word, int start);
     abstract void setRegister(long unwCursor, Number regNum,
@@ -87,14 +84,17 @@ public abstract class Unwind {
 						    long segbase, long hi, 
 						    long mapoff);
 
-    abstract long getStartIP(RawDataManaged procInfo);
-    abstract long getEndIP(RawDataManaged procInfo);
-    abstract long getLSDA(RawDataManaged procInfo);
-    abstract long getHandler(RawDataManaged procInfo);
-    abstract long getGP(RawDataManaged procInfo);
-    abstract long getFlags(RawDataManaged procInfo);
- 
-    abstract int getFormat(RawDataManaged procInfo);
-    abstract int getUnwindInfoSize(RawDataManaged procInfo);
-    abstract RawData getUnwindInfo(RawDataManaged procInfo);
+
+    abstract ProcInfo getProcInfo(long unwCursor);
+    abstract void destroyProcInfo(long unwProcInfo);
+
+    abstract long getStartIP(long unwProcInfo);
+    abstract long getEndIP(long unwProcInfo);
+    abstract long getLSDA(long unwProcInfo);
+    abstract long getHandler(long unwProcInfo);
+    abstract long getGP(long unwProcInfo);
+    abstract long getFlags(long unwProcInfo);
+    abstract int getFormat(long unwProcInfo);
+    abstract int getUnwindInfoSize(long unwProcInfo);
+    abstract long getUnwindInfo(long unwProcInfo);
 }
diff --git a/frysk-sys/lib/unwind/cni/UnwindH.hxx b/frysk-sys/lib/unwind/cni/UnwindH.hxx
index 43eb778..28b837f 100644
--- a/frysk-sys/lib/unwind/cni/UnwindH.hxx
+++ b/frysk-sys/lib/unwind/cni/UnwindH.hxx
@@ -103,7 +103,8 @@ find_proc_info(::unw_addr_space_t as, ::unw_word_t ip,
     = vec(addressSpace)->findProcInfo((jlong) ip, (jboolean) need_unwind_info);
   if (procInfo->error != 0)
     return procInfo->error;
-  memcpy(pip, procInfo->procInfo, sizeof (unw_proc_info_t));
+  // Extract the info.
+  memcpy(pip, (void*) procInfo->unwProcInfo, sizeof (unw_proc_info_t));
   return 0;
 }
 
@@ -114,8 +115,8 @@ static void
 put_unwind_info(::unw_addr_space_t as, ::unw_proc_info_t *proc_info,
 		void *addressSpace) {
   AddressSpace* space = vec(addressSpace);
-  ProcInfo* procInfo
-    = new ProcInfo(space->unwinder, (gnu::gcj::RawDataManaged *) proc_info);
+  // This is passing up a stack pointer, which may then be freed.
+  ProcInfo* procInfo = new ProcInfo(space->unwinder, (jlong) proc_info);
   space->putUnwindInfo (procInfo);
 }
 
@@ -422,8 +423,7 @@ ProcInfo*
 TARGET::getProcInfo(jlong unwCursor) {
   logf(fine, this, "getProcInfo cursor: %lx", (long) unwCursor);
   unw_proc_info_t *procInfo
-    = (::unw_proc_info_t *) JvAllocBytes(sizeof (::unw_proc_info_t));
-
+    = (::unw_proc_info_t *) JvMalloc(sizeof (::unw_proc_info_t));
   int ret = unw_get_proc_info((::unw_cursor_t*) (long) unwCursor, procInfo);
 
   logf(fine, this, "getProcInfo finished get_proc_info");
@@ -431,11 +431,16 @@ TARGET::getProcInfo(jlong unwCursor) {
   if (ret < 0)
     myInfo = new ProcInfo((jint) ret);
   else
-    myInfo = new ProcInfo(this, (gnu::gcj::RawDataManaged*) procInfo);
+    myInfo = new ProcInfo(this, (jlong) procInfo);
   log(fine, this, "getProcInfo returned", myInfo);
   return myInfo;
 }
 
+void
+TARGET::destroyProcInfo(jlong unwProcInfo) {
+  JvFree((unw_proc_info_t*) (long) unwProcInfo);
+}
+
 // Return NULL when eh_frame_hdr cannot be found.
 // Also fills in ip->start_ip, ip->end_ip and ip->gp.
 // peh_vaddr will point to the address of the eh_frame_hdr in the main
@@ -603,7 +608,7 @@ TARGET::createProcInfoFromElfImage(AddressSpace* addressSpace,
     return new ProcInfo(-UNW_ENOINFO);
 
   unw_proc_info_t *procInfo
-    = (::unw_proc_info_t *) JvAllocBytes(sizeof (::unw_proc_info_t));
+    = (::unw_proc_info_t *) JvMalloc(sizeof (::unw_proc_info_t));
 
   logf(fine, this, "Pre unw_get_unwind_table");
   
@@ -649,8 +654,7 @@ TARGET::createProcInfoFromElfImage(AddressSpace* addressSpace,
   if (ret < 0)
     myInfo = new ProcInfo((jint) ret);
   else
-    myInfo = new ProcInfo(this,
-			  (gnu::gcj::RawDataManaged*) procInfo);
+    myInfo = new ProcInfo(this, (jlong) procInfo);
 
   return myInfo;
 }
@@ -743,46 +747,46 @@ TARGET::createElfImageFromVDSO(AddressSpace* addressSpace,
 }
 
 jlong
-TARGET::getStartIP(gnu::gcj::RawDataManaged* unwProcInfo) {
+TARGET::getStartIP(jlong unwProcInfo) {
   return (jlong) ((unw_proc_info_t *) unwProcInfo)->start_ip;
 }
 
 jlong
-TARGET::getEndIP(gnu::gcj::RawDataManaged* unwProcInfo) {
+TARGET::getEndIP(jlong unwProcInfo) {
   return (jlong) ((unw_proc_info_t *) unwProcInfo)->end_ip;
 }
 
 jlong
-TARGET::getLSDA(gnu::gcj::RawDataManaged* unwProcInfo) {
+TARGET::getLSDA(jlong unwProcInfo) {
   return (jlong) ((unw_proc_info_t *) unwProcInfo)->lsda;
 }
 
 jlong
-TARGET::getHandler(gnu::gcj::RawDataManaged* unwProcInfo) {
+TARGET::getHandler(jlong unwProcInfo) {
   return (jlong) ((unw_proc_info_t *) unwProcInfo)->handler;
 }
 
 jlong
-TARGET::getGP(gnu::gcj::RawDataManaged* unwProcInfo) {
+TARGET::getGP(jlong unwProcInfo) {
   return (jlong) ((unw_proc_info_t *) unwProcInfo)->gp;
 }
 
 jlong
-TARGET::getFlags(gnu::gcj::RawDataManaged* unwProcInfo) {
+TARGET::getFlags(jlong unwProcInfo) {
   return (jlong) ((unw_proc_info_t *) unwProcInfo)->flags;
 }
 
 jint
-TARGET::getFormat(gnu::gcj::RawDataManaged* unwProcInfo) {
+TARGET::getFormat(jlong unwProcInfo) {
   return (jint) ((unw_proc_info_t *) unwProcInfo)->format;
 }
 
 jint
-TARGET::getUnwindInfoSize(gnu::gcj::RawDataManaged* unwProcInfo) {
+TARGET::getUnwindInfoSize(jlong unwProcInfo) {
   return (jint) ((unw_proc_info_t *) unwProcInfo)->unwind_info_size;
 }
 
-gnu::gcj::RawData*
-TARGET::getUnwindInfo(gnu::gcj::RawDataManaged* unwProcInfo) {
-  return (gnu::gcj::RawData *) ((unw_proc_info_t *) unwProcInfo)->unwind_info;
+jlong
+TARGET::getUnwindInfo(jlong unwProcInfo) {
+  return (jlong) ((unw_proc_info_t *) unwProcInfo)->unwind_info;
 }


hooks/post-receive
--
frysk system monitor/debugger


                 reply	other threads:[~2008-05-24  0:52 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=20080524005224.16523.qmail@sourceware.org \
    --to=cagney@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).