natThrowable.cc: New file.

2000-01-14  Andrew Haley  <aph@cygnus.com>

	* java/lang/natThrowable.cc: New file.

	* java/lang/Throwable.java (fillInStackTrace): Make native.
	(printStackTrace): Call native method to do this.
	(Throwable): Call fillInStackTrace.
	(stackTrace): New variable.

	* include/jvm.h: Add _Jv_ThisExecutable functions.

	* prims.cc: (_Jv_execName): New variable.
	(catch_segv): Call fillInStackTrace.
	(catch_fpe): Ditto.
	(_Jv_ThisExecutable): New functions.
	(JvRunMain): Set the name of this executable.

	* Makefile.am: Add java/lang/natThrowable.cc.
	Add name-finder.cc.
	* Makefile.in: Rebuilt.

	* acconfig.h: Add HAVE_PROC_SELF_EXE.

	* configure.in: Force link with __frame_state_for in
	FORCELIBGCCSPEC.  Add new checks for backtrace.
	* include/config.h.in: Rebuilt.

	* name-finder.cc: New file.
	* include/name-finder.h: New file.

From-SVN: r31460
This commit is contained in:
Andrew Haley
2000-01-17 15:45:24 +00:00
committed by Andrew Haley
parent 1353681247
commit 283a159fe3
13 changed files with 732 additions and 162 deletions
+22
View File
@@ -135,12 +135,25 @@
/* Define if using setjmp/longjmp exceptions. */
#undef SJLJ_EXCEPTIONS
/* Define if you have /proc/self/exe */
#undef HAVE_PROC_SELF_EXE
/* Define if getuid() and friends are missing. */
#undef NO_GETUID
/* Define if you have the access function. */
#undef HAVE_ACCESS
/* Define if you have the backtrace function. */
#undef HAVE_BACKTRACE
/* Define if you have the execvp function. */
#undef HAVE_EXECVP
/* Define if you have the fork function. */
#undef HAVE_FORK
/* Define if you have the fstat function. */
#undef HAVE_FSTAT
@@ -201,6 +214,9 @@
/* Define if you have the open function. */
#undef HAVE_OPEN
/* Define if you have the pipe function. */
#undef HAVE_PIPE
/* Define if you have the pthread_mutexattr_setkind_np function. */
#undef HAVE_PTHREAD_MUTEXATTR_SETKIND_NP
@@ -252,6 +268,12 @@
/* Define if you have the <dirent.h> header file. */
#undef HAVE_DIRENT_H
/* Define if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define if you have the <execinfo.h> header file. */
#undef HAVE_EXECINFO_H
/* Define if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
+4
View File
@@ -182,4 +182,8 @@ extern "C"
jlong _Jv_remJ (jlong, jlong);
}
/* get/set the name of the running executable. */
extern char *_Jv_ThisExecutable (void);
extern void _Jv_ThisExecutable (const char *);
#endif /* __JAVA_JVM_H__ */
+69
View File
@@ -0,0 +1,69 @@
// name-finder.h - Convert addresses to names
/* Copyright (C) 2000 Red Hat Inc
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
/**
* @author Andrew Haley <aph@cygnus.com>
* @date Jan 6 2000
*/
#include <gcj/cni.h>
#include <jvm.h>
#include <sys/types.h>
#include <string.h>
#include <stdio.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
/* _Jv_name_finder is a class wrapper around a mechanism that can
convert addresses of methods to their names and the names of files
in which they appear. */
class _Jv_name_finder
{
public:
_Jv_name_finder (char *executable);
~_Jv_name_finder ()
{
#if defined (HAVE_PIPE) && defined (HAVE_FORK)
close (f_pipe[1]);
fclose (b_pipe_fd);
#endif
}
/* Given a pointer to a function or method, try to convert it into a
name and the appropriate line and source file. The caller passes
the code pointer in p.
Returns false if the lookup fails. Even if this happens, the field
hex will have been correctly filled in with the pointer.
The other fields are method_name and file_name, which lookup will
attempt to fill appropriately. If the lookup has failed, these
fields contain garbage.*/
bool lookup (void *p);
char method_name[1024];
char file_name[1024];
char hex[sizeof (void *) * 2 + 5];
private:
void toHex (void *p);
#if defined (HAVE_PIPE) && defined (HAVE_FORK)
int pid;
int f_pipe[2], b_pipe[2];
FILE *b_pipe_fd;
int error;
#endif
};