X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fexceptions.h;h=6d3e5241277a09f47f9c24f5066a19bb9a1d2e5d;hb=746ddc828bd7209ccbc267ff8a6f031c9bd44fec;hp=11de835f0377c46afd95577ef8b8157b23f1c3c8;hpb=8ab43d6a35711b88122f693e064d3bb61efdc74c;p=cacao.git diff --git a/src/vm/exceptions.h b/src/vm/exceptions.h index 11de835f0..6d3e52412 100644 --- a/src/vm/exceptions.h +++ b/src/vm/exceptions.h @@ -1,9 +1,9 @@ /* src/vm/exceptions.h - exception related functions prototypes - Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates, - R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner, - C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger, - Institut f. Computersprachen - TU Wien + Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel, + C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, + E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, + J. Wenninger, Institut f. Computersprachen - TU Wien This file is part of CACAO. @@ -19,16 +19,10 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. - Contact: cacao@complang.tuwien.ac.at - - Authors: Christian Thalinger - - Changes: Edwin Steiner - - $Id: exceptions.h 3639 2005-11-08 17:21:37Z twisti $ + $Id: exceptions.h 8087 2007-06-14 16:01:12Z twisti $ */ @@ -36,93 +30,114 @@ #ifndef _EXCEPTIONS_H #define _EXCEPTIONS_H +/* forward typedefs ***********************************************************/ + #include "config.h" #include "vm/types.h" #include "vm/global.h" -#include "native/include/java_lang_String.h" -#include "native/include/java_lang_Throwable.h" -#include "vm/builtin.h" -#include "vm/references.h" -#include "vm/method.h" +#include "vmcore/references.h" +#include "vmcore/method.h" -#if defined(USE_THREADS) && defined(NATIVE_THREADS) -#define exceptionptr builtin_get_exceptionptrptr() -#else -#define exceptionptr &_no_threads_exceptionptr -#endif -#if !defined(USE_THREADS) || !defined(NATIVE_THREADS) -extern java_objectheader *_no_threads_exceptionptr; -#endif +/* hardware-exception defines ************************************************** + These defines define an internal number for the various hardware + exceptions. -/* global variables ***********************************************************/ - - -/* function prototypes ********************************************************/ - -/* load and link exceptions used in the system */ + ATTENTION: These values are also used as load-displacements on some + architectures. Thus, these values must NOT be aligned to 4 or + 8-byte boundaries, since normal loads could have such offsets with + a base of NULL which should result in a NullPointerException. -bool exceptions_init(void); + NOTE: In signal_init() we have a check whether the offset of + java_objectheader.data[0] is greater than the largest displacement + defined below. Otherwise normal array loads/stores could trigger + an exception. +*******************************************************************************/ -/* exception throwing functions */ +#define EXCEPTION_HARDWARE_NULLPOINTER 0 +#define EXCEPTION_HARDWARE_ARITHMETIC 1 +#define EXCEPTION_HARDWARE_ARRAYINDEXOUTOFBOUNDS 2 +#define EXCEPTION_HARDWARE_CLASSCAST 3 -void throw_exception(void); -void throw_exception_exit(void); +#define EXCEPTION_HARDWARE_EXCEPTION 5 +#define EXCEPTION_HARDWARE_PATCHER 6 -void throw_main_exception(void); -void throw_main_exception_exit(void); -void throw_cacao_exception_exit(const char *exception, - const char *message, ...); - -void exceptions_throw_outofmemory_exit(void); - - -/* initialize new exceptions */ - -java_objectheader *new_exception(const char *classname); +/* function prototypes ********************************************************/ -java_objectheader *new_exception_message(const char *classname, - const char *message); +bool exceptions_init(void); -java_objectheader *new_exception_throwable(const char *classname, - java_lang_Throwable *cause); +java_objectheader *exceptions_get_exception(void); +void exceptions_set_exception(java_objectheader *o); +void exceptions_clear_exception(void); +java_objectheader *exceptions_get_and_clear_exception(void); java_objectheader *new_exception_utfmessage(const char *classname, utf *message); -java_objectheader *new_exception_javastring(const char *classname, - java_lang_String *message); - -java_objectheader *new_exception_int(const char *classname, s4 i); - /* functions to generate compiler exceptions */ -java_objectheader *new_classformaterror(classinfo *c, const char *message, ...); -java_objectheader *new_classnotfoundexception(utf *name); -java_objectheader *new_noclassdeffounderror(utf *name); -java_objectheader *exceptions_new_nosuchmethoderror(classinfo *c, - utf *name, utf *desc); -java_objectheader *new_internalerror(const char *message, ...); -java_objectheader *new_verifyerror(methodinfo *m, const char *message, ...); -java_objectheader *new_unsupportedclassversionerror(classinfo *c, - const char *message, ...); - -java_objectheader *new_arithmeticexception(void); -java_objectheader *new_arrayindexoutofboundsexception(s4 index); -java_objectheader *new_arraystoreexception(void); -java_objectheader *new_classcastexception(void); -java_objectheader *new_illegalargumentexception(void); -java_objectheader *new_illegalmonitorstateexception(void); -java_objectheader *new_negativearraysizeexception(void); -java_objectheader *new_nullpointerexception(void); - -void classnotfoundexception_to_noclassdeffounderror(void); +java_objectheader *exceptions_new_abstractmethoderror(void); +java_objectheader *exceptions_asm_new_abstractmethoderror(u1 *sp, u1 *ra); +java_objectheader *exceptions_new_arraystoreexception(void); + +void exceptions_throw_abstractmethoderror(void); +void exceptions_throw_classcircularityerror(classinfo *c); +void exceptions_throw_classformaterror(classinfo *c, const char *message, ...); +void exceptions_throw_classnotfoundexception(utf *name); +void exceptions_throw_noclassdeffounderror(utf *name); +void exceptions_throw_noclassdeffounderror_cause(java_objectheader *cause); +void exceptions_throw_noclassdeffounderror_wrong_name(classinfo *c, utf *name); +void exceptions_throw_linkageerror(const char *message, classinfo *c); +void exceptions_throw_nosuchfielderror(classinfo *c, utf *name); +void exceptions_throw_nosuchmethoderror(classinfo *c, utf *name, utf *desc); +void exceptions_throw_exceptionininitializererror(java_objectheader *cause); +void exceptions_throw_incompatibleclasschangeerror(classinfo *c, + const char *message); +void exceptions_throw_instantiationerror(classinfo *c); +void exceptions_throw_internalerror(const char *message, ...); +void exceptions_throw_outofmemoryerror(void); +void exceptions_throw_verifyerror(methodinfo *m, const char *message, ...); +void exceptions_throw_verifyerror_for_stack(methodinfo *m, int type); +void exceptions_throw_unsatisfiedlinkerror(utf *name); +void exceptions_throw_unsupportedclassversionerror(classinfo *c, u4 ma, u4 mi); + +java_objectheader *exceptions_new_arithmeticexception(void); + +java_objectheader *exceptions_new_arrayindexoutofboundsexception(s4 index); +void exceptions_throw_arrayindexoutofboundsexception(void); +void exceptions_throw_arraystoreexception(void); + +java_objectheader *exceptions_new_classcastexception(java_objectheader *o); + +void exceptions_throw_clonenotsupportedexception(void); +void exceptions_throw_illegalaccessexception(utf *message); +void exceptions_throw_illegalargumentexception(void); +void exceptions_throw_illegalmonitorstateexception(void); +void exceptions_throw_interruptedexception(void); +void exceptions_throw_instantiationexception(classinfo *c); +void exceptions_throw_invocationtargetexception(java_objectheader *cause); +void exceptions_throw_negativearraysizeexception(void); + +java_objectheader *exceptions_new_nullpointerexception(void); +void exceptions_throw_nullpointerexception(void); +void exceptions_throw_privilegedactionexception(java_objectheader *cause); +void exceptions_throw_stringindexoutofboundsexception(void); + +void exceptions_classnotfoundexception_to_noclassdeffounderror(void); + +java_objectheader *exceptions_fillinstacktrace(void); + +java_objectheader *exceptions_new_hardware_exception(u1 *pv, u1 *sp, u1 *ra, u1 *xpc, s4 type, ptrint val); + +void exceptions_print_exception(java_objectheader *xptr); +void exceptions_print_current_exception(void); +void exceptions_print_stacktrace(void); #endif /* _EXCEPTIONS_H */ @@ -138,4 +153,5 @@ void classnotfoundexception_to_noclassdeffounderror(void); * c-basic-offset: 4 * tab-width: 4 * End: + * vim:noexpandtab:sw=4:ts=4: */