On Wed, Dec 2, 2009 at 7:51 AM, Tianwei <[email protected]> wrote:
> Hi, all,
> I got some progress for applying Charles's patch sent two weeks ago.
> However, I also met some hard issues which I want to ask for suggestions.
> I am totally new for harmony development, so I want to hear your valuable
> suggestions for my work.
> My experiments step are:
> 1. apply the patch on X86_64 (ubuntu 9.04)
> at this step, I also checkout a clean trunk, maintain two directories
> trunk and trunk-mips(patched by MIPS patch)
> after fixing some problems, I compare the testing result(ant test) for
> these two versions, the result is same where I assume the modified patch
> work on X86(no regression).
> for this step, the main problems of original patch are:
> a. there is some problem when using "unless", such as:
> --- working_vm/make/vm/interpreter.xml (revision 833674)
> +++ working_vm/make/vm/interpreter.xml (working copy)
> @@ -71,6 +71,7 @@
> <exclude name="interp_native_ia32.cpp" unless="is.x86"/>
> <exclude name="interp_native_ipf.cpp" unless="is.ia64"/>
> <exclude name="interp_native_em64t.cpp"
> unless="is.x86_64"/>
> + <exclude name="interp_native_mips.cpp" unless="is.mips"/>
> </fileset>
Perhaps this is obvious, but is the 'is.mips' property being setup?
When you run 'ant echo' in the 'working_classlib' folder do you see a
'is.mips' line in with the other platforms, like this.
[echo] is.windows = ${is.windows}
[echo] is.unix = true
[echo] is.linux = true
[echo] is.freebsd = ${is.freebsd}
[echo] is.macosx = ${is.macosx}
[echo] is.aix = ${is.aix}
[echo] is.zos = ${is.zos}
[echo] is.32bit = true
[echo] is.64bit = ${is.64bit}
[echo] is.x86 = true
[echo] is.x86_64 = ${is.x86_64}
[echo] is.ia64 = ${is.ia64}
[echo] is.ppc32 = ${is.ppc32}
[echo] is.ppc64 = ${is.ppc64}
[echo] is.s390 = ${is.s390}
[echo] is.s390x = ${is.s390x}
> b. the original patch has several problems under the
> working_vm/vm/jitrino/src/jet directory, so I do not use the diff for that
> directory
>
> 2. apply the patch on my MIPS machine
> at this step, I mainly fix a lot of ant make system error since the
> original patch did not include the makefile patch as Charles said.
> typical fixes mainly include:
> a. copy the linux_ppc32.mk to linux_mips32.mk
> b. comment out the ABORT where I can not find the definition
> c.
> /home/stw/harmony/harmony-nofetch/common_resources/make/platform.xml
> + <condition property="is.mips32">
>
> + <or>
> + <equals arg1="${os.arch}" arg2="mips32" />
> + <equals arg1="${os.arch}" arg2="mips" />
> + </or>
> + </condition>
> + <condition property="is.mips64">
> + <equals arg1="${os.arch}" arg2="mips64" />
> + </condition>
> d: manually build the icu-3.4 library since no prebuilt library package
> available
> e: vmcore.xml
> + <include
> name="vmcore/src/util/mips/base_natives" if="is.mips32"/>
> + <include name="port/src/encoder/mips"
> if="is.mips32"/>
> + <include name="vmcore/src/lil/mips/include"
> if="is.mips32"/>
> ...................others minor fixes...........
> 3. after step 2, I finally can build the whole hdk(working_classlib,
> working_vm, working_jdktools), then I tried to run the HelloWorld.java,
> however, I met segmentation fault at the very begging of the launcher.
> I debug this problem, and the following is my finding now:
> a. the gdb backtrace is:
> (gdb) bt
> #0 0x2aaf5164 in apr_initialize () at misc/unix/start.c:46
> #1 0x2aaebecc in hythread_lib_create (lib=0x2ab299b0) at
> /home/stw/harmony/harmony-nofetch/working_vm/vm/thread/src/thread_i\
> nit.c:176
> #2 0x2aaebe54 in hythread_library_init () at
> /home/stw/harmony/harmony-nofetch/working_vm/vm/thread/src/thread_init.c:70
> b. when I use disass under gdb, I found that one instruction
> in apr_initialize caused the problem:
> 0x2aaf5160 <apr_initialize+28>: lui v0,0x5
> 0x2aaf5164 <apr_initialize+32>: lw v1,-9760(v0)
> c. then I suspect its apr's problem, so I rebuilt the apr with -O0, then
> first verify using the test/testall, all tests passed
> I even execute the test/sockperf alone, it also pass, note that
> sockperf call apr_initialize in its main function, but no segmentation
> fault,
> so I assume apr has no problems.
> d. then I rebuilt the hdk, but the segmentation problem still exists.
> e. finally I suspect that there may be some problem with gp issues, but
> I have no clues. When checking how the launcher is built, I am confused with
> libhythr.so, it seems that the launcher is first built under
> working_classlib, link with libhythr.so under
> working_classlib/modules/portlib/src/main/native/thread/, then after the
> launcher is copied into working_vm, it will be linked with libhythr.so
> under working_vm/vm/thread/src/, is that right?
> but I still can not figure out the root cause, can anyone give me
> some suggestions for this hard issue, or someone also experienced similar
> issues before?
>
>
> the Summary:
> 1. no regression on X86_64 for the MIPS patch
> 2. buildable on MIPS for that patch
> 3. running time error(segmentation fault) at the very begging of the
> launcher on MIPS
>
>
> Thanks.
>
> Tianwei
> --
> Sheng, Tianwei
> Inst. of High Performance Computing
> Dept. of Computer Sci. & Tech.
> Tsinghua Univ.
>