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