public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Eliminate RawData in ProcInfo.
@ 2008-05-24  0:52 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-05-24  0:52 UTC (permalink / raw)
  To: frysk-cvs

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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-05-24  0:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-24  0:52 [SCM] master: Eliminate RawData in ProcInfo cagney

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