This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
I think the only partial excuse for the ugly way this is handled in the GC is that it tries to avoid stdio, in order to avoid accidentally calling malloc. This probably doesn't matter for gcj, but it's important if malloc is actually an alias for GC_malloc, which it sometimes is.
Nonetheless, this should probably be parameterized with respect to file descriptors (probably not FILE *) on Posix systems, and the approximate equivalent on other systems.
GC7 handles this slightly better, but not a lot.
Hans
-----Original Message-----
From: java-patches-owner@gcc.gnu.org [mailto:java-patches-owner@gcc.gnu.org] On Behalf Of David Daney
Sent: Monday, January 29, 2007 3:58 PM
To: tromey@redhat.com
Cc: Java Patch List; gcc-patches@gcc.gnu.org; Johannes P. Schmidt
Subject: Re: [Patch] Java: Add heap dump and analyze support.
New version of the patch:
Tom Tromey wrote:As I said before: I look at this quite a bit. The GC has code that prints the needed information to stdout. Unfortunately we need it in a file. I was thinking about modifying the GC so that you could supply a file descriptor, but that code has #ifdefs for every kind of OS known to man, and I was afraid I would break some obscure untestable configuration.Nice."David" == David Daney <ddaney@avtrex.com> writes:
I read through this. I don't see many issues -- a few formatting things (on irc you said these are fixed).
I'm a little concerned about the ad hoc approach to demangling, but not enough to want to change it.
I'm also worried about the GC private bits copied into the native code. My main concern is that if the GC changes, we won't notice.
My final high-level worry is about security. Right now itis possiblefor any program to call the code that dumps the memory map.I supposewe can just sweep this under the blanket we're putting'gnu.classpath'stuff under.Fixed.
I have a few more minor comments.@command{readelf} commands.
David> +@item -p @var{tool-prefix}
David> +Prefix added to the names of the @command{nm} andI'd prefer to compile in the target, but I suppose this tool isn't built in non-native builds, so that wouldn't help. Darn.symbol) throws
David> + // search all symbol tables
David> + // return -1 if none found
David> + long getAddress(SymbolLookup lookup, StringDavid> + IOException {it=map.entrySet().iterator(); it.hasNext(); )
David> + // for (IteratorDavid> + // {Unused code. It has been removed.
Why is this commented out?
Fixed.David> + if (s.charAt(0) == '#') David> + continue; David> + if (s == null) David> + break;
These tests are in the wrong order.
Done.David> + static void usage() David> + {
Someday I suppose we should convert the tools in gcj to use the classpath getopt code.
David> + if(name.compareTo("gnu.gcj.runtime.MethodRef")David> + == 0)Bogus code left over from 3.4.3 version. It has been removed.
What is this?
David> + public static String KindToName(int kind)Fixed.
Non-java name... method names should start with a lower case letter.
to put itDavid> +namespace gnu David> +{ David> + namespace gcj David> + { David> + namespace util David> + { David> + class GC_enumerator
This appears to be local to a single .cc file. Do we needinto a namespace like this? I've always thought of thesenamespacesas reserved for 'extern "Java"' code.My misunderstanding of namespaces. Changed to anonymous namespace as suggested by Joel Dice and Chris Lattner.
Tested on x86_64-pc-linux-gnu (FC6) with no regressions. Currently testing on i686-pc-linux-gnu.
OK to commit if it passes? 2007-01-29 David Daney <ddaney@avtrex.com> gcc/java: * Make-lang.in (JAVA_MANFILES): Added doc/gc-analyze.1. (java.maintainer-clean):Added gc-analyze.1. (.INTERMEDIATE): Added gc-analyze.pod. (gc-analyze.pod): New rule. (java.install-man): Install gc-analyze.1 * gcj.texi: Added new section for the gc-analyze program.
libjava: 2007-01-29 Johannes Schmidt <jschmidt@avtrex.com> David Daney <ddaney@avtrex.com>
* configure.ac: Added check for /proc/self/maps.
* Makefile.am (bin_PROGRAMS): Added gc-analyze.
(AM_GCJFLAGS): Set classpath to $(srcdir)/classpath/tools/classes.
(gcjh.stamp): Same.
(gc_analyze_SOURCES): New.
(gc_analyze_LDFLAGS): New.
(gc_analyze_LINK): New.
(gc_analyze_LDADD): New.
(gc_analyze_DEPENDENCIES): New.
(nat_source_files): Added gnu/gcj/util/natGCInfo.cc.
* Makefile.in: Regenerated.
* configure: Regenerated.
* include/config.h.in: Regenerated.
* sources.am: Regenerated.
* scripts/makemake.tcl: Don't include gc-analyze classes in libgcj.
* gnu/classpath/tools/getopt/Parser.h: New.
* gnu/classpath/tools/getopt/FileArgumentCallback.h: New.
* gnu/classpath/tools/getopt/Parser$1.h: New.
* gnu/classpath/tools/getopt/Parser$2.h: New.
* gnu/classpath/tools/getopt/Parser$3.h: New.
* gnu/classpath/tools/getopt/OptionGroup.h: New.
* gnu/classpath/tools/getopt/OptionException.h: New.
* gnu/classpath/tools/getopt/Messages.h: New.
* gnu/classpath/tools/getopt/Option.h: New.
* gnu/gcj/tools/gc_analyze/MemoryAnalyze$SubstringComparator.h: New.
* gnu/gcj/tools/gc_analyze/SymbolLookup.java: New.
* gnu/gcj/tools/gc_analyze/BytePtr.h: New.
* gnu/gcj/tools/gc_analyze/ItemList.h: New.
* gnu/gcj/tools/gc_analyze/ToolPrefix.h: New.
* gnu/gcj/tools/gc_analyze/MemoryAnalyze.h: New.
* gnu/gcj/tools/gc_analyze/MemoryAnalyze$1.h: New
* gnu/gcj/tools/gc_analyze/MemoryAnalyze$2.h: New
* gnu/gcj/tools/gc_analyze/MemoryAnalyze$3.h: New
* gnu/gcj/tools/gc_analyze/BlockMap$SizeKind.h: New.
* gnu/gcj/tools/gc_analyze/ObjectMap.java: New.
* gnu/gcj/tools/gc_analyze/SymbolLookup.h: New.
* gnu/gcj/tools/gc_analyze/MemoryMap.java: New.
* gnu/gcj/tools/gc_analyze/MemoryAnalyze$1$Info.h: New.
* gnu/gcj/tools/gc_analyze/ObjectMap.h: New.
* gnu/gcj/tools/gc_analyze/MemoryMap.h: New.
* gnu/gcj/tools/gc_analyze/SymbolTable.java: New.
* gnu/gcj/tools/gc_analyze/SymbolTable.h: New.
* gnu/gcj/tools/gc_analyze/ObjectMap$ObjectItem.h: New.
* gnu/gcj/tools/gc_analyze/MemoryMap$RangeComparator.h: New.
* gnu/gcj/tools/gc_analyze/BlockMap$PtrMarks.h: New.
* gnu/gcj/tools/gc_analyze/BlockMap.java: New.
* gnu/gcj/tools/gc_analyze/BytePtr.java: New.
* gnu/gcj/tools/gc_analyze/ItemList.java: New.
* gnu/gcj/tools/gc_analyze/ToolPrefix.java: New.
* gnu/gcj/tools/gc_analyze/MemoryAnalyze.java: New.
* gnu/gcj/tools/gc_analyze/MemoryMap$Range.h: New.
* gnu/gcj/tools/gc_analyze/BlockMap.h: New.
* gnu/gcj/util/GCInfo.java: New.
* gnu/gcj/util/GCInfo.h: New.
* gnu/gcj/util/natGCInfo.cc: New.
* gnu/gcj/util/UtilPermission.java: New.
* gnu/gcj/util/UtilPermission.h: New.
* classpath/lib/Makefile.am (gcj_tools_classpath): New variable.
(compile_classpath): Add $(gcj_tools_classpath) to classpath.
* classpath/lib/Makefile.in: Regenerated.
* classpath/lib/gnu/gcj/tools/gc_analyze/SymbolTable.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/ObjectMap$ObjectItem.class: New.
*
classpath/lib/gnu/gcj/tools/gc_analyze/MemoryMap$RangeComparat
or.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/BlockMap$PtrMarks.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/MemoryMap$Range.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/BlockMap.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/BytePtr.class: New.
*
classpath/lib/gnu/gcj/tools/gc_analyze/MemoryAnalyze$Substring
Comparator.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/ItemList.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/ToolPrefix.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/MemoryAnalyze.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/BlockMap$SizeKind.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/SymbolLookup.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/MemoryAnalyze$1$Info.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/ObjectMap.class: New.
* classpath/lib/gnu/gcj/tools/gc_analyze/MemoryMap.class: New.
* classpath/lib/gnu/gcj/util/GCInfo.class: New.
* classpath/lib/gnu/gcj/util/UtilPermission.class: New.
As before machine generated files are omitted from the diff.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |