-/* headers.c - functions for header generation
+/* vm/headers.c - functions for header generation
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
- R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser,
- M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck,
- P. Tomsich, J. Wenninger
+ 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
This file is part of CACAO.
Philipp Tomsich
Christian Thalinger
- $Id: headers.c 1244 2004-06-30 20:14:20Z twisti $
+ $Id: headers.c 1735 2004-12-07 14:33:27Z twisti $
*/
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
+
+#if defined(__DARWIN__)
+# include <signal.h>
+#endif
+#include <ucontext.h>
+
#include "config.h"
-#include "global.h"
-#include "tables.h"
-#include "loader.h"
-#include "options.h"
-#include "builtin.h"
#include "mm/boehm.h"
+#include "mm/memory.h"
+#include "native/include/java_lang_String.h"
+#include "native/include/java_lang_Throwable.h"
#include "toolbox/chain.h"
-#include "toolbox/memory.h"
#include "toolbox/logging.h"
-#include "nat/java_lang_String.h"
+#include "vm/global.h"
+#include "vm/tables.h"
+#include "vm/loader.h"
+#include "vm/options.h"
+#include "vm/builtin.h"
/******* replace some external functions *********/
functionptr native_findfunction(utf *cname, utf *mname, utf *desc, bool isstatic)
{ return NULL; }
-java_objectheader *javastring_new(utf *text)
-{ return NULL; }
+java_objectheader *javastring_new(utf *text) { return NULL; }
+java_objectheader *javastring_new_char(char *text) { return NULL; }
char *javastring_tochar(java_objectheader *so) { return NULL; }
utf *javastring_toutf(java_lang_String *string, bool isclassname)
{ return NULL; }
-/* some exception stuff */
-
-classinfo *class_java_lang_Exception;
-
-
-char *string_java_lang_IllegalMonitorStateException =
- "java/lang/IllegalMonitorStateException";
-
-char *string_java_lang_NegativeArraySizeException =
- "java/lang/NegativeArraySizeException";
-
-
-char *string_java_lang_AbstractMethodError =
- "java/lang/AbstractMethodError";
-
-char *string_java_lang_ClassCircularityError =
- "java/lang/ClassCircularityError";
-
-char *string_java_lang_ClassFormatError =
- "java/lang/ClassFormatError";
-
-char *string_java_lang_ExceptionInInitializerError =
- "java/lang/ExceptionInInitializerError";
-
-char *string_java_lang_IncompatibleClassChangeError =
- "java/lang/IncompatibleClassChangeError";
-
-char *string_java_lang_InternalError =
- "java/lang/InternalError";
-
-char *string_java_lang_LinkageError =
- "java/lang/LinkageError";
-
-char *string_java_lang_NoClassDefFoundError =
- "java/lang/NoClassDefFoundError";
-
-char *string_java_lang_NoSuchFieldError =
- "java/lang/NoSuchFieldError";
-
-char *string_java_lang_NoSuchMethodError =
- "java/lang/NoSuchMethodError";
-
-char *string_java_lang_OutOfMemoryError =
- "java/lang/OutOfMemoryError";
-
-
-void throw_exception() {}
-void throw_exception_exit() {}
-
-void throw_cacao_exception_exit(char *exception, char *message)
-{
- fprintf(stderr,
- "Exception in thread \"main\" %s: %s\n", exception, message);
- fflush(stderr);
-
- /* good bye! */
- exit(1);
-}
-
-
-void new_exception(char *classname)
-{
- printf("Exception in thread \"main\" %s\n", classname);
- exit(1);
-}
-
-void new_exception_message(char *classname, char *message)
-{
- printf("Exception in thread \"main\" %s: %s\n", classname, message);
- exit(1);
-}
-
-void new_exception_throwable(char *classname, java_objectheader *t) {}
-void new_exception_utfmessage(char *classname, utf *message)
-{
- printf("Exception in thread \"main\" %s: ", classname);
- utf_display(message);
- printf("\n");
- exit(1);
-}
+java_objectheader *native_new_and_init(classinfo *c) { return NULL; }
+java_objectheader *native_new_and_init_string(classinfo *c, java_lang_String *s) { return NULL; }
+java_objectheader *native_new_and_init_int(classinfo *c, s4 i) { return NULL; }
+java_objectheader *native_new_and_init_throwable(classinfo *c, java_lang_Throwable *t) { return NULL; }
java_objectheader *literalstring_new(utf *u) { return NULL; }
s4 asm_builtin_d2i(double a) { return 0; }
s8 asm_builtin_d2l(double a) { return 0; }
+void use_class_as_object() {}
void asm_builtin_monitorenter(java_objectheader *o) {}
-void asm_builtin_monitorexit(java_objectheader *o) {}
+void *asm_builtin_monitorexit(java_objectheader *o) { return NULL; }
-s4 asm_builtin_checkarraycast(java_objectheader *obj, vftbl *target) {return 0;}
+s4 asm_builtin_checkarraycast(java_objectheader *obj, vftbl_t *target) {return 0;}
#if defined(__MIPS__)
-void atomic_swap() {}
-void compare_and_swap() {}
+long compare_and_swap(long *p, long oldval, long newval)
+{
+ if (*p == oldval) {
+ *p = newval;
+ return oldval;
+ } else
+ return *p;
+}
#endif
#if defined(__I386__)
s4 asm_builtin_arrayinstanceof(java_objectheader *obj, classinfo *class) { return 0; }
-void asm_builtin_newarray(s4 size, vftbl *arrayvftbl) {}
+void asm_builtin_newarray(s4 size, vftbl_t *arrayvftbl) {}
#endif
void asm_builtin_aastore(java_objectarray *a, s4 index, java_objectheader *o) {}
void asm_perform_threadswitch(u1 **from, u1 **to, u1 **stackTop) {}
u1* asm_initialize_thread_stack(void *func, u1 *stack) { return NULL; }
-void thread_restartcriticalsection() {}
+void thread_restartcriticalsection(ucontext_t *uc) {}
void asm_switchstackandcall() {}
void asm_handle_builtin_exception(classinfo *c) {}
void asm_getclassvalues_atomic() {}
threadcritnode asm_criticalsections;
#endif
-java_objectheader *native_new_and_init(void *p) { return NULL; }
-
/************************ global variables **********************/
{
char *utf_ptr;
u2 paramnum = 1;
- u2 ident_count;
/* search for return-type in descriptor */
utf_ptr = m->descriptor->text;
/* create headerfile for classes and store native methods in chain ************/
-void headerfile_generate(classinfo *c)
+void headerfile_generate(classinfo *c, char *opt_directory)
{
char header_filename[1024] = "";
char classname[1024];
/* create chain for renaming fields */
ident_chain = chain_new();
- sprintf(header_filename, "nat/%s.h", classname);
+ if (opt_directory) {
+ sprintf(header_filename, "%s/%s.h", opt_directory, classname);
+
+ } else {
+ sprintf(header_filename, "%s.h", classname);
+ }
+
file = fopen(header_filename, "w");
- if (!file) panic("Can not open file to store header information");
+ if (!file)
+ panic("Can not open file to store header information");
fprintf(file, "/* This file is machine generated, don't edit it !*/\n\n");