harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gregory Shimansky <gshiman...@gmail.com>
Subject Re: [drlvm] tests failing on linux (Ubuntu 7.04-dev) with Quad Xeon P3
Date Sat, 31 Mar 2007 09:54:45 GMT
Nathan Beyer wrote:
> I ran the smoke tests and they failed horribly. From what I can tell,
> every test failed.
> 
> I ran the GDB examines after running my HelloWorld class, here's the 
> output.
> 
> (gdb) x/1i $eip
> 0xb7b4f2ab:     mfence
> (gdb) x/1i $eip+1
> 0xb7b4f2ac:     scas   %es:(%edi),%al
> (gdb)

Ok so this is mfence which is not SSE2 instruction, but is definitely P4 
specific [1].

> I ran it a second time while still in GDB a little more information was 
> shown.

The function code is jsig_primary_sigaction is not DRLVM specific. It 
actually comes from classlib portlib. Could it be that Harmony build 
that you are using was compiled with P4 specific optimizations? Looking 
at the function code I don't see any assembly, so it should be gcc which 
generated such code.

> Program received signal SIGILL, Illegal instruction.
> Cannot remove breakpoints because program is no longer writable.
> It might be running in another process.
> Further execution is probably impossible.
> 0xb7bca2ab in jsig_primary_sigaction (sig=142459008, act=0x1,
> oact=0xbfe67f28) at hysigunix.c:303
> 303                   if (primaryPreviouslyInstalled &&
> (gdb) x/1i $eip
> 0xb7bca2ab <jsig_primary_sigaction+413>:        mfence
> (gdb) x/1i $eip+1
> 0xb7bca2ac <jsig_primary_sigaction+414>:        scas   %es:(%edi),%al
> (gdb)
> 
> -Nathan
> 
> On 3/30/07, Nathan Beyer <ndbeyer@apache.org> wrote:
>> Okay, I'm trying that out now. Can the JIT be a little smarter and not
>> use instructions that aren't available? We certainly can't limit
>> available platforms to P4 or newer.

I hope JIT gurus can answer this. I know that JIT can use x87 stack 
instead of SSE for floating point, but other P4 specific instructions 
may still be present in the code. I know at least one place in DRLVM 
where mfence, sfence and lfence are used explicitly in inline assembly.

[1] http://en.wikipedia.org/wiki/X86_instruction_listings

>> -Nathan
>>
>> On 3/30/07, Gregory Shimansky <gshimansky@gmail.com> wrote:
>> > Ok I think I know what's going on. DRLVM JIT generates SSE2 
>> instructions,
>> > and according to the subject, you are using P3. SSE2 is not 
>> available on P3
>> > and will generate SIGILL on it. So it is most likely not related to 
>> JVMTI
>> > implementation. To prove this you can try to run "build.sh 
>> smoke.test" which
>> > should execute pure Java without any JVMTI.
>> >
>> > If you could please do
>> >
>> > x/1i $eip $eip+1
>> >
>> > in gdb to disassemble the failing address to see what instruction 
>> caused
>> > SIGILL.
>> >
>> > 2007/3/30, Nathan Beyer <ndbeyer@apache.org>:
>> > >
>> > > I might have to take that back. I tried running a simple class and it
>> > > bombed out with "Illegal instruction". Here's what I got from GDB 
>> run,
>> > > below. Note, I'm still pretty green when it comes to Linux 
>> development
>> > > tools, so I may sound like an idiot right now.
>> > >
>> > > nathan@pants
>> > > :~/harmony/drlvm-trunk/build/lnx_ia32_gcc_debug/deploy/jdk/jre/bin$
>> > > gdb --args ./java -cp ~/workspace/helloworld/bin/ HelloWorld
>> > > GNU gdb 6.6-debian
>> > > Copyright (C) 2006 Free Software Foundation, Inc.
>> > > GDB is free software, covered by the GNU General Public License, 
>> and you
>> > > are
>> > > welcome to change it and/or distribute copies of it under certain
>> > > conditions.
>> > > Type "show copying" to see the conditions.
>> > > There is absolutely no warranty for GDB.  Type "show warranty" for
>> > > details.
>> > > This GDB was configured as "i486-linux-gnu"...
>> > > Using host libthread_db library 
>> "/lib/tls/i686/cmov/libthread_db.so.1".
>> > > (gdb) run
>> > > Starting program:
>> > >
>> > > 
>> /home/nathan/harmony/drlvm-trunk/build/lnx_ia32_gcc_debug/deploy/jdk/jre/bin/java

>>
>> > > -cp /home/nathan/workspace/helloworld/bin/ HelloWorld
>> > > [Thread debugging using libthread_db enabled]
>> > > [New Thread -1214162256 (LWP 13833)]
>> > > [New Thread -1215321200 (LWP 13836)]
>> > > [New process 13833]
>> > > [New LWP 13833]
>> > >
>> > > Program received signal SIGILL, Illegal instruction.
>> > > Cannot remove breakpoints because program is no longer writable.
>> > > It might be running in another process.
>> > > Further execution is probably impossible.
>> > > 0xb7b0c2ab in ?? () from /lib/tls/i686/cmov/libc.so.6
>> > > (gdb)
>> > >
>> > >
>> > > On 3/29/07, Nathan Beyer <ndbeyer@apache.org> wrote:
>> > > > I am not seeing that. Can you run the "./java -version" 
>> successfully?
>> > > >
>> > > > I tried running "gdb ./java" and it loaded me into GDB just fine.
>> > > >
>> > > > -Nathan
>> > > >
>> > > > On 3/29/07, Rana Dasgupta <rdasgupt@gmail.com> wrote:
>> > > > > The jvmti tests are among the first to run. Is it a problem 
>> with jvmti
>> > > > > failures or is drlvm currently broken on linux? I seem to get
a
>> > > segmentation
>> > > > > violation running just the drlvm java executable on both 32 
>> and 64 bit
>> > > RHEL
>> > > > > Linux.
>> > > > >
>> > > > > gdb java
>> > > > >
>> > > > > I think shows an invalid pointer in hymem_free_memory()
>> > > > >
>> > > > > Is anyone else seeing this?
>> > > > >
>> > > > >
>> > > > >
>> > > > > On 3/29/07, Nathan Beyer <ndbeyer@apache.org > wrote:
>> > > > > >
>> > > > > > On 3/29/07, Gregory Shimansky < gshimansky@gmail.com>
wrote:
>> > > > > > > Nathan Beyer wrote:
>> > > > > > > > On 3/28/07, Gregory Shimansky <gshimansky@gmail.com>
wrote:
>> > > > > > > >> Nathan Beyer wrote:
>> > > > > > > >> > I'm getting consistent failures of the
following 
>> tests on
>> > > Ubuntu
>> > > > > > > >> > 7.04-dev running on Quad Xeon P3 hardware.
I saw some 
>> other
>> > > threads
>> > > > > > on
>> > > > > > > >> > the mailing list about failures on a
dual CPU 
>> machine, are
>> > > these
>> > > > > > the
>> > > > > > > >> > same failures.
>> > > > > > > >> >
>> > > > > > > >> > Is there anyway to get some more information
about these
>> > > failures?
>> > > > > > > >> > Stack trace? dumps?
>> > > > > > > >> >
>> > > > > > > >> > -Nathan
>> > > > > > > >> >
>> > > > > > > >> > Breakpoint1 failed on Client mode JIT
(default)
>> > > > > > > >> > SingleStep1 failed on Client mode JIT
(default)
>> > > > > > > >> > VMInit1 failed on Client mode JIT (default)
>> > > > > > > >> > Breakpoint1 failed on interpreter
>> > > > > > > >> > SingleStep1 failed on interpreter
>> > > > > > > >> > VMInit1 failed on interpreter
>> > > > > > > >>
>> > > > > > > >> The tests produce a report in
>> > > > > > > >> lnx_ia32_gcc_debug/semis/jvmti.tests/reports
which you 
>> can try
>> > > to
>> > > > > > > >> analyze. There should be the output why the
tests 
>> failed. The
>> > > tests
>> > > > > > > >> you've mentioned are single threaded and shouldn't

>> depend on
>> > > the
>> > > > > > number
>> > > > > > > >> of CPUs.
>> > > > > > > >
>> > > > > > > > I'm seeing three folders under
>> > > > > > > > "build/lnx_ia32_gcc_debug/semis/jvmti.tests/reports/"

>> and "int",
>> > > "jit"
>> > > > > > > > and "opt" folder. All of them are empty.
>> > > > > > >
>> > > > > > > Try this command line to run the test in command line.

>> Tests have
>> > > to be
>> > > > > > > compiled before running it
>> > > > > > >
>> > > > > > > ./lnx_ia32_gcc_debug/deploy/jdk/jre/bin/java -cp
>> > > > > > > 
>> make/tmp/junit.jar:./lnx_ia32_gcc_debug/semis/jvmti.tests/classes
>> > > > > > >
>> > > > > >
>> > > 
>> -agentpath:./lnx_ia32_gcc_debug/semis/jvmti.tests/native/Breakpoint1/libBreakpoint1.so

>>
>> > > > > > > junit.textui.TestRunner Breakpoint1.Breakpoint1
>> > > > > > >
>> > > > > > > --
>> > > > > > > Gregory
>> > > > > > >
>> > > > > > >
>> > > > > >
>> > > > > > I tried that and this is what is output to the console (the

>> report
>> > > > > > folders are still empty).
>> > > > > >
>> > > > > > DEBUG: Getting JVMTI enviroment...
>> > > > > > DEBUG: done!
>> > > > > > DEBUG: Setting capabilities...
>> > > > > > DEBUG: done!
>> > > > > > DEBUG: Setting events...
>> > > > > > DEBUG: done!
>> > > > > > Illegal instruction
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> >
>> >
>> > --
>> > Gregory
>> >
>>
> 


-- 
Gregory


Mime
View raw message