* Removed all Id tags.
[cacao.git] / src / vm / exceptions.h
index 5f9467cdacd65cfb675641282835a06a88896f54..6c60a2793bf49f3fde324ba492a396f86f6b0b0c 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
-
-   Changes: Edwin Steiner
-
-   $Id: exceptions.h 5278 2006-08-25 07:54:27Z twisti $
-
 */
 
 
 
 /* forward typedefs ***********************************************************/
 
-typedef struct exceptionentry exceptionentry;
-
 #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"
-
-
-#if defined(ENABLE_THREADS)
-#define exceptionptr    &(THREADOBJECT->_exceptionptr)
-#else
-#define exceptionptr    &_no_threads_exceptionptr
-#endif
 
-#if !defined(ENABLE_THREADS)
-extern java_objectheader *_no_threads_exceptionptr;
-#endif
+#include "vm/jit/stacktrace.h"
 
+#include "vmcore/references.h"
+#include "vmcore/method.h"
 
-/* exceptionentry **************************************************************
-
-   Datastructure which represents an exception entry in the exception
-   table residing in the data segment.
-
-*******************************************************************************/
-
-struct exceptionentry {
-       classref_or_classinfo  catchtype;
-       u1                    *handlerpc;
-       u1                    *endpc;
-       u1                    *startpc;
-};
-
-
-/* function prototypes ********************************************************/
 
-/* load and link exceptions used in the system */
-bool exceptions_init(void);
+/* hardware-exception defines **************************************************
 
+   These defines define an internal number for the various hardware
+   exceptions.
 
-/* exception throwing functions */
+   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.
 
-void throw_exception(void);
-void throw_exception_exit(void);
+   NOTE: In exceptions_init() we have a check whether the offset of
+   java_arrayheader.data[0] is greater than the largest displacement
+   defined below.  Otherwise normal array loads/stores could trigger
+   an exception.
 
-void throw_main_exception(void);
-void throw_main_exception_exit(void);
+*******************************************************************************/
 
-void throw_cacao_exception_exit(const char *exception,
-                                                               const char *message, ...);
+#define EXCEPTION_HARDWARE_NULLPOINTER              0
+#define EXCEPTION_HARDWARE_ARITHMETIC               1
+#define EXCEPTION_HARDWARE_ARRAYINDEXOUTOFBOUNDS    2
+#define EXCEPTION_HARDWARE_CLASSCAST                3
 
-void exceptions_throw_outofmemory_exit(void);
+#define EXCEPTION_HARDWARE_EXCEPTION                5
+#define EXCEPTION_HARDWARE_PATCHER                  6
+#define EXCEPTION_HARDWARE_COMPILER                 7
 
+#define EXCEPTION_HARDWARE_LARGEST                  7
 
-/* 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_handle_t *exceptions_get_exception(void);
+void           exceptions_set_exception(java_handle_t *o);
+void           exceptions_clear_exception(void);
+java_handle_t *exceptions_get_and_clear_exception(void);
 
-java_objectheader *new_exception_utfmessage(const char *classname,
+java_handle_t *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 *exceptions_new_abstractmethoderror(void);
-java_objectheader *exceptions_asm_new_abstractmethoderror(u1 *sp, u1 *ra);
-void exceptions_throw_abstractmethoderror(void);
+java_handle_t *exceptions_new_abstractmethoderror(void);
+java_handle_t *exceptions_asm_new_abstractmethoderror(u1 *sp, u1 *ra);
+java_handle_t *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);
-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_cause(java_handle_t *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);
-
-java_objectheader *new_internalerror(const char *message, ...);
-
-java_objectheader *exceptions_new_verifyerror(methodinfo *m,
-                                                                                         const char *message, ...);
+void exceptions_throw_exceptionininitializererror(java_handle_t *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 *new_unsupportedclassversionerror(classinfo *c,
-                                                                                                       const char *message, ...);
+java_handle_t *exceptions_new_arithmeticexception(void);
 
-java_objectheader *new_arithmeticexception(void);
-
-java_objectheader *new_arrayindexoutofboundsexception(s4 index);
+java_handle_t *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_handle_t *exceptions_new_classcastexception(java_handle_t *o);
 
-java_objectheader *new_illegalargumentexception(void);
+void exceptions_throw_clonenotsupportedexception(void);
+void exceptions_throw_illegalaccessexception(utf *message);
 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_handle_t *cause);
 void exceptions_throw_negativearraysizeexception(void);
 
-java_objectheader *new_nullpointerexception(void);
+java_handle_t *exceptions_new_nullpointerexception(void);
 void exceptions_throw_nullpointerexception(void);
-
-java_objectheader *exceptions_new_stringindexoutofboundsexception(void);
+void exceptions_throw_privilegedactionexception(java_handle_t *cause);
 void exceptions_throw_stringindexoutofboundsexception(void);
 
-void classnotfoundexception_to_noclassdeffounderror(void);
+void exceptions_classnotfoundexception_to_noclassdeffounderror(void);
 
-java_objectheader *exceptions_get_and_clear_exception(void);
+java_handle_t *exceptions_fillinstacktrace(void);
 
-void exceptions_print_exception(java_objectheader *xptr);
+void exceptions_print_exception(java_handle_t *xptr);
+void exceptions_print_current_exception(void);
+void exceptions_print_stacktrace(void);
 
 #endif /* _EXCEPTIONS_H */