[Patch] Make building without the interpreter work.

David Daney ddaney@avtrex.com
Mon Jul 30 18:08:00 GMT 2007


David Daney wrote:
> The current state of the trunk is that if you have a target without ffi 
> closure support (mips64 for example), you cannot build libgcj.
> 
> Some parts of libgcj explicitly test for ffi closure support.  Others 
> test for interpreter support.  I made the simplifying assumption that 
> they are the same thing.  That is if the interpreter is disabled, I 
> assume that ffi closures are not supported.  This seemed quite a bit 
> simpler than trying to factor these two cases out.
> 
> The main change this patch makes is to define a new 
> AM_CONDITIONAL(INTERPRETER).  This allows entire files to be excluded 
> from libgcj if the interpreter is not supported.  Then I was able to 
> conditionally include all jvmti and jdwp files which only are used if 
> the interpreter is functional.  The remainder of the patch just puts the 
> jvmti and closure code contained in files that cannot be excluded, 
> inside of #ifdef INTERPRETER blocks.  Most of this had already been 
> done, but some has leaked out with the addition of jvmti, jdwp, proxies 
> and several other libgcj improvements.
> 
> With the patch I can build mips64-linux (o32, n32, n64 multi-lib).  With 
> n32 a Hello World program works, n64 gets a SIGBUS initializing the GC 
> (I will fix that in a follow on patch).  Also I am currently 
> bootstrapping and regerssion testing x86_64-pc-linux-gnu.
> 
> OK to commit if x86_64-pc-linux-gnu shows no regressions?
> 

No regressions detected.

David Daney

> 2007-07-29  David Daney  <ddaney@avtrex.com>
> 
>   * configure.ac (INTERPRETER): New AM_CONDITIONAL.
>   * scripts/makemake.tcl (package_map): Mark jdwp and jvmti packages
>   as being for interpreter only.  Place interpreter related files in
>   'if INTERPRETER' block.
>   (interpreter_package_files): New list.
>   (interpreter_header_vars): Ditto.
>   (emit_package_rule_to_list): Renamed from emit_package_rule with
>   new target list parameter.
>   (emit_package_rule): Rewritten to call emit_package_rule_to_list.
>   (emit_interpreter_rule): New function.
>   (emit_source_var): Place interpreter related files in
>   interpreter_header_vars.
>   * Makefile.am (ACLOCAL_AMFLAGS): Add -I libltdl.
>   (libgcj_interpret_source_files): New variable.
>   (libgcj_la_SOURCES): Move jvmti.cc and  interpret.cc to
>   libgcj_interpret_source_files and include
>   libgcj_interpret_source_files.
>   (nat_jdwp_source_files): New variable.
>   (nat_jvmti_source_files): Ditto.
>   (nat_source_files): Move jdwp and jvmti related files to
>   nat_jdwp_source_files and nat_jvmti_source_files and include
>   nat_jdwp_source_files and nat_jvmti_source_files.
>   * Makefile.in: Regenerate.
>   * include/Makefile.in: Ditto.
>   * testsuite/Makefile.in: Ditto.
>   * gcj/Makefile.in: Ditto.
>   * aclocal.m4: Ditto.
>   * sources.am: Ditto.
>   * configure: Ditto.
>   * include/config.h.in: Ditto.
>   * interpret.cc: Remove #ifdef INTERPRETER block.
>   * stacktrace.cc (UnwindTraceFn): Do not handle proxy frames if
>   interpreter disabled.
>   * include/java-interp.h (_Jv_FrameType): Move outside of
>   #ifdef INTERPRETER block.
>   * include/execution.h (_Jv_IndirectCompiledEngine::do_get_closure_list,
>   _Jv_InterpreterEngine, _Jv_soleInterpreterEngine): Place in
>   #ifdef INTERPRETER block.
>   * jni.cc (jvmti.h, jvmti-int.h):  Only include if INTERPRETER is
>   defined.
>   (_Jv_JNI_PopSystemFrame, _Jv_JNI_GetEnv): Only do jvmti processing
>   if INTERPRETER is defined.
>   * prims.cc (jvmti.h, jvmti-int.h, Jdwp.h, VMVirtualMachine.h):  Only
>   include if INTERPRETER is defined.
>   (defaultJdwpOptions, jdwpOptions, jvmti_agent_onload_func,
>   jvmti_agent_onunload_func, jvmti_agentonload, jvmti_agentonunload,
>   jvmti_agent_opts, load_jvmti_agent): Only define if INTERPRETER is
>   defined.
>   (parse_x_arg): Only process 'runjdwp:' if INTERPRETER is defined.
>   (parse_init_args): Only process jvmti related options if
>   INTERPRETER is defined.
>   (_Jv_CreateJavaVM): Only call _Jv_JVMTI_Init if INTERPRETER is
>   defined.
>   (_Jv_RunMain): Only do jvmti and jdwp processing if INTERPRETER is
>   defined.
>   * link.cc (jvmti.h, jvmti-int.h):  Only include if INTERPRETER is
>   defined.
>   (_Jv_ThrowNoClassDefFoundError, _Jv_Linker::create_error_method):
>   Define if if INTERPRETER is not defined.
>   (_Jv_Linker::wait_for_state): Only do jvmti proccessing if
>   INTERPRETER is defined.
>   * boehm.cc (closure_list_pointer, finalize_closure_list,
>   _Jv_ClosureListFinalizer): Only define if INTERPRETER is
>   defined.
>   * java/lang/natThread.cc (jvmti.h, jvmti-int.h):  Only include if
>   INTERPRETER is defined.
>   (finish_, _Jv_NotifyThreadStart): Only do jvmti proccessing if
>   INTERPRETER is defined.
>   * java/lang/Class.h (_Jv_InterpreterEngine): Move declaration
>   and friend declaration inside #ifdef INTERPRETER block.
>   * java/lang/natClass.cc (_Jv_ClosureList::releaseClosures,
>   _Jv_ClosureList::registerClosure, _Jv_GetInterpClassSourceFile):
>   Only define if INTERPRETER is defined.
>   * java/lang/reflect/natVMProxy.cc (UnsupportedOperationException.h):
>   Include.
>   (generateProxyClass): Throw UnsupportedOperationException unless
>   INTERPRETER is defined.
> 



More information about the Java-patches mailing list