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