yes - add the bin directory and the default directory to your LD_LIBRARY_PATH - the launcher will decide that it doesn't need to do the execv() and will skip it...

geir

On Sep 28, 2006, at 2:31 AM, Armand Navabi wrote:

I followed your suggestions below and made everything build in debug
mode.  Now I can put a break in main.c.  Thanks.

Also, now I also see debug information when I try to run helloworld.
Perhaps this debugging information is useful.

[EMAIL PROTECTED]
/u/u12/anavabi/Harmony/enhanced/drlvm/trunk/build/deploy/jre/bin $
./java helloworld

An unhandled error (4) has occurred.
HyGeneric_Signal_Number=00000004
Signal_Number=0000000b
Error_Value=00000000
Signal_Code=00000001
Handler1=0804B410
Handler2=B7EEFE46
InaccessibleAddress=00000004
EDI=080A87E0
ESI=00000000
EAX=00000000
EBX=B7F17FD4
ECX=00000000
EDX=00000000
EIP=B7F0AD94
ES=C010007B
DS=0000007B
ESP=BFE5194C
EFlags=00210246
CS=00000073
SS=0000007B
EBP=BFE51A68
Module=/lib/ld-linux.so.2
Module_base_address=B7F02000
Aborted

So now that I can put break points, I tried to follow the code in gdb to see where it was hanging. In gdb I get to line 1102 in main.c, which is
the addDirsToPath method, "execv (exeName, argv)".  I think that I
remember this being discussed before.  I believe gdb is unable to deal
with this call to execv.  So, I don't think this is what is making the
VM hang, and now I am unable to follow the execution of "java
helloworld" any further.  Is there a way around this?

Here is the gdb results:

(gdb) b main.c:315
Breakpoint 1 at 0x8048e6f: file main.c, line 315.
(gdb) r helloworld
Starting program:
/u/u12/anavabi/Harmony/enhanced/drlvm/trunk/build/deploy/jre/bin/java
helloworld
[Thread debugging using libthread_db enabled]
[New Thread 16384 (LWP 9192)]
[New Thread 32769 (LWP 9195)]
[New Thread 16386 (LWP 9196)]
[Switching to Thread 16384 (LWP 9192)]
Breakpoint 1, gpProtectedMain (args=0xbfc3df90) at main.c:315
315         rc = addDirsToPath(PORTLIB, 2, dirs, argv);
(gdb) s
addDirsToPath (portLibrary=0xbfc3dfb0, count=2, newPathToAdd=0xbfc3ddb8,
argv=0xbfc3e3a4) at main.c:1015
1015      char *oldPath = NULL;
(gdb) b 1102
Breakpoint 2 at 0x804a7aa: file main.c, line 1102.
(gdb) c
Continuing.
Breakpoint 2, addDirsToPath (portLibrary=0xbfc3dfb0, count=2,
newPathToAdd=0xbfc3ddb8, argv=0xbfc3e3a4) at main.c:1102
1102      execv (exeName, argv);
Oops, some day I made everything build in debug mode locally. And
forgot about it. Currently there is no option for that. TBD,
obviously. I do it with the patch (linux only) like this:
...

No problem. I'm glad it's helpful. I was beginning to worry that I was
just getting annoying :).

Thanks for the help,
Armand
Thank you for digging into it. That's really valuable. I hope we will
fix the issue soon.


Thanks,
Armand

Egor Pasko wrote:

I solve this by breaking inside launcher after VM lib is loaded, then
I break somewhere after libjitrino.so is loaded. Then I can break
anywhere :)

looks like this:
break main.c:360
r
dis
break compile_jit_a_method
c
dis
break whatever function you want

You can make it a script via GDB's 'define' and put somewhere in
~/.gdbinit, two scripts are better: first for initial run, the second
script does the same but reusing old breakpoint numbers:
dis
en 1
r
dis
en 2
c
dis

I should put that into the FAQ, obviously.



And then when I run the program it never stops at the breakpoint, though I see the print I have inserted in the code. Secondly, and more importantly, if I try to do anything interesting, like run helloworld, gdb seems to lose a thread and then hang (says it Cannot find a thread. Invalid thread
handle).  I have to then stop it and go kill it.


this one is probably a separate issue (not connected with "future
shared library load"). Try my above suggestion, please.



GNU gdb 6.4
Copyright 2005 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 "i686-pc-linux-gnu"...Using host libthread_db
library "/lib/libthread_db.so.1".

(gdb) r helloworld
Starting program:
/u/u12/anavabi/Harmony/enhanced/drlvm/trunk/build/deploy/jre/ bin/java
helloworld
[Thread debugging using libthread_db enabled]
[New Thread 16384 (LWP 11007)]
[New Thread 32769 (LWP 11010)]
[New Thread 16386 (LWP 11011)]
Cannot find thread 32769: invalid thread handle
(gdb) q
The program is running.  Exit anyway? (y or n) y

[1]+  Stopped                 gdb ./java


Thanks,
Armand


On the 0x1F0 day of Apache Harmony Armand Navabi wrote:


When I try to run ./java helloworld, it just hangs and I have to kill the process. I investigated this a little bit, and I found that it hangs on the call to FindClass (in main.c line around line 1199).
I am
unable debug with gdb also, so I have resorted to printf's, and in jni.cpp, I found the definition of FindClass, and put an printf to see what class it is trying to find when it hangs. I see the following:

Line 478 in jni.cpp: inside JNICALL FindClass: java/lang/Thread

Also, when I run ./java -Xtrace:em, I get the following (and it
hangs):
...
EM: compile start:[JET_DPGO n=802] java/lang/Thread::join()V
EM: compile done:[JET_DPGO n=802: OK] java/lang/Thread::join()V
EM: compile start:[JET_DPGO n=803] java/lang/Object::wait()V
EM: compile done:[JET_DPGO n=803: OK] java/lang/Object::wait()V
Line 478 in jni.cpp: inside JNICALL FindClass: java/lang/Thread

Again, it seems to always hang after FindClass is called for
java/lang/Thread.

I have tried setting LD_LIBRARY_PATH as suggested earlier. I also
have
JAVA_HOME set (and I have tried it with it unset).  Everything
seems to
have the same behavior.
[EMAIL PROTECTED] ~/Harmony/enhanced/drlvm/trunk/build/deploy/jre/ bin $
echo
$LD_LIBRARY_PATH
/homes/anavabi/Harmony/enhanced/drlvm/trunk/build/deploy/jre/ bin/:/
homes/anavabi/Harmony/enhanced/drlvm/trunk/build/deploy/jre/bin/
default
[EMAIL PROTECTED] ~/Harmony/enhanced/drlvm/trunk/build/deploy/jre/ bin $
echo
$JAVA_HOME
/homes/anavabi/Harmony/enhanced/drlvm/trunk/build/deploy/jre

I am using Gentoo Linux.  Any ideas?

Thanks,
Armand

Gregory Shimansky wrote:


On Friday 22 September 2006 14:31 Egor Pasko wrote:



what makes me really nervous is that I cannot debug in GDB on Linux (!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!)

When GDB starts, it becomes broken right after the start:
[New Thread 1080397952 (LWP 13879)]
[New Thread 1083603888 (LWP 13882)]
Cannot find user-level thread for LWP 13879: generic error

Did anybody come across this problem recently? I googled a
little, but
could not find any valuable comments. I remember, there was no such problem in older days!! Is that our new ThreadManager that does
things
like this? or is it something else?



I've seen in another thread. The problem with gdb is caused
because process
reexecs itself with new environment (there is no other way known
to tell
dynamic linker to use a library path). This is new launcher
feature necessary
to get rid of java shell script and use a real executable.

Ivan Volosyuk investigated the conditions when launcher performs
execing
itself to set LD_LIBRARY_PATH and it appears (unless fixed
recently) that you
need to set LD_LIBRARY_PATH=<HDK path>/bin/:<HDK path>/bin/
default. Don't
forget a tailing slash in the first path :)

Anyway, to get the correct LD_LIBRARY_PATH which launcher wants
you can get it
from /proc/`pidof java`/environ if you launch a simple java
program and catch
its reexeced environment. If LD_LIBRARY_PATH contents is equal to
what
launcher wants, reexecing doesn't happen and this allows normal
debugging.

I think we should document this since it is going to stay for a
long time and
is really required for development on Linux.




---------------------------------------------------------------- -----
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev- [EMAIL PROTECTED] For additional commands, e-mail: harmony-dev- [EMAIL PROTECTED]



----------------------------------------------------------------- ----
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev- [EMAIL PROTECTED] For additional commands, e-mail: harmony-dev- [EMAIL PROTECTED]



----------------------------------------------------------------- ----
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev- [EMAIL PROTECTED] For additional commands, e-mail: harmony-dev- [EMAIL PROTECTED]




--
Egor Pasko, Intel Managed Runtime Division


------------------------------------------------------------------ ---
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev- [EMAIL PROTECTED] For additional commands, e-mail: harmony-dev- [EMAIL PROTECTED]



------------------------------------------------------------------ ---
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev- [EMAIL PROTECTED] For additional commands, e-mail: harmony-dev- [EMAIL PROTECTED]






-------------------------------------------------------------------- -
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: harmony-dev- [EMAIL PROTECTED]







---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to