* contrib/vmlog/Makefile.am (AM_CPPFLAGS): Add include directories for vmlog.
[cacao.git] / src / vm / exceptions.h
index 70e9088e2916eb5d878f79381e56a61c3f0b0002..f8aa9ab034db179f6b316b691ea60a61bb8b7222 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/exceptions.h - exception related functions prototypes
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   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
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Christian Thalinger
-            Edwin Steiner
-
-   $Id: exceptions.h 6286 2007-01-10 10:03:38Z twisti $
+   $Id: exceptions.h 7773 2007-04-19 19:44:54Z twisti $
 
 */
 
 #include "vm/types.h"
 
 #include "vm/global.h"
-#include "native/jni.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"
 
-/* hardware-exception defines **************************************************
 
-   These defines define the load-offset which indicates the given
-   exception.
+/* hardware-exception defines **************************************************
 
-   ATTENTION: These offsets need NOT to 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.
+   These defines define an internal number for the various hardware
+   exceptions.
 
-*******************************************************************************/
+   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.
 
-#define EXCEPTION_LOAD_DISP_NULLPOINTER              0
-#define EXCEPTION_LOAD_DISP_ARITHMETIC               1
-#define EXCEPTION_LOAD_DISP_ARRAYINDEXOUTOFBOUNDS    2
-#define EXCEPTION_LOAD_DISP_CLASSCAST                3
-
-#define EXCEPTION_LOAD_DISP_PATCHER                  5
+   NOTE: In signal_init() we have an assert checking that 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 pointer **********************************************************/
+#define EXCEPTION_HARDWARE_NULLPOINTER              0
+#define EXCEPTION_HARDWARE_ARITHMETIC               1
+#define EXCEPTION_HARDWARE_ARRAYINDEXOUTOFBOUNDS    2
+#define EXCEPTION_HARDWARE_CLASSCAST                3
 
-#if defined(ENABLE_THREADS)
-#define exceptionptr    &(THREADOBJECT->_exceptionptr)
-#else
-#define exceptionptr    &_no_threads_exceptionptr
-#endif
+#define EXCEPTION_HARDWARE_EXCEPTION                5
 
-#if !defined(ENABLE_THREADS)
-extern java_objectheader *_no_threads_exceptionptr;
-#endif
+#define EXCEPTION_HARDWARE_PATCHER                  6
 
 
 /* function prototypes ********************************************************/
@@ -86,105 +73,75 @@ extern java_objectheader *_no_threads_exceptionptr;
 /* load and link exceptions used in the system */
 bool exceptions_init(void);
 
-
-/* exception throwing functions */
-
-void throw_exception(void);
-void throw_exception_exit(void);
-
-void throw_main_exception(void);
-void throw_main_exception_exit(void);
-
-void throw_cacao_exception_exit(const char *exception,
-                                                               const char *message, ...);
-
-
 /* initialize new exceptions */
 
-java_objectheader *new_exception(const char *classname);
-
-java_objectheader *new_exception_message(const char *classname,
-                                                                                const char *message);
-
-java_objectheader *new_exception_throwable(const char *classname,
-                                                                                  java_lang_Throwable *cause);
-
 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 */
 
-#if defined(ENABLE_JAVASE)
 java_objectheader *exceptions_new_abstractmethoderror(void);
-void               exceptions_throw_abstractmethoderror(void);
-#endif
-
 java_objectheader *exceptions_asm_new_abstractmethoderror(u1 *sp, u1 *ra);
+java_objectheader *exceptions_new_arraystoreexception(void);
 
-java_objectheader *new_classformaterror(classinfo *c, const char *message, ...);
+void exceptions_throw_abstractmethoderror(void);
+void exceptions_throw_classcircularityerror(classinfo *c);
 void exceptions_throw_classformaterror(classinfo *c, const char *message, ...);
-
-java_objectheader *new_classnotfoundexception(utf *name);
-java_objectheader *new_noclassdeffounderror(utf *name);
-java_objectheader *exceptions_new_linkageerror(const char *message,classinfo *c);
-
-#if defined(ENABLE_JAVASE)
-java_objectheader *exceptions_new_nosuchmethoderror(classinfo *c,
-                                                                                                       utf *name, utf *desc);
+void exceptions_throw_classnotfoundexception(utf *name);
+void exceptions_throw_noclassdeffounderror(utf *name);
+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);
-#endif
-
+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);
-
-java_objectheader *exceptions_new_verifyerror(methodinfo *m,
-                                                                                         const char *message, ...);
 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_virtualmachineerror(void);
-void               exceptions_throw_virtualmachineerror(void);
-
-java_objectheader *new_unsupportedclassversionerror(classinfo *c,
-                                                                                                       const char *message, ...);
+java_objectheader *exceptions_new_arithmeticexception(void);
 
-java_objectheader *new_arithmeticexception(void);
-
-java_objectheader *new_arrayindexoutofboundsexception(s4 index);
+java_objectheader *exceptions_new_arrayindexoutofboundsexception(s4 index);
 void exceptions_throw_arrayindexoutofboundsexception(void);
-
-java_objectheader *exceptions_new_arraystoreexception(void);
 void exceptions_throw_arraystoreexception(void);
 
 java_objectheader *exceptions_new_classcastexception(java_objectheader *o);
 
-java_objectheader *new_illegalargumentexception(void);
+void exceptions_throw_clonenotsupportedexception(void);
+void exceptions_throw_illegalaccessexception(classinfo *c);
 void exceptions_throw_illegalargumentexception(void);
-
-java_objectheader *exceptions_new_illegalmonitorstateexception(void);
-void               exceptions_throw_illegalmonitorstateexception(void);
-
-java_objectheader *new_negativearraysizeexception(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);
-
-java_objectheader *exceptions_new_stringindexoutofboundsexception(void);
 void exceptions_throw_stringindexoutofboundsexception(void);
 
+java_objectheader *exceptions_fillinstacktrace(void);
+
 void classnotfoundexception_to_noclassdeffounderror(void);
 
+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 *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 */