Well, after two day's debugging, the root cause is that there is some
problem with the parameter passing in original patch on my machine, some of
the code looks like:
--- interpreter.cpp     (revision 162)

+++ interpreter.cpp     (working copy)

@@ -1691,10 +1691,10 @@

         case VM_DATA_TYPE_INT64:

         case VM_DATA_TYPE_F8:

             {

-                double *vaddr = (double*) addr;

-                *vaddr = frame.stack.getLong(0).d;

-                frame.stack.pop(2);

-                break;

+             //double *vaddr = (double*) addr;

+             *(I_64*)addr = frame.stack.getLong(0).i64;

+             frame.stack.pop(2);

+             break;

             }
===================================================================

--- interp_native_mips.cpp      (revision 162)

+++ interp_native_mips.cpp      (working copy)
             case JAVA_TYPE_DOUBLE:

             case JAVA_TYPE_LONG:


-                args[argId+0] = prevFrame.stack.pick(pos-0).u;

-                args[argId+1] = prevFrame.stack.pick(pos-1).u;

-                argId += 2;

-                pos -= 2;

-                break;



+             Value2 val;

+             val.i64 = prevFrame.stack.getLong(pos-1).i64;

+             args[argId+0] = val.v[0].i;

+             args[argId+1] = val.v[1].i;

+             argId += 2;

+             pos -= 2;

+             break;

I guess the fix is not fully right(does not handle double), but at least the
orignal patch do not have a consistent usage for "JAVA_TYPE_LONG".

Tianwei
On Sun, Dec 27, 2009 at 8:40 PM, Tianwei <[email protected]> wrote:

> sorry, miss something for the previous trace:
> [trace] StartLoading class [Ljava/lang/StackTraceElement; with loader
> 0x450fc0
> [trace] initializing class java/lang/System
> [trace] initializing class java/lang/System STEP 2
> [trace] StartLoading class java/lang/NoClassDefFoundError with loader
> 0x450fc0
> [trace] initializing class java/lang/NoClassDefFoundError
> [trace] initializing class java/lang/NoClassDefFoundError STEP 2
> [trace] initializing class java/lang/NoClassDefFoundErrorSTEP 6
> [trace] class java/lang/NoClassDefFoundError initialized
> [trace] exn_raise_object(), propagating lazy & non-destructively
> [trace] interpreter: 0x6f3608.<init>(Ljava/lang/String;)V
> [trace] interpreter: 0x6f3440.<init>(Ljava/lang/String;)V
> [trace] interpreter: 0x6f31b0.<init>(Ljava/lang/String;)V
> [trace] interpreter: 0x6f2ec8.<init>(Ljava/lang/String;)V
> [trace] interpreter: 0x468358.<init>()V
> [trace] interpreter: 0x6f2ec8.fillInStackTrace()Ljava/lang/Throwable;
> [trace] interpreter static native:
> 0x787048.getStackState()Ljava/lang/Object;
> [trace] interpreter static native:
> 0x787048.getStackClasses(Ljava/lang/Object;)[Ljava/lang/Class;
>
>
> Does that mean it has some problem with loading
> "[Ljava/lang/StackTraceElement"?
>
> Thanks.
>
> Tianwei
> On Sun, Dec 27, 2009 at 8:26 PM, Tianwei <[email protected]> wrote:
>
>> OK, when using  -Xtrace:harmonyvm, the tail of the trace looks like:
>> trace] interpreter: 0x6f2740.toString()Ljava/lang/String;
>> [trace] interpreter: 0x6f2740.toString()Ljava/lang/String;
>> [trace] interpreter: 0x6f3498.<init>(Ljava/lang/String;)V
>> [trace] interpreter: 0x6f32d0.<init>(Ljava/lang/String;)V
>> [trace] interpreter: 0x6f3040.<init>(Ljava/lang/String;)V
>> [trace] interpreter: 0x6f2d58.<init>(Ljava/lang/String;)V
>> [trace] interpreter: 0x4682f8.<init>()V
>> [trace] interpreter: 0x6f2d58.fillInStackTrace()Ljava/lang/Throwable;
>> [trace] interpreter static native:
>> 0x786ed8.getStackState()Ljava/lang/Object;
>> [trace] interpreter static native:
>> 0x786ed8.getStackClasses(Ljava/lang/Object;)[Ljava/lang/Class;
>> java:
>> /home/stw/harmony/harmony-nofetch/working_vm/vm/vmcore/src/exception/exceptions.cpp:574:
>> exn_native_print_stack_trace: Assertion `hythread_is_suspend_enabled()'
>> failed.
>> Aborted
>>
>> Tianwei
>>
>> On Sun, Dec 27, 2009 at 7:59 PM, Tianwei <[email protected]> wrote:
>>
>>> Hi, all,
>>>    I met a difficult problem again. Now based on Charles's patch, I can
>>> go further on my MIPS machine. But I met the following error when using
>>> interpreter:
>>> s...@rays-b0f748fa:~/test$
>>> /home/stw/harmony/harmony-nofetch/working_vm/build/linux_mips32_gcc_debug/deploy/jdk/jre/bin/java
>>> -Xint -Xtrace:vm.core  HelloWorldApp
>>>
>>> checking table sizes: 96/96
>>>
>>> checking table sizes: 96/96
>>>
>>> [trace] Initializing VM
>>>
>>> [trace] analyzing em dll libem.so
>>>
>>> [trace] analyzing gc.dll libgc_gen_uncomp.so
>>>
>>> [trace] bootstrapping initial java classes
>>>
>>> [trace] bootstrapping initial java classes complete
>>>
>>> [trace] get class methods : java/lang/Thread
>>>
>>> [trace] Failed to initialize new thread object, exception =
>>> java/lang/ExceptionInInitializerError
>>>
>>> java/lang/ExceptionInInitializerError : (null)
>>> java:
>>> /home/stw/harmony/harmony-nofetch/working_vm/vm/vmcore/src/exception/exceptions.cpp:574:
>>> exn_native_print_stack_trace: Assertion `hythread_is_suspend_enabled()'
>>> failed.
>>> Aborted
>>>
>>>
>>> I debug the code with gdb a lot(compared with X86_64 version), but was
>>> lost inside the large code base. I also were reading Harmony's document and
>>> try to understand the whole framework.  But it's really very difficult ;-(
>>> I want to know if someone can give me some suggestions for such bugs,
>>> also are there any useful debugging tips(trace, logging facilities) for my
>>> porting work?
>>>
>>> more information for the exception, I use gdb to trace the bug for the
>>> source code is:
>>>   void
>>>   interpreter(StackFrame &frame) {
>>>       while (true) {
>>>           ip0 = *frame.ip;
>>>          switch(ip0) {
>>>            ...............
>>>              case OPCODE_INVOKESTATIC:
>>>                                  Opcode_INVOKESTATIC(frame);
>>>                                   frame.exc =
>>> get_current_thread_exception();
>>>                                   if (frame.exc != 0) goto got_exception;
>>>                                   frame.ip += 3;
>>>                                   break;
>>>
>>>       }
>>>    got_exception:
>>>             ................
>>> }
>>>
>>> but hard to further locate the root cause.
>>>
>>> Any suggestions?
>>>
>>> Thanks very much
>>>
>>> Tianwei
>>> On Thu, Dec 3, 2009 at 10:31 AM, Tianwei <[email protected]>wrote:
>>>
>>>>
>>>>
>>>> On Thu, Dec 3, 2009 at 9:01 AM, Nathan Beyer <[email protected]>wrote:
>>>>
>>>>> 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}
>>>>>
>>>>>
>>>>> Ah, I did not see the is_mips32, but I added the line in
>>>> common_resources/make/platform.xml where I thought it would set is_mips32
>>>> according to $os_arch.  I think this should be set because I used this to
>>>> add the defineset, such as -D_MIPS_.
>>>>
>>>> Tianwei
>>>>
>>>>> >  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.
>>>>> >
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Sheng, Tianwei
>>>> Inst. of High Performance Computing
>>>> Dept. of Computer Sci. & Tech.
>>>> Tsinghua Univ.
>>>>
>>>
>>>
>>>
>>> --
>>> Sheng, Tianwei
>>> Inst. of High Performance Computing
>>> Dept. of Computer Sci. & Tech.
>>> Tsinghua Univ.
>>>
>>
>>
>>
>> --
>> Sheng, Tianwei
>> Inst. of High Performance Computing
>> Dept. of Computer Sci. & Tech.
>> Tsinghua Univ.
>>
>
>
>
> --
> Sheng, Tianwei
> Inst. of High Performance Computing
> Dept. of Computer Sci. & Tech.
> Tsinghua Univ.
>



-- 
Sheng, Tianwei
Inst. of High Performance Computing
Dept. of Computer Sci. & Tech.
Tsinghua Univ.

Reply via email to