harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tianwei <tianwei.sh...@gmail.com>
Subject Re: The progress of MIPS patch work
Date Sun, 27 Dec 2009 11:59:32 GMT
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:
stw@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 <tianwei.sheng@gmail.com> wrote:

>
>
> On Thu, Dec 3, 2009 at 9:01 AM, Nathan Beyer <ndbeyer@apache.org> wrote:
>
>> On Wed, Dec 2, 2009 at 7:51 AM, Tianwei <tianwei.sheng@gmail.com> 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.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message