PR156: Preparation
[cacao.git] / src / vm / hook.hpp
index 0e6656bb49ed7a8acc353d31de61ae0993cbb5b1..db7c97b94ec3f922f5ad0246093aa02df2057d20 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/hook.hpp - hook points inside the VM
 
-   Copyright (C) 2009
+   Copyright (C) 2009, 2011
    CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
 
    This file is part of CACAO.
@@ -27,6 +27,7 @@
 #define _HOOK_HPP
 
 #include "config.h"
+#include "vm/globals.hpp"
 
 #if defined(ENABLE_OPAGENT)
 #include "vm/jit/oprofile-agent.hpp"
@@ -42,7 +43,7 @@
  */
 namespace Hook {
        void breakpoint     (Breakpoint *bp);
-       void class_linked   (classinfo *c);
+       bool class_linked   (classinfo *c);
        void class_loaded   (classinfo *c);
        void jit_generated  (methodinfo *m, codeinfo *code);
        void jit_recycled   (methodinfo *m, codeinfo *code);
@@ -55,6 +56,9 @@ namespace Hook {
        void vm_init        ();
        void vm_preinit     ();
        void vm_shutdown    ();
+
+       // Non-inline functions
+       bool class_linked_dynoffsets(classinfo *c);
 }
 
 
@@ -69,9 +73,12 @@ inline void Hook::breakpoint(Breakpoint *bp)
 #endif
 }
 
-inline void Hook::class_linked(classinfo *c)
+inline bool Hook::class_linked(classinfo *c)
 {
-       /* nop */
+       if (c == class_java_lang_String)
+               linker_initialize_deferred_strings();
+
+       return class_linked_dynoffsets(c);
 }
 
 inline void Hook::class_loaded(classinfo *c)