GNU header update.
[cacao.git] / src / cacaoh / headers.c
index 6d9f1916e0f3b1612bc858d309788a32b0fb2472..44059a0b55196bd1cb968acb13f1a1d23c158e34 100644 (file)
@@ -1,9 +1,9 @@
-/* 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.
 
@@ -30,7 +30,7 @@
             Philipp Tomsich
             Christian Thalinger
 
-   $Id: headers.c 1296 2004-07-10 17:02:15Z stefan $
+   $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; }  
 
@@ -167,13 +98,19 @@ 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_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
 
 
@@ -193,7 +130,7 @@ void removenativestub(u1 *stub) {}
 
 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() {}
@@ -206,8 +143,6 @@ int cacao_catch_Handler() {}
 threadcritnode asm_criticalsections;
 #endif
 
-java_objectheader *native_new_and_init(void *p) { return NULL; }
-
 
 /************************ global variables **********************/
 
@@ -408,7 +343,6 @@ void printmethod(methodinfo *m)
 {
        char *utf_ptr;
        u2 paramnum = 1;
-       u2 ident_count;
 
        /* search for return-type in descriptor */      
        utf_ptr = m->descriptor->text;
@@ -479,7 +413,7 @@ void gen_header_filename(char *buffer, utf *u)
 
 /* 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]; 
@@ -499,9 +433,16 @@ void headerfile_generate(classinfo *c)
        /* 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");